Принадлежность точки дуге

У меня есть окружность, известен радиус как R, известен центр окружности(xc, yc).

ате

Я рисую два вектора с центра к краю окружности. Как узнать, точка с координатами (x,y) находится между векторами или нет


Ответы (2 шт):

Автор решения: Harry

Определить углы радиусов, угол радиуса к точке и убедиться, что этот угол там, где надо угол :)

Основной вопрос - любая точка на окружности в принципе на этой дуге... Только одна дуга (на рисунке) - сверху, вторая - снизу :) Тут уж решайте сами, принадлежность какой дуге нужна...

Update

С учетом изменения условия в комментариях - находите угол между векторами (x-x0,y-y0) и (x1-x0,y1-y0) - из центра к вашей точке и к точке (x1,y1) - например, вычисляя скалярное произведение - и смотрите, меньше ли он указанного вами раствора (последнее ваше значение - 45 градусов).

Если меньше - попадает, если больше - нет...

Собственно, вот:

введите сюда описание изображения

Или даже

введите сюда описание изображения

Только тут неплохо бы убедиться, что расстояния от точек до центра и правда равны радиусу...

введите сюда описание изображения

→ Ссылка
Автор решения: MBo

Данный подход не использует тригонометрических функций и вообще углов, только векторная алгебра.

Задача так толком и не поставлена, но будем считать, что размер сектора не превышает Pi.

Векторы X1, X2 и A - из центра к первой точке, ко второй, и к точке a

x1 = p1.x - xc
y1 = p1.y - yc
x2 = p2.x - xc
y2 = p2.y - yc
xa = a.x - xc
ya = a.y - yc

Тогда посчитаем знаки (-1; 0; +1) косых произведений векторов X1 x X2, X1 x A, A x X2.

s12 = sign(x1*y2 - y1*x2)
s1a = sign(x1*ya - y1*xa)
sa2 = sign(xa*y2 - ya*x2)

Если все три знака совпадают (или среди них есть нули), то точка А находится в секторе X1X2 независимо от взаимной ориентации X1 и X2

→ Ссылка