public RelevantLine[] GetRelevantObjects(RelevantLine line1, RelevantLine line2)
        {
            if (!Line2.Intersection(line1.Child, line2.Child, out var intersection))
            {
                return(null);
            }
            var dir1Norm = Vector2.Normalize(line1.Child.DirectionVector);
            var dir2Norm = Vector2.Normalize(line2.Child.DirectionVector);

            return(new[] {
                new RelevantLine(new Line2(intersection, dir1Norm + dir2Norm)),
                new RelevantLine(new Line2(intersection, dir1Norm - dir2Norm))
            });
        }
Пример #2
0
        public RelevantLine GetRelevantObjects(RelevantLine line1, RelevantLine line2)
        {
            // Any line can be the axis
            if (MySettings.AxisInputPredicate.Check(line1, this) &&
                MySettings.OtherInputPredicate.Check(line2, this))
            {
                return(new RelevantLine(Line2.FromPoints(Vector2.Mirror(line2.Child.PositionVector, line1.Child),
                                                         Vector2.Mirror(line2.Child.PositionVector + line2.Child.DirectionVector, line1.Child))));
            }

            if (MySettings.AxisInputPredicate.Check(line2, this) &&
                MySettings.OtherInputPredicate.Check(line1, this))
            {
                return(new RelevantLine(Line2.FromPoints(Vector2.Mirror(line1.Child.PositionVector, line2.Child),
                                                         Vector2.Mirror(line1.Child.PositionVector + line1.Child.DirectionVector, line2.Child))));
            }

            return(null);
        }
Пример #3
0
 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);
 }
Пример #4
0
 public RelevantPoint GetLineLineIntersection(RelevantLine line1, RelevantLine line2)
 {
     return(Line2.Intersection(line1.Child, line2.Child, out var intersection) ? new RelevantPoint(intersection) : null);
 }
Пример #5
0
 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)));
 }
Пример #6
0
 public RelevantPoint GetRelevantObjects(RelevantLine axis, RelevantPoint point)
 {
     return(!MySettings.AxisInputPredicate.Check(axis, this) || !MySettings.OtherInputPredicate.Check(point, this) ? null :
            new RelevantPoint(Vector2.Mirror(point.Child, axis.Child)));
 }
Пример #7
0
 public RelevantLine GetRelevantObjects(RelevantLine line, RelevantPoint point)
 {
     return(new RelevantLine(new Line2(point.Child, line.Child.DirectionVector)));
 }
 public RelevantLine GetRelevantObjects(RelevantPoint origin, RelevantLine line)
 {
     return(!MySettings.OriginInputPredicate.Check(origin, this) || !MySettings.OtherInputPredicate.Check(line, this) ? null :
            new RelevantLine(Line2.FromPoints(Matrix2.Mult(Matrix2.CreateRotation(MathHelper.DegreesToRadians(MySettings.Angle)), line.Child.PositionVector - origin.Child) * MySettings.Scalar + origin.Child,
                                              Matrix2.Mult(Matrix2.CreateRotation(MathHelper.DegreesToRadians(MySettings.Angle)), line.Child.PositionVector + line.Child.DirectionVector - origin.Child) * MySettings.Scalar + origin.Child)));
 }