Thông báo

Collapse
No announcement yet.

toạ độ trong vb

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • toạ độ trong vb

    sư huynh nào chỉ giúp em với em
    nội dung như sau : em cần add 1 bitmap vào rồi mỗi lần em click chuột thì dc 1 điểm sau đó em ấn nút run thì nó sẽ nối tất cả các điểm đó lại với nhau thành đường thẳng với dạng chạy chấm chấm qua tất cả điểm
    em có lam nhưng chỉ làm dc 1 đường vì ko thể nhớ hết các điểm mà mục tiêu của em là muốn click tất cả các điểm rồi run thì mới nối lại hết .nếu dc viết dùm em code nha mấy anh chị em gà thiệt em cần gấp le1m càng nhanh càng tốt

  • #2
    Bạn dùng mảng lưu tọa độ các điểm lại, sau đó lặp từ đầu đến cuối mảng vẽ các đường thẳng có điểm đầu là tọa độ lưu trong phần tử thứ n, điểm cuối có tọa độ lưu trong phần tử n+1

    Comment


    • #3
      à là mình tạo 1 mảng lưu nó giống database ok hỉu rồi thank nhá

      Comment


      • #4
        Nguyên văn bởi zeroFILL Xem bài viết
        Bạn dùng mảng lưu tọa độ các điểm lại, sau đó lặp từ đầu đến cuối mảng vẽ các đường thẳng có điểm đầu là tọa độ lưu trong phần tử thứ n, điểm cuối có tọa độ lưu trong phần tử n+1
        mình đã làm như bạn chỉ dẫn mà sao cứ error hoài nó ko chịu cho khi mình mousedown thì ko thể lưu x,y trong mảng dc hay sao đó xin nói rõ hơn chút xíu nữa nhé

        Comment


        • #5
          Công việc thế này:
          1. Lấy tọa độ con trỏ chuột trên form khi left click, lưu vào 1 mảng
          2. Lặp từ đầu đến cuối mảng, dùng lệnh Me.Line để nối các điểm với nhau

          Vì mỗi một điểm bạn phải lưu thông tin về tọa độ X và Y nên phải khai báo kiểu dữ liệu mới. Mảng lưu tọa độ sẽ có kiểu dữ liệu này

          Giải quyết:

          - Add 1 module vào chương trình, copy paste đoạn code khai báo kiểu dữ liệu điểm sau:
          Code:
          Type Point
              X As Single
              Y As Single
          End Type
          - Đặt 1 nút tên Command1 lên form, copy paste đoạn code sau vào:
          Code:
          Dim PA(100) As Point
          Dim c As Integer
          
          Private Sub Command1_Click()
              Dim i
              For i = 1 To c - 1
                  Me.Line (PA(i).X, PA(i).Y)-(PA(i + 1).X, PA(i + 1).Y), vbBlack
              Next i
          End Sub
          
          Private Sub Form_Load()
              c = 0
          End Sub
          
          Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
              c = c + 1
              PA(c).X = X
              PA(c).Y = Y
          End Sub
          Mảng PA dùng lưu tọa độ các điểm (Point Array), bạn có thể dùng mảng động để thay thế
          Biến C dùng để đếm số lần click chuột lên form, mỗi lần click C tăng lên 1 và sẽ thêm 1 tọa độ điểm vào mảng
          Biến i chỉ chạy từ 1 đến C-1, tọa độ điểm đầu là i, tọa độ điểm đích là i+1. Khi ấn nút Command1 các điểm sẽ được nối với nhau bằng đường thẳng màu đen

          Về cơ bản là như vậy, lần sau bạn nên gửi code lên hoặc ghi rõ thông báo lỗi mà bạn gặp thì mọi người mới giúp được.

          Comment


          • #6
            Nguyên văn bởi zeroFILL Xem bài viết
            Công việc thế này:
            1. Lấy tọa độ con trỏ chuột trên form khi left click, lưu vào 1 mảng
            2. Lặp từ đầu đến cuối mảng, dùng lệnh Me.Line để nối các điểm với nhau

            Vì mỗi một điểm bạn phải lưu thông tin về tọa độ X và Y nên phải khai báo kiểu dữ liệu mới. Mảng lưu tọa độ sẽ có kiểu dữ liệu này

            Giải quyết:

            - Add 1 module vào chương trình, copy paste đoạn code khai báo kiểu dữ liệu điểm sau:
            Code:
            Type Point
                X As Single
                Y As Single
            End Type
            - Đặt 1 nút tên Command1 lên form, copy paste đoạn code sau vào:
            Code:
            Dim PA(100) As Point
            Dim c As Integer
            
            Private Sub Command1_Click()
                Dim i
                For i = 1 To c - 1
                    Me.Line (PA(i).X, PA(i).Y)-(PA(i + 1).X, PA(i + 1).Y), vbBlack
                Next i
            End Sub
            
            Private Sub Form_Load()
                c = 0
            End Sub
            
            Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
                c = c + 1
                PA(c).X = X
                PA(c).Y = Y
            End Sub
            Mảng PA dùng lưu tọa độ các điểm (Point Array), bạn có thể dùng mảng động để thay thế
            Biến C dùng để đếm số lần click chuột lên form, mỗi lần click C tăng lên 1 và sẽ thêm 1 tọa độ điểm vào mảng
            Biến i chỉ chạy từ 1 đến C-1, tọa độ điểm đầu là i, tọa độ điểm đích là i+1. Khi ấn nút Command1 các điểm sẽ được nối với nhau bằng đường thẳng màu đen

            Về cơ bản là như vậy, lần sau bạn nên gửi code lên hoặc ghi rõ thông báo lỗi mà bạn gặp thì mọi người mới giúp được.
            khè khè ngu thiệt tại tui dùng line (x1,y1)-(x2,y2),RGB(255,0,0) nên ko lưu dc mảng khè khè thank nhiều nhá và tại tui làm vậy nè
            Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
            n=n+1
            redim toado(1 to n ) as point
            toado(n).x=x
            toado(n).y=y
            chắc tại mảng bị sao nên chỉ nhớ có điểm cuồi hè thank nhá
            Last edited by thienbinh23; 30-10-2007, 15:07.

            Comment


            • #7
              Bạn thiếu từ khóa Preserve, muốn ReDim mà không mất dữ liệu của mảng động phải dùng ReDim Preserve tên_mảng(số_phần_tử)

              Comment


              • #8
                Nguyên văn bởi zeroFILL Xem bài viết
                Bạn thiếu từ khóa Preserve, muốn ReDim mà không mất dữ liệu của mảng động phải dùng ReDim Preserve tên_mảng(số_phần_tử)
                à bạn ơi từ toạ độ các điểm mình đã có bây giờ mình vẽ line qua mà làm sao cho nó chạy từng chấm chấm từ từ qua các điểm đó mình viết vậy bạn coi đúng ko nhé sao ko chạy ta
                Private Sub tmrtimer_Timer()
                Dim h As Integer
                Dim k As Integer
                Dim b As Integer
                Dim c As Integer
                i = 1
                k = (toado(i + 1).Y - toado(i).Y) / (toado(i + 1).X - toado(i).X)
                b = toado(i).Y * (toado(i).X + toado(i + 1).X) - toado(i).X * (toado(i).Y + toado(i + 1).Y)
                tmrtimer.Interval = 50
                For h = 1 To Max
                If toado(i).X < toado(i + 1).X Then
                c = k * (toado(i).X + h) + b
                Max = toado(i + 1).X
                Me.Line (toado(i + 1).X, toado(i + 1).Y)-(toado(i).X + h, c), vbRed
                ElseIf toado(i).X > toado(i + 1).X Then
                c = k * (toado(i).X - h) + b
                Max = toado(i).X
                Me.Line (toado(i).X, toado(i).Y)-(toado(i).X - h, c), vbRed
                ElseIf toado(i).X = toado(i + 1).X Then
                If toado(i).Y > toado(i + 1).Y Then
                c = toado(i).Y - h
                Max = toado(i).Y
                Me.Line (toado(i).X, toado(i).Y)-(toado(i + 1).X, c), vbRed
                Else
                c = toado(i).Y + h
                Max = toado(i + 1).Y
                Me.Line (toado(i + 1).X, toado(i + 1).Y)-(toado(i).X, c), vbRed
                End If
                End If
                Next h
                End Sub
                góp ý nhá mà ko bit làm sao lồng i vào giờ ko bit đúng ko

                Comment


                • #9
                  Sorry, chỉ giúp bạn được như vậy thôi, nếu muốn vẽ các điểm từ từ nối 2 tọa độ với nhau bạn có thể vẽ đường thẳng với điểm gốc là tọa độ thứ nhất, điểm ngọn có tọa độ được tính toán sao cho thỏa mãn phương trình đường thẳng đó là được. Nguyên lý là như vậy, bạn tự phát triển tiếp vì lâu rồi tôi không đụng đến mấy công thức toán này nên không giúp bạn được.

                  Nếu không dùng các hàm OpenGL hay DirectX, chỉ dùng Timer và đối tượng có sẵn của VB thì không được đẹp lắm đâu.

                  Chúc bạn thành công!

                  Comment

                  Về tác giả

                  Collapse

                  thienbinh23 Tìm hiểu thêm về thienbinh23

                  Bài viết mới nhất

                  Collapse

                  • tuyennhan
                    Trả lời cho Tiếng Anh cho người Việt
                    bởi tuyennhan
                    Cái thư sai ngay câu chào Dear sir mới đúng Hi chỉ dùng cho người quen , các vấn đề về kỹ thuật nó không trả lời hoặc nói loanh quanh tránh ảnh hưởng đến công ty .
                    Giup1 người cần không giúp người không cần với lại văn mình vợ người nha đừng quên .
                    hôm nay, 07:44
                  • vi van pham
                    Trả lời cho Tiếng Anh cho người Việt
                    bởi vi van pham
                    Cám ơn những lời chúc tốt đẹp của em.

                    Việc em làm giống như chê sếp dốt, chẳng những không có miếng xôi nào để ăn mà còn chịu nhiều trù dập lên bờ , xuống ruộng.

                    Hãy tránh vết xe đổ của tui đi. Dành thời gian lo cho gia đình....
                    hôm nay, 02:00
                  • nhathung1101
                    Trả lời cho Tiếng Anh cho người Việt
                    bởi nhathung1101
                    Ngoại ngữ là không thể thiếu, nhất là làm việc với công nghệ.

                    Nhưng học để tán gái hay để đọc datasheet, manual là chuyện cần quan tâm.

                    Và đọc ở nguồn nào đáng tin cậy, chứ cứ lên tictok hay facebook học lỏm thì...
                    Hôm qua, 22:18
                  • dinhthuong80
                    Trả lời cho Tiếng Anh cho người Việt
                    bởi dinhthuong80
                    Bác nói rất khách quan và chính xác. Ngoại ngữ là chìa khóa thăng tiến dù làm gì. Chả thế mà nay nước mình dạy tiếng Anh từ tiểu học.

                    Nhớ hồi năm 2006 em ra Hải Phòng, Hải Dương tìm việc, thời đó ở Bình Dương lương công...
                    Hôm qua, 14:51
                  • dinhthuong80
                    Trả lời cho Tiếng Anh cho người Việt
                    bởi dinhthuong80
                    Cảm ơn bạn, ĐT cũng có ý nghĩ như vậy.

                    Thực ra, lỗi của hãng đó ( gọi là hãng vì không chỉ một model sản phẩm) là về phần cứng, ĐT tuy không biết về lập trình phần mềm nhưng cũng thấy rằng sẽ chẳng khó khăn gì đáng...
                    Hôm qua, 14:39
                  • dinhthuong80
                    Trả lời cho Tiếng Anh cho người Việt
                    bởi dinhthuong80
                    Dạ, bác bảy mấy tuổi đời rồi cũng không kém bố cháu bao nhiêu. Tuổi nghề thì bác cũng đáng tuổi cha chú.

                    Nhưng 2 điều trên thì chưa hẳn đã đáng quí và đáng tôn trọng bằng việc bác rất nhiệt tình chia sẻ kinh nghiệm chuyên...
                    Hôm qua, 14:28
                  • bqviet
                    Trả lời cho Tiếng Anh cho người Việt
                    bởi bqviet
                    Đúng, nếu chú tâm thì chỉ cần mỗi tiếng Việt là đã khá đủ để làm đa số công việc thông thường, ở thời đại ngày nay khi tài liệu sách vở phương tiện thông tin liên lạc đã nhiều. Nhưng cũng chính ở thời nay giao lưu các nước nhiều...
                    21-02-2025, 20:26
                  • mèomướp
                    Trả lời cho Tiếng Anh cho người Việt
                    bởi mèomướp
                    Dạ cháu nghĩ chú dinh... cứ mạnh dạn gửi thư đi ạ, chú có thể gửi bằng văn bản in chuyển phát nhanh sẽ có giá trị hơn. Vấn đề chưa hẳn là cần hãng làm gì đó, mà chỉ đơn giản là mình cảm thấy nhẹ lòng vì đã làm những việc bản...
                    21-02-2025, 12:32
                  • vi van pham
                    Trả lời cho Tiếng Anh cho người Việt
                    bởi vi van pham
                    Những lần hắt hơi sổ mũi làm tôi mệt lã, phải dùng rượu uống để ngũ. Tôi cũng đang uống rượu 1 mình, viết vài dòng này cho em ( có lẽ dt chỉ bằng tuổi em tôi).

                    Dinh thuong dang đi vào vết xe đổ của tôi. Càng chứng minh, có...
                    20-02-2025, 21:31
                  • bqviet
                    Trả lời cho Hỏi về cách hàn linh kiện ( giúp tớ với )
                    bởi bqviet
                    Thiết nghĩ thi thoảng bác lên đây chia xẻ ít kinh nghiệm cũng vui rồi. Còn chuyện con người sinh lão bệnh tử là thường, sống cùng với quy luật đó thôi. Bqv nhớ trước đây bác từng kể về chuyện rang chì ô-xít bằng chảo để phục hồi bình điện, đấy cũng là thành quả đáng nể phục ở thời kỳ thiếu thốn đó.
                    20-02-2025, 17:22
                  Đang tải...
                  X