Страница: 1 |
Надо узнать точку пересечения срединных перпендикуляров в трёугольнике, проще говоря, просто узнать точку пересечения двух отрезков! Кто-нить в этом разбирается?
смайлики просто улётные. Можно приравнять ур-я прямых. Подробно онахождении ур-ий по координатам можно прочитать в руководстве для поступающих в МГУ. Составляешь систему уравнений прямых. Решаешь... По методу Крамера, например! Если есть решение, значит ты получил то, что надо. Нет - значит параллельны... (хотя, если это серед. перпендикуляры, то такой случай исключается) Расскажите тада что-нибудь об этих уравнениях, или ссыллочку дайте. > хотя, если это серед. перпендикуляры, то такой случай исключается Я так не думаю. Если у треугольника один из углов равен 180 градусам, а длина самой длинной стороны равна сумме длин двух других, то ср. перпендикуляры будут параллельны. В таком случае треугольник будет выглядеть как линия, а описать окружность вокруг него будет невозможно. "Если у треугольника один из углов равен 180 градусам"... Я не рассматриваю вырожденного случая! Глянь на http://algolist.manual.ru/maths/geom/intersect/lineline2d.php... И вообще на algolist.ru, может найдешь чего. > У треугольника один угол не может быть равным 180 градусам. 180 градусов это сумма всех углов треугольника. Ну вот так и есть - один угол равен 180 градусам, два других - нулю. Треугольник такой. Уау, получилось! Привет! Пресечение прямых получишь используя функцию peresec Немножко нелепо выглядит (без особых раздумий перенёс со старых своих исходников на С), но работать должна, проверь. Я проверял корректность функции рисуя на форме пересекающиеся линии. Global Const HORIZ = 0 Ну ты блин закрутил... Это работает. Не нравится сделай лучше. Удачи! Страница: 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
Никакой процессор не возьмётся выполнять стоко всякого д..... 100 раз в секунду!
Номер ответа: 10
Автор ответа: Bob
Вопросов: 0
Ответов: 2
Профиль | | #10
Добавлено: 03.03.03 08:52