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

                  Đang tải...
                  X