Überprüfen Sie, ob sich der Punkt innerhalb eines Kegels im 3D-Raum befindet

Erwägen:

X(x1,y1,z1) Den Punkt muss ich überprüfen, ob er sich in einem Kegel befindet.M(x2,y2,z2) der Scheitelpunkt des Kegels. (der oberste Punkt des Kegels)N(x3,y3,z3) der Punkt in der Mitte des Kegelbodens.

Ich fand heraus, dass, wenn sich ein Punkt X auf dem Kegel befindet, diese Gleichung überprüft werden muss:

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

Dabei ist Punkt das Skalarprodukt von 2 Vektoren und Alpha der Winkel zwischen diesen 2 Vektoren.

Basierend auf der Formel habe ich berechnet, dass:

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

So,

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)

Leider scheinen mir die obigen Berechnungen falsche Ergebnisse zu liefern. Was mache ich falsch?

Auch ich vermute das um zu prüfen obX ist in dem Kegel, muss ich setzen<= anstatt= in der Formel. Ist das richtig?

Die Verwendung davon ist: Ich entwickle ein Spiel, in dem ein Maschinengewehr zu schießen beginnen muss, wenn sich ein Objekt in seiner "Ansicht" befindet. Diese Ansicht wird ein Kegel sein. Der Scheitelpunkt des Kegels befindet sich im Maschinengewehr, die Basis des Kegels befindet sich in einem bekannten Abstand vor ihm. Wenn ein Gegenstand in diesen Kegel eindringt, schießt das Maschinengewehr darauf.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage