Страница: 1 |
Надо узнать точку пересечения срединных перпендикуляров в трёугольнике, проще говоря, просто узнать точку пересечения двух отрезков! Кто-нить в этом разбирается?
смайлики просто улётные. Можно приравнять ур-я прямых. Подробно онахождении ур-ий по координатам можно прочитать в руководстве для поступающих в МГУ. Составляешь систему уравнений прямых. Решаешь... По методу Крамера, например! Если есть решение, значит ты получил то, что надо. Нет - значит параллельны... (хотя, если это серед. перпендикуляры, то такой случай исключается) Расскажите тада что-нибудь об этих уравнениях, или ссыллочку дайте. > хотя, если это серед. перпендикуляры, то такой случай исключается Я так не думаю. Если у треугольника один из углов равен 180 градусам, а длина самой длинной стороны равна сумме длин двух других, то ср. перпендикуляры будут параллельны. В таком случае треугольник будет выглядеть как линия, а описать окружность вокруг него будет невозможно. )) "Если у треугольника один из углов равен 180 градусам"... Я не рассматриваю вырожденного случая! Глянь на http://algolist.manual.ru/maths/geom/intersect/lineline2d.php... И вообще на algolist.ru, может найдешь чего. > У треугольника один угол не может быть равным 180 градусам. 180 градусов это сумма всех углов треугольника. Ну вот так и есть - один угол равен 180 градусам, два других - нулю. Треугольник такой. Уау, получилось! Нашло оно этот проклятый центр описанной окружности! Правда, пришлось немного поломать голову над этим уравнением... Привет! Пресечение прямых получишь используя функцию peresec Немножко нелепо выглядит (без особых раздумий перенёс со старых своих исходников на С), но работать должна, проверь. Я проверял корректность функции рисуя на форме пересекающиеся линии. Global Const HORIZ = 0 Ну ты блин закрутил... Никакой процессор не возьмётся выполнять стоко всякого д..... 100 раз в секунду! Это работает. Не нравится сделай лучше. Удачи! Страница: 1 |
Вопрос: Узнать точку пересечения срединных перпендикуля...
Добавлено: 15.02.03 14:36
Автор вопроса: Страшный Сон
Ответы
Всего ответов: 10
Номер ответа: 1
Автор ответа:
Silent Bob
Вопросов: 36
Ответов: 65
Web-сайт:
Профиль | | #1
Добавлено: 15.02.03 22:09
Номер ответа: 2
Автор ответа:
AlexSid
Вопросов: 4
Ответов: 27
Профиль | | #2
Добавлено: 16.02.03 02:49
Номер ответа: 3
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #3
Добавлено: 16.02.03 09:33
Номер ответа: 4
Автор ответа:
vig11
ICQ: 213777061
Вопросов: 21
Ответов: 159
Профиль | | #4
Добавлено: 16.02.03 10:01
У треугольника один угол не может быть равным 180 градусам. 180 градусов это сумма всех углов треугольника.
Номер ответа: 5
Автор ответа:
AlexSid
Вопросов: 4
Ответов: 27
Профиль | | #5
Добавлено: 16.02.03 12:28
Номер ответа: 6
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #6
Добавлено: 16.02.03 13:02
Номер ответа: 7
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #7
Добавлено: 16.02.03 13:48
Номер ответа: 8
Автор ответа:
Bob
Вопросов: 0
Ответов: 2
Профиль | | #8
Добавлено: 28.02.03 13:49
Global Const VERT = 1
Global Const ANGLL = 2
Global Const ORTO = 3
Global Const ERRORH = 50
Global Const OFF = -1
Global Const OMM = 1
Public Function Parline(ByRef a As Variant, ByRef b As Variant, x0 As Variant, _
y0 As Variant, x1 As Variant, y1 As Variant) As Integer
Dim dx, dy, tmp As Double
Dim PI As Double
PI = 4 * Atn(1)
tmp = Sqr((x1 - x0) ^ 2 + (y1 - y0) ^ 2)
If tmp = 0# Then: Parline = ERRORH: Exit Function
dx = Abs(x1 - x0)
dy = Abs(y1 - y0)
If dy < 0.25 Then: a = 0#: b = y0: Parline = HORIZ: Exit Function
If dx < 0.25 Then: a = 1E+15: b = x0: Parline = VERT: Exit Function
If dx > dy Then
dx = dx / tmp
dx = Atn(-dx / Sqr(-dx * dx + 1)) + 2 * Atn(1)
If Abs(dx) < 0.0001 Then
a = 0#
b = y0
Parline = HORIZ
Exit Function
Else
If Abs(dx - PI / 2) < 0.0001 Then a = 1E+15: b = x0: Parline = VERT: Exit Function
End If
Else
dy = dy / tmp
dx = Atn(dy / Sqr(-dy * dy + 1))
If Abs(dx) < 0.0001 Then
a = 0#: b = y0: Parline = HORIZ: Exit Function
Else
If Abs(dx - PI / 2) < 0.0001 Then a = 1E+15: b = x0: Parline = VERT: Exit Function
End If
End If
a = (y1 - y0) / (x1 - x0)
b = y0 - a * x0
Parline = ANGLL
End Function
Public Function Peresec(ByRef xp As Variant, ByRef yp As Variant, x1 As Variant, _
y1 As Variant, x2 As Variant, y2 As Variant, x3 As Variant, y3 As Variant, _
x4 As Variant, y4 As Variant) As Integer
Dim to1, to2 As Integer
Dim a1, a2, b1, b2 As Single
xp = -1
yp = -1
to1 = Parline(a1, b1, x1, y1, x2, y2)
to2 = Parline(a2, b2, x3, y3, x4, y4)
If to1 = VERT Then
If Sqr(x1 ^ 2 + y1 ^ 2) < Sqr(x2 ^ 2 + y2 ^ 2) Then
x2 = x1
Else
x1 = x2
End If
End If
If to2 = VERT Then
If Sqr(x3 ^ 2 + y3 ^ 2) < Sqr(x4 ^ 2 + y4 ^ 2) Then
x4 = x3
Else
x3 = x4
End If
End If
If to2 = to1 And (to2 = VERT Or to2 = HORIZ) Then
If Abs(b1 - b2) > 0.0001 Then: GoTo OFF
If to1 = HORIZ Then
If x1 > x2 Then: Swap x1, x2
If x3 > x4 Then: Swap x3, x4
yp = b1
xp = x4
If Abs(x2 - x1) > Abs(x4 - x3) Then
If x1 = x3 And x2 > x4 Then: GoTo OM
End If
xp = x2
If Abs(x2 - x1) < Abs(x4 - x3) Then
If x1 = x3 And x2 < x4 Then: GoTo OM
End If
xp = x1
If x1 = x4 Then: GoTo OM
xp = x2
If x2 = x3 Then: GoTo OM
If x4 = x2 Then
xp = x1
If Abs(x2 - x1) < Abs(x4 - x3) Then GoTo OM
xp = x3
If Abs(x2 - x1) > Abs(x4 - x3) Then GoTo OM
End If
If (x2 < x3) Or (x1 > x4) Then GoTo OFF
Peresec = ERRORH
Exit Function
End If
If y1 > y2 Then: Swap y1, y2
If y3 > y4 Then: Swap y3, y4
If (y2 - y1) > (y4 - y3) Then
xp = b1
If (y1 = y3) And (y2 > y4) Then: yp = y4: GoTo OM
'If y2 = y3 Then: yp = y2: GoTo Om
'If y1 = y4 Then: yp = y1: GoTo Om
If y2 = y4 Then
If Abs(y2 - y1) < Abs(y4 - y3) Then: yp = y1: GoTo OM
If Abs(y2 - y1) > Abs(y4 - y3) Then: yp = y3: GoTo OM
End If
End If
If y2 - y1 < y4 - y3 Then
If (y1 = y3) And (y2 < y4) Then: xp = b1: yp = y2: GoTo OM
End If
End If
If (to1 = VERT) And (to2 = HORIZ) Then
xp = b1
yp = b2
If (((b2 >= y1 And b2 <= y2) Or (b2 <= y1 And b2 >= y2)) _
And ((b1 >= x3 And b1 <= x4) Or (b1 <= x3 And b1 >= x4))) Then
GoTo OM
Else
GoTo OFF
End If
End If
If (to2 = VERT) And (to1 = HORIZ) Then
xp = b2
yp = b1
If (((b2 > x1 And b2 < x2) Or (b2 < x1 And b2 > x2)) And _
((b1 >= y3 And b1 <= y4) Or (b1 <= y3 And b1 >= y4))) Then
GoTo OM
Else
GoTo OFF
End If
End If
xp = x1
yp = y1
If (Abs(x1 - x3) < 0.01 And Abs(y1 - y3) < 0.01 And a1 <> a2) Then GoTo OM
If (Abs(x1 - x4) < 0.01 And Abs(y1 - y4) < 0.01 And a1 <> a2) Then GoTo OM
xp = x2
yp = y2
If (Abs(x2 - x4) < 0.01 And Abs(y2 - y4) < 0.01 And a1 <> a2) Then GoTo OM
If (Abs(x2 - x3) < 0.01 And Abs(y2 - y3) < 0.01 And a1 <> a2) Then GoTo OM
If (x1 > x2) Then: Swap x1, x2
If (y1 > y2) Then: Swap y1, y2
If (x3 > x4) Then: Swap x3, x4
If (y3 > y4) Then: Swap y3, y4
If (to1 = ANGLL Or to2 = ANGLL) Then
If (Abs(a1 - a2) < 0.0001) Then
If (Abs(b2 - b1) < 0.0001) Then
If (((x1 > x3) And (x2 < x3)) Or ((x1 > x4) And (x2 < x4))) Then
GoTo OM
Else
GoTo OFF
End If
&nb
Номер ответа: 9
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #9
Добавлено: 28.02.03 14:26
Номер ответа: 10
Автор ответа:
Bob
Вопросов: 0
Ответов: 2
Профиль | | #10
Добавлено: 03.03.03 08:52