考虑以下内容:
所以,
X(x1,y1,z1)
是需要验证是否在锥体内的点。M(x2,y2,z2)
是锥体的顶点。(锥体的顶部点)N(x3,y3,z3)
是锥体底部中心点。
我发现如果点X在锥体上,则需要验证以下方程:
cos(alfa) * ||X-M|| * ||N|| = dot(X-M,N)
其中,dot是两个向量的数量积,alfa是这两个向量之间的夹角。
根据公式,我计算出:
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
是否在圆锥体内,我必须在公式中使用<=
而不是=
。这是正确的吗?
它的应用是:我开发了一个游戏,当物体出现在机枪的“视野”中时,机枪必须开始射击。这个视野将是一个圆锥体。圆锥体的顶点将位于机枪上,圆锥体的底部将在某个已知距离前面。任何进入该圆锥体的物体,机枪都会射击。