Top.Mail.Ru
Ответы

Как узнать находится ли точка внутри фигуры?

На плоскости даны координаты вершин фигуры (или нескольких фигур) и точки. Нужно узнать находится ли точка внутри фигуры (фигрур) или нет.
Я думаю, что надо составить уравнение каждой прямой фигуры и сделать проверку, чтобы узнать по какую сторону от линии лежит точка, и таким образом получить ответ. Подскажите в двух словах как проверить слева или справа отпрямой находится точки и есть ли более быстрый, лучший способ получить ответ?

По дате
По рейтингу
Аватар пользователя
Новичок
13лет

Возмем треугольник – по Герону – площадь,
Затем вместо одной вершины, возмем данную точку
И снова площадь … если меньше .. значит внутри.
Сложную фигуру разобъем на треугольники и так же.
Это если выпуклая. Если нет … то смотреть,
Не должна принадлежать вогнутости – так же.
Это самый общий случай.

Аватар пользователя
Оракул
13лет

Если не понял что написал саша мошкин пиши сделаю за тебя

Аватар пользователя
Высший разум
13лет

Если фигура правильная, то возможно и правы, так как идя по каждой линии (обход по часовой стрелке) точка должна быть справа. Но, в общем, есть встроенные функции для этого, а если Вас интересует матаппарат, то почитайте книги.
Случаи когда фигура не правильная самые интересные.

Аватар пользователя
Гуру
13лет

А можно сделать хитро, через WinAPI:

Declare Function CreatePolygonRgn Lib "gdi32.dll" (lpPoint As POINTAPI, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
Declare Function PtInRegion Lib "gdi32.dll" (ByVal hrgn As Long, ByVal x As Long, ByVal y As Long) As Boolean
Type POINTAPI
x As Long
y As Long
End Type

Sub Hop()
Dim crd() As POINTAPI
Dim hrgn As Long
x = InputBox("Введите координату x точки")
y = InputBox("Введите координату y точки")
cnt = InputBox("Введите количество вершин многоугольника")
ReDim crd(1 To cnt)
For i = 1 To cnt
crd(i).x = InputBox("Введите координату x " & i & "-й вершины многоугольника")
crd(i).y = InputBox("Введите координату y " & i & "-й вершины многоугольника")
Next
hrgn = CreatePolygonRgn(crd(1), cnt, 1)
If PtInRegion(hrgn, x, y) Then
MsgBox "Точка принадлежит многоугольнику"
Else: MsgBox "Точка не принадлежит многоугольнику"
End If
End Sub

Аватар пользователя
Мыслитель
13лет

Лучшеб фигуру привели для примера