Рассмотрим:
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
внутри конуса, я должен поставить <=
вместо =
в формуле. Это правильно?
Использование этого таково: я разрабатываю игру, в которой пулемет должен начать стрелять, когда объект находится в его поле зрения. Этот вид будет конусом. Вершина конуса будет в пулемете, основание конуса будет на известном расстоянии впереди. Любой объект, вошедший в этот конус, будет расстрелян пулеметом.