public RelevantLine[] GetRelevantObjects(RelevantPoint point, RelevantCircle circle) { var c = circle.Child.Centre; var d = Vector2.Distance(point.Child, c); var r = circle.Child.Radius; var b = r / (d * Math.Sqrt(1 - r * r / (d * d))); var v = (point.Child - c).PerpendicularLeft * b; return(new[] { new RelevantLine(Line2.FromPoints(point.Child, c + v)), new RelevantLine(Line2.FromPoints(point.Child, c - v)) }); }
public IEnumerable <RelevantPoint> GetCircleCircleIntersection(RelevantCircle circle1, RelevantCircle circle2) { return(Circle.Intersection(circle1.Child, circle2.Child, out var intersections) ? intersections.Select(o => new RelevantPoint(o)) : null); }
public IEnumerable <RelevantPoint> GetLineCircleIntersection(RelevantLine line, RelevantCircle circle) { return(Circle.Intersection(circle.Child, line.Child, out var intersections) ? intersections.Select(o => new RelevantPoint(o)) : null); }
public RelevantCircle GetRelevantObjects(RelevantLine axis, RelevantCircle circle) { return(!MySettings.AxisInputPredicate.Check(axis, this) || !MySettings.OtherInputPredicate.Check(circle, this) ? null : new RelevantCircle(new Circle(Vector2.Mirror(circle.Child.Centre, axis.Child), circle.Child.Radius))); }
public RelevantCircle GetRelevantObjects(RelevantPoint origin, RelevantCircle circle) { return(!MySettings.OriginInputPredicate.Check(origin, this) || !MySettings.OtherInputPredicate.Check(circle, this) ? null : new RelevantCircle(new Circle(Matrix2.Mult(Matrix2.CreateRotation(MathHelper.DegreesToRadians(MySettings.Angle)), circle.Child.Centre - origin.Child) * MySettings.Scalar + origin.Child, circle.Child.Radius * MySettings.Scalar))); }