예제 #1
0
 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();
 }
예제 #2
0
        /// <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);
        }