Як я можу перевірити, чи лежить точка між двома паралельними прямими?


10

У грі, яку я проектую, є вибух, який стріляє з точки початку в бік миші. Ширина цього вибуху завжди буде однаковою.

У нижній частині екрана (що зараз є) рухаються квадрати, щодо яких слід здійснювати вибух, яким керує гравець.

В даний час я намагаюся розробити спосіб виявити, чи кути цих квадратів знаходяться в межах двох обмежувальних ліній вибуху. Я вважав, що найкращим способом зробити це буде обертання кутів квадрата навколо точки початку, як якщо б вибух був повністю горизонтальним і бачити, чи значення Y кутів менше або дорівнює ширині вибуху, яка б означають, що вони лежать в районі, де відбувається, але я не можу це зробити


Це мені було корисно: stackoverflow.com/a/3461533/1599699
Андрій

Відповіді:


11

Точка знаходиться між двома паралельними прямими, якщо це одна сторона однієї прямої та інша сторона другої лінії (надаючи лінії, що вказують у тому ж напрямку).

Ви можете скористатися верхньою відповіддю на це запитання у stackoverflow, щоб визначити, на якій стороні рядка (визначеному на ньому двома пунктами) лежить точка.


Альтернативним методом було б обчислити відстань від точки до середньої лінії та порівняти її з половиною товщини вашого вибуху.


2

Так я це роблю (з додатковою перевіркою, чи надані площини насправді паралельні. Об'єкти Плана містять площинне рівняння в такому вигляді: Ax + By + Cz + D = 0, яке ви можете легко генерувати з 3 заданих балів, або з точки, і з нормальної (див. цю сторінку, якщо ви не впевнені в математиці: http://paulbourke.net/geometry/pointlineplane/ )

bool isPointBetweenParallelPlanes(const vec3 point, const Plane a, const Plane b){
// test if planes are parallel
vec3 cross = a.normal CROSS b.normal;
assert((a.normal CROSS b.normal) == vec3(0,0,0) && "These planes should be parallel.");
return ((a.normal DOT point) + a.D) * ((b.normal DOT point) + b.D) < 0.0;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.