public void UpdatePosition(PFPoint point) { nearQuadNodes.Clear(); parent.FindNearQuadNodes(this, nearQuadNodes); if (nearQuadNodes.Count > 0) { PFPoint movePoint = new PFPoint(0, 0); foreach (var quadNode in nearQuadNodes) { if (quadNode == this) { continue; } long distanceSquare = point.SquareDistance(quadNode.point); long dr = radius + quadNode.radius; if (distanceSquare < dr * dr) { int distance = (int)Math.Sqrt(distanceSquare); PFPoint tempMovePoint = point - quadNode.point; movePoint = movePoint + tempMovePoint.normalized(radius + quadNode.radius - distance); } } point += movePoint; } this.point = point; Update(); }
/// <summary> /// 圆和圆相交 /// </summary> /// <param name="point1">圆心1</param> /// <param name="radius1">半径1</param> /// <param name="point2">圆心2</param> /// <param name="radius2">半径2</param> /// <returns></returns> public static bool CircleCircleIntersect(PFPoint point1, int radius1, PFPoint point2, int radius2) { long distanceSquare = point1.SquareDistance(point2); long dr = (long)(radius1 + radius2); return(distanceSquare < dr * dr); }