Вычислить попарно расстояние между точками - VB (59805)
Формулировка задачи:
Заданы 10 пар координат одних точек Аi и Bi на плоскости и 10 пар других точек Ci Di(координаты считаются по расположению курсора мыши и отображаются на форме с помощью Label.)Вычислить попарно расстояние между точками Si=√((xi-Ai)^2+(Yi-Bi)^2).Занести расстояния в массив Si.Показать графически минимальный и максимальный отрезки выделить другими цветами.
Имеется такой код. Нужно дописать так, чтобы также выводились длины этих отрезков.
И еще - для чего нужно это?
Решение задачи: «Вычислить попарно расстояние между точками»
textual
Листинг программы
Option Explicit
Dim a(1 To 10) As Integer
Dim b(1 To 10) As Integer
Dim c(1 To 10) As Integer
Dim d(1 To 10) As Integer
Dim s(1 To 10) As Integer
Dim i As Integer
Dim j As Integer
Private Sub Form_Load()
i = 1: j = 1
Label1 = "Координаты точек" & vbCrLf
Exit Sub
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim min As Long, max As Long, k As Integer, k_min As Integer, k_max As Integer
If i >= 11 And j >= 11 Then
min = Sqr(ScaleWidth ^ 2 + ScaleHeight ^ 2)
max = 0
For k = 1 To 10
s(k) = ((a(k) - c(k)) ^ 2 + (b(k) - d(k))) ^ 0.5
If s(k) < min Then min = s(k): k_min = k
If s(k) > max Then max = s(k): k_max = k
Next
Me.PSet (a(k_min), b(k_min)), vbGreen
Me.Circle (a(k_min), b(k_min)), 50, vbGreen
Me.PSet (c(k_min), d(k_min)), vbGreen
Me.Circle (c(k_min), d(k_min)), 50, vbGreen
Me.Line (a(k_min), b(k_min))-(c(k_min), d(k_min)), vbGreen
Me.PSet (a(k_max), b(k_max)), vbCyan
Me.Circle (a(k_max), b(k_max)), 50, vbCyan
Me.PSet (c(k_max), d(k_max)), vbCyan
Me.Circle (c(k_max), d(k_max)), 50, vbCyan
Me.Line (a(k_max), b(k_max))-(c(k_max), d(k_max)), vbCyan
If i = 11 Then
i = i + 1
For k = 1 To 10
s(k) = ((a(k) - c(k)) ^ 2 + (b(k) - d(k))) ^ 0.5
Label1 = Label1 & "Длина " & k & ":" & k & " = " & s(k) & vbCrLf
Next
Label1 = Label1 & "min (" & k_min & ":" & k_min & ") = " & min & vbCrLf & "max (" & k_max & ":" & k_max & ") = " & max & vbCrLf
End If
End If
If j < 11 Then
If i < 11 Then
a(i) = X: b(i) = Y
Me.PSet (X, Y), vbRed
Me.Circle (X, Y), 50, vbRed
Me.CurrentX = X + 50
Me.CurrentY = Y + 50
Me.Print i
i = i + 1
Else
c(j) = X: d(j) = Y
Me.PSet (X, Y), vbBlue
Me.Circle (X, Y), 50, vbBlue
Me.CurrentX = X + 50
Me.CurrentY = Y + 50
Me.Print j
j = j + 1
End If
Label1 = Label1 & X & " : " & Y & vbCrLf
End If
Exit Sub
End Sub