秋声赋
本帖最后由

本帖最后由 秋声赋 于 2012-6-22 00:38 编辑

没仔细检查

先放在这

就说思路 代码也没仔细看

先求相对速度和距离

因为没时间,所以规范化向量

以相对速度做一个坐标轴(原点在一个球的球心)

这时 2个球在该平面(相对速度向量过新坐标系原点的正交补)的投影就是2个圆了

然后就是求这两个球心在这个平面上的距离

想想下很容易看出 相对速度,相对距离,投影平面圆心的距离是一个三角形

求出投影平面的圆心距离

然后就是2D的判断圆是否相交

[mw_shl_code=csharp,true]

bool IsPeng=false;

Vector3D L1 = new Vector3D(1, 1, 1);

Vector3D L2 = new Vector3D(1, 1, 1);

double R1 = 1;

double R2 = 1;

Vector3D V1 = new Vector3D(1, 1, 1);

Vector3D V2 = new Vector3D(1, 1, 1);

Vector3D RV = V2 - V1;

Vector3D RX = L2 - L1;

RV.Normalize();

RX.Normalize();

if ((RX - RV).Length > (RX + RV).Length) return;

double RC = Math.Sqrt(RX.LengthSquared - RV.LengthSquared);

if (RC > R1 + R2) IsPeng = false;

else IsPeng = true;

[/mw_shl_code]