예제 #1
0
        /*
         * 矩形,圆形的相交测试。
         * 转到矩形的局部坐标系
         * 然后把相对位置移动到第一象限
         * 求出圆心到矩形的最近的点。
         */

        public static bool DetectSquareCircle(SquareCollider bodyA, CircleCollider bodyB)
        {
            Vector2 hA = 0.5f * bodyA.width;
            Vector2 hB = new Vector2(bodyB.radius, bodyB.radius);

            Vector2 posA = bodyA.position;
            Vector2 posB = bodyB.position;

            Mat22 RotA = new Mat22(bodyA.rotation);

            Mat22 RotAT = RotA.Transpose();

            Vector2 dp = posB - posA;                              // 距离向量
            Vector2 dA = RotAT * dp;                               // 距离向量,在A的局部坐标系里面表现

            Vector2 v = MathUtils.Abs(dA);                         // 转到第一象限
            Vector2 u = MathUtils.Max(v - hA, 0);                  // 求出最近的点(因为在第一象限,而且是在矩形的坐标系里面,所以可以这么写)

            return(u.sqrMagnitude <= bodyB.radius * bodyB.radius); // 计算距离
        }