秋声赋
本帖最后由
>>
完整版
本帖最后由 秋声赋 于 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]