Координата точки в круге и четырёхугольнике
От: Phisio  
Дата: 28.10.02 12:01
Оценка:
Приветствую!
Скиньте алгоритм,назодится ли точка находится внутри четырёхугольника(не прямоугольника),и находится ли точка внутри круга?
Спасибо
Re: Координата точки в круге и четырёхугольнике
От: Аноним  
Дата: 28.10.02 16:15
Оценка:
Здравствуйте Phisio, Вы писали:

P>Приветствую!

P>Скиньте алгоритм,назодится ли точка находится внутри четырёхугольника(не прямоугольника),и находится ли точка внутри круга?
P>Спасибо

Ну внутри круга достаточно просто нужно определить расстояние от сентра до точки и оно долждно быть меньше радиуса. Или можешь воспользоваться формулой круга x^2+y^2<=r^2 (что одно и тоже)
Re: Координата точки в круге и четырёхугольнике
От: bask Россия  
Дата: 04.03.03 10:21
Оценка:
...
Что касается произвольного ВЫПУКЛОГО многоугольника, то можно поступать так. Необходимо представить многоугольник как набор ориентированных отрезков (векторов), задающих его, положим, по часовой стрелке (важно, чтобы ориентация векторов была одинаковой!). Далее, для каждого вектора и проверяем расстояние до него от заданной точки.

type
TEdge = record
org, dest: TPoint;
end;

function Distance(p: TPoint; e: TEdge): real;
var
A, B, C, d, r: real;
begin
A := e.dest.y — e.org.y;
B := e.org.x — e.dest.x;
C := -A * e.org.x — B * e.org.y;
d := sqrt(A*A+B*B);
if d = 0
then r := 1
else r := (A * p.x + B * p.y + C) / d;
Result := r;
end;

Если для всех векторов это расстояние одного знака (положительного — в случае определения многоугольника векторами ПО часовой стрелке), то точка лежит ВНУТРИ многоугольника, иначе — ВНЕ.
В общем случае, если многоугольник — произвольный, то необходимо произвести его деление на серию выпуклых и для них провести вышеописанную обработку.
Ещё можно, вообще, произвести триангуляцию многоугольника (т.е. его разбиение на треугольникики и проверить положение точки внутри треугольника — про это уже писали сотню раз и это проще), например, Делоне.
Re: Координата точки в круге и четырёхугольнике
От: mrhru Россия  
Дата: 05.03.03 02:06
Оценка:
Здравствуйте, Phisio, Вы писали:

P>Приветствую!

P>Скиньте алгоритм,назодится ли точка находится внутри четырёхугольника(не прямоугольника),и находится ли точка внутри круга?

Насчёт круга, задача, до настоящего момента, не решена в общем виде.

Ну, если не считать решением тривиальное вычисление расстояние от
точки до центра круга и сравнение его с радиусом оного.

Теперь о четырёхугольниках, или о произвольных многоугольниках,
в т.ч. и невыпуклых.

Определим углы, под которыми каждая грань многоугольника "видна"
из точки, причём с учётом знака — т.е. например, для направления
по часовой стрелке будем считать углы положительными. Тогда сумма
всех таких углов для любого замкнутого многоугольника будет равна
N * 2pi, где N = 0, 1, 2...

Только при N = 0, наша точка лежит вне многоугольника,
иначе — внутри.

Всё
Евгений
Re: Координата точки в круге и четырёхугольнике
От: bask Россия  
Дата: 05.03.03 05:43
Оценка:
Могу также посоветовать книгу Майкла Ласло "Вычислительная геометрия и компьютерная графика" с кучей примеров!
Re[2]: Координата точки в круге и четырёхугольнике
От: Sinclair Россия https://github.com/evilguest/
Дата: 05.03.03 13:30
Оценка:
Здравствуйте, mrhru, Вы писали:

M>Насчёт круга, задача, до настоящего момента, не решена в общем виде.


M>Ну, если не считать решением тривиальное вычисление расстояние от

M>точки до центра круга и сравнение его с радиусом оного.

Простите мою некомпетентность, но что вы подразумеваете под "решением в общем виде" и чем не устраивает тривиальное сравнение расстояния с радиусом?
... << RSDN@Home 1.0 beta 6 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Координата точки в круге и четырёхугольнике
От: klovetski Россия  
Дата: 05.03.03 17:03
Оценка:
Здравствуйте, Phisio,

function PointInPolygon(xp, yp : array of Single; x, y: Single): Boolean;

// The code below is from Wm. Randolph Franklin <wrf@ecse.rpi.edu>
// with some minor modifications for speed. It returns 1 for strictly
// interior points, 0 for strictly exterior, and 0 or 1 for points on
// the boundary.
// This code is not yet tested!

var I, J: Integer;

begin
Result := False;
if High(XP) <> High(YP) then Exit;
J := High(XP);
for I := 0 to High(XP) do
begin
if ((((yp[I] <= y) and (y < yp[J])) or ((yp[J] <= y) and (y < yp[I]))) and
(x < (xp[J] — xp[I]) * (y — yp[I]) / (yp[J] — yp[I]) + xp[I]))
then Result := not Result;
J := I + 1;
end;
end;

Константин
Re[3]: Координата точки в круге и четырёхугольнике
От: mrhru Россия  
Дата: 06.03.03 01:41
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, mrhru, Вы писали:


M>>Насчёт круга, задача, до настоящего момента, не решена в общем виде.


M>>Ну, если не считать решением тривиальное вычисление расстояние от

M>>точки до центра круга и сравнение его с радиусом оного.

S>Простите мою некомпетентность, но что вы подразумеваете под "решением в общем виде" и чем не устраивает тривиальное сравнение расстояния с радиусом?


Гм, извиняюсь.
Просто фраза понравилась: "задача, до настоящего момента, не решена в общем виде".
Вот и решил вставить.
Евгений
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.