2009-07-22 2 views
6

я имею следующий геометрический вопрос в 2D:2D геометрии: как проверить, если точка находится внутри угла

я иметь точку, из которой я бросить бесконечный угол (2D-конус), который задается направление и угол. (точка и направление образуют вектор, а с каждой стороны половина угла образует 2D-конус)

Теперь я хочу проверить, находится ли другая точка в 2D внутри этого конуса или снаружи.

Как это можно достичь? спасибо!

+1

на каком языке? – erenon

+0

Не конус 3d? –

+1

Язык не должен иметь значения; Я считаю, что это алгоритм, который ищет OP. –

ответ

9

Рассчитать вектор от центра конуса до точки запроса. Нормализовать вектор длиной 1, взять центр вектора конуса и нормализовать его также до длины 1.
Теперь возьмите точечный продукт между векторами. Точечным продуктом между двумя нормализованными векторами является косинус угла между ними. Возьмите arccos (acos на большинстве языков) точечного продукта, и вы получите угол. сравните этот угол с углом конуса (половина угла в описании). если его нижняя, то точка в вопросе находится внутри конуса.

Это работает в 2D и 3D.

+0

спасибо, на самом деле это то, что я делал все время, но я просто не думал, что он закончен, потому что я не понял, где учитывается фактическое положение точки. теперь это имеет смысл. благодаря! – clamp

1

Рассчитать угол направления, используя arctg направления. Выделите источник из отмеченной точки. Вычислите его угол (снова через arctg нормализованного вектора) и проверьте, лежит ли он в пределах угловых границ.

1

Я бы сказал, что лучший способ - проецировать точку на двумерную поверхность, перпендикулярную направлению конусов. Затем вы вычисляете ортогональное расстояние между той же самой плоскостью и точкой. Наконец, вы знаете ширину конуса на этой высоте, чтобы вы могли видеть, находится ли точка вне этой ширины.

1

Пусть вектор от точки отсчета до указанной точки составляет угол A с нормалью, проходящей через центр. Если угол А меньше, чем полуугольник конуса, он лежит внутри другого снаружи.

Смежные вопросы