Ejemplo n.º 1
0
        public bool Intersects(Line other)
        {
            Vector2f lineSegmentStart = new Vector2f(other.GetX1(), other.GetY1());
            Vector2f lineSegmentEnd   = new Vector2f(other.GetX2(), other.GetY2());
            Vector2f circleCenter     = new Vector2f(GetCenterX(), GetCenterY());
            Vector2f closest;
            Vector2f segv       = lineSegmentEnd.Cpy().Sub(lineSegmentStart);
            Vector2f ptv        = circleCenter.Cpy().Sub(lineSegmentStart);
            float    segvLength = segv.Len();
            float    projvl     = ptv.Dot(segv) / segvLength;

            if (projvl < 0)
            {
                closest = lineSegmentStart;
            }
            else if (projvl > segvLength)
            {
                closest = lineSegmentEnd;
            }
            else
            {
                Vector2f projv = segv.Cpy().Scale(projvl / segvLength);
                closest = lineSegmentStart.Cpy().Add(projv);
            }
            bool intersects = circleCenter.Cpy().Sub(closest).LengthSquared() <= GetRadius()
                              * GetRadius();

            return(intersects);
        }
Ejemplo n.º 2
0
 public override float Length()
 {
     return(vec.Len());
 }