我查看了许多 3D 球体-球体相交问题,不幸的是,它们要么远超我的理解能力,要么不适合我正在寻找的东西。
这是在 Unity 游戏引擎中并使用 c#
我设法让这段代码工作:
public void calculatePoints_H(Vector3 c1p, Vector3 c2p, float c1r, float c2r, out Vector3 startLine, out Vector3 endLine)
{
//c1p = circle one position
//c1r = circle one radius
Vector3 P0 = c1p;
Vector3 P1 = c2p;
float d,a,h;
d = Vector3.Distance(P0,P1);
a = (c1r*c1r - c2r*c2r + d*d)/(2*d);
h = Mathf.Sqrt(c1r*c1r - a*a);
Vector3 P2 = (P1 - P0);
P2 = (P2 * (a/d));
P2 = (P2 + P0);
float x3,y3,x4,y4 = 0;
x3 = P2.x + h*(P1.y - P0.y)/d;
y3 = P2.y - h*(P1.x - P0.x)/d;
x4 = P2.x - h*(P1.y - P0.y)/d;
y4 = P2.y + h*(P1.x - P0.x)/d;;
//draw visual to screen (unity 3D engine)
Debug.DrawLine(new Vector3(x3,0,y3), new Vector3(x4,0,y4),Color.green);
//out parameters for a line renderer
startLine = new Vector3(x3,0,y3);
endLine = new Vector3(x4,0,y4);
}
目前,此代码允许我计算两个相交的球体的 x 轴和 z 轴上的两个点,然后画一条线。
我想要实现的是一个 xyz 交点,因此我还可以在方法中添加高度(y 向量 3 值),这样我就可以让一个球体从任何方向/高度与另一个球体相交
有人可以帮我理解这样做的方法吗,我的大脑有点炸了,我担心它是我缺少的一个简单的解决方案?