Вычислить координаты нарисованной линии - VB
Формулировка задачи:
Здравствуйте! Весь инет облазил и не могу найти не одного примера вычисления координат начерченной линии. Нашёл только пример, как вычислять длину и площадь линии, но это тоже не помогает.
Нужно по клику на линии выделить её другим цветом. Всем заранее спасибо за любую помощь.
Решение задачи: «Вычислить координаты нарисованной линии»
textual
Листинг программы
Private Type LineRec x1 As Long y1 As Long x2 As Long y2 As Long State As Boolean End Type Dim Lines() As LineRec Private Sub Form_Load() Me.AutoRedraw = True: Me.ScaleMode = vbPixels ReDim Lines(2) Lines(0) = SetLine(50, 50, 50, 500) Lines(1) = SetLine(200, 600, 700, 20) Lines(2) = SetLine(500, 500, 23, 56) Redraw End Sub Private Sub Redraw(Optional i As Long = -1) Dim ct As Long, n As Long If i = -1 Then i = 0: ct = UBound(Lines) Else ct = i For n = i To ct Me.Line (Lines(n).x1, Lines(n).y1)-(Lines(n).x2, Lines(n).y2), -Lines(n).State * &HFF00FF Next End Sub Private Function SetLine(x1 As Single, y1 As Single, x2 As Single, y2 As Single) As LineRec With SetLine .x1 = x1: .x2 = x2 .y1 = y1: .y2 = y2 End With End Function Private Function GetLineIndex(X As Single, Y As Single) As Long Dim i As Long, f As Single, t As Single For i = 0 To UBound(Lines) With Lines(i) If .x2 = .x1 Then If X = .x1 And ((Y >= .y1 And Y <= .y2) Or (Y >= .y2 And Y <= .y1)) Then GetLineIndex = i: Exit Function Else f = (.y2 - .y1) * (X - 1 - .x1) / (.x2 - .x1) + .y1 t = (.y2 - .y1) * (X + 1 - .x1) / (.x2 - .x1) + .y1 If Abs(Y - f) < Abs(t - f) And _ ((X >= .x1 And X <= .x2) Or (X >= .x2 And X <= .x1)) Then GetLineIndex = i: Exit Function End If End With Next GetLineIndex = -1 End Function Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim i As Long i = GetLineIndex(X, Y) If i >= 0 Then Lines(i).State = Not Lines(i).State Redraw i Me.Caption = i End If End Sub Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If GetLineIndex(X, Y) >= 0 Then Me.MousePointer = vbCrosshair Else Me.MousePointer = vbArrow End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д