예제 #1
0
파일: LineF.cs 프로젝트: Racura/AtlasEngine
        public static bool Overlap(LineF line, CircleF p)
        {
            var apX = p.Point.X - line.Start.X;
            var apY = p.Point.Y - line.Start.Y;
            var abX = line.End.X - line.Start.X;
            var abY = line.End.Y - line.Start.Y;

            var abLength = (abX * abX + abY * abY);

            var dot = apX * abX + apY * abY;

            var t = dot / abLength;

            if (t <= 0)
                return ((apX * apX) + (apY * apY) < p.Radius * p.Radius);
            else if (t >= 1)
                return ((line.End.X - p.Point.X) * (line.End.X - p.Point.X) + (line.End.Y - p.Point.Y) * (line.End.Y - p.Point.Y) < p.Radius * p.Radius);
            else
                return ((apX - abX * t) * (apX - abX * t) + (apY - abY * t) * (apY - abY * t) < p.Radius * p.Radius);
        }
예제 #2
0
파일: LineF.cs 프로젝트: Racura/AtlasEngine
 public bool Overlap(CircleF circle)
 {
     return Overlap(this, circle);
 }
예제 #3
0
 public bool Overlap(CircleF circle)
 {
     return(Overlap(this, circle.Point, circle.Radius));
 }
예제 #4
0
 public bool Overlap(CircleF circle)
 {
     return Overlap(this, circle.Point, circle.Radius);
 }
예제 #5
0
 public static bool Overlap(CircleF circle, Vector2 p, float raduis)
 {
     return Vector2.DistanceSquared(circle.Point, p) < (circle.Radius + raduis) * (circle.Radius + raduis);
 }
예제 #6
0
파일: LineF.cs 프로젝트: Racura/AtlasEngine
 public bool Overlap(CircleF circle)
 {
     return(Overlap(this, circle));
 }
예제 #7
0
 public static bool Overlap(CircleF circle, Vector2 p, float raduis)
 {
     return(Vector2.DistanceSquared(circle.Point, p) < (circle.Radius + raduis) * (circle.Radius + raduis));
 }