Убедитесь, что точка находится внутри конуса в трехмерном пространстве
Рассматривать:
X(x1,y1,z1)
the point I need to verify if it is inside a cone.
M(x2,y2,z2)
the vertex of the cone. (the top point of the cone)
N(x3,y3,z3)
the point in the middle of the cone's base.
Я обнаружил, что если точка X находится на конусе, необходимо проверить это уравнение:
cos(alfa) * ||X-M|| * ||N|| = dot(X-M,N)
Где точка - скалярное произведение двух векторов, а альфа - угол между этими двумя векторами.
На основании формулы я рассчитал, что:
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
находится внутри конуса, я должен поставить<=
вместо=
в формуле. Это правильно?
Я использую это: я разрабатываю игру, в которой пулемет должен начать стрелять, когда объект находится в «виде». Этот вид будет конусом. Вершина конуса будет находиться в пулемете, а основание конуса будет на некотором известном расстоянии впереди. Любой предмет, попадающий в этот конус, пулемет пристрелит.