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

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

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

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

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


person clamp    schedule 22.07.2009    source источник
comment
Язык не должен иметь значения; Я считаю, что это алгоритм, который ищет ОП.   -  person Paul Sonier    schedule 22.07.2009
comment
И да, это хорошая идея, Даниэль, а что с 2D?   -  person Paul Sonier    schedule 22.07.2009
comment
да, язык не имеет значения, это алгоритм, который я ищу. это было бы даже хорошо, если бы вы описали это словами. извините, если конус трехмерный, я не уверен, какое английское слово использовать вместо этого.   -  person clamp    schedule 22.07.2009
comment
Конус прекрасно подходит и для 2D. Однако вы также можете использовать сектор для 2D.   -  person EFraim    schedule 22.07.2009


Ответы (4)


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

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

person shoosh    schedule 22.07.2009
comment
спасибо, на самом деле это то, что я делал все время, но я просто не думал, что это закончено, потому что я не понял, где фактическое положение точки принимается во внимание. теперь это имеет смысл. Спасибо! - person clamp; 22.07.2009
comment
Блестящее решение. Обратите внимание, что вы можете предварительно вычислить косинус половины конуса энджи, а затем просто использовать сравнение если меньше чем между результатом скалярного произведения и этим значением косинуса, нет необходимости в арккосинусе - до тех пор, пока результат скалярного произведения положительный конечно, чтобы не пропустить точку за конусом. Это полезно при проверке нескольких точек на одном и том же конусе. - person R. Navega; 30.01.2021

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

person EFraim    schedule 22.07.2009

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

person David Menard    schedule 22.07.2009

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

person lune    schedule 22.07.2009