Проверить, находится ли точка внутри конуса в трехмерном пространстве

Рассмотрим:

  • X(x1,y1,z1)точку, которую мне нужно проверить, находится ли она внутри конуса.
  • M(x2,y2,z2)вершина конуса. (верхняя точка конуса)
  • N(x3,y3,z3)точка в середине основания конуса.

Я выяснил, что если точка X находится на конусе, ей нужно проверить следующее уравнение:

cos(alfa) * ||X-M|| * ||N|| = dot(X-M,N)

Где точка — скалярное произведение 2 векторов, а альфа — угол между этими 2 векторами.

Основываясь на формуле, я вычислил, что:

X-M = (x1-x2,y1-y2,z1-z2)

Итак,

cos(alfa)
  * Math.sqrt((x1-x2)^2+(y1-y2)^2+(z1-z2)^2)
  * Math.sqrt(x3^2 + y3^2+z3^2)
= x3(x1-x2) + y3(y1-y2) + z3(z1-z2)

К сожалению, приведенные выше вычисления, кажется, дают мне неправильные результаты. Что я делаю неправильно?

Также я подозреваю, что для проверки, находится ли Xвнутри конуса, я должен поставить <= вместо = в формуле. Это правильно?

Использование этого таково: я разрабатываю игру, в которой пулемет должен начать стрелять, когда объект находится в его поле зрения. Этот вид будет конусом. Вершина конуса будет в пулемете, основание конуса будет на известном расстоянии впереди. Любой объект, вошедший в этот конус, будет расстрелян пулеметом.

7
задан wattostudios 27 May 2012 в 05:15
поделиться