public RelevantPoint GetRelevantObjects(RelevantPoint point1, RelevantPoint point2, RelevantPoint point3, RelevantPoint point4)
        {
            // Get the vectors between the points
            var a = point2.Child - point1.Child;
            var b = point3.Child - point2.Child;
            var c = point4.Child - point3.Child;

            // Return null if any length is zero
            if (Math.Abs(a.X) < double.Epsilon && Math.Abs(a.Y) < double.Epsilon)
            {
                return(null);
            }
            if (Math.Abs(b.X) < double.Epsilon && Math.Abs(b.Y) < double.Epsilon)
            {
                return(null);
            }
            if (Math.Abs(c.X) < double.Epsilon && Math.Abs(c.Y) < double.Epsilon)
            {
                return(null);
            }

            // Calculate the next point
            var     d1       = Vector2.ComplexQuotient(b, a);
            var     d2       = Vector2.ComplexQuotient(c, b);
            var     dd       = Vector2.ComplexQuotient(d2, d1);
            Vector2 newPoint = Vector2.ComplexProduct(c, Vector2.ComplexProduct(d2, dd)) + point4.Child;

            return(new RelevantPoint(newPoint));
        }
예제 #2
0
 public RelevantPoint[] GetRelevantObjects(RelevantPoint point1, RelevantPoint point2) {
     var diff = point2.Child - point1.Child;
     var rotated = Vector2.Rotate(diff, Math.PI * 2 / 3);
     return new[] {
         new RelevantPoint(point1.Child - rotated),
         new RelevantPoint(point2.Child + rotated)
     };
 }
예제 #3
0
        public RelevantCircle[] GetRelevantObjects(RelevantPoint point1, RelevantPoint point2)
        {
            var radius = (point1.Child - point2.Child).Length;

            return(new[] {
                new RelevantCircle(new Circle(point1.Child, radius)),
                new RelevantCircle(new Circle(point2.Child, radius))
            });
        }
예제 #4
0
        public RelevantPoint GetRelevantObjects(RelevantPoint point1, RelevantPoint point2)
        {
            // Get the vectors between the points
            var a = point2.Child - point1.Child;

            // Return null if length of a is zero
            if (Math.Abs(a.X) < double.Epsilon && Math.Abs(a.Y) < double.Epsilon)
            {
                return(null);
            }

            return(new RelevantPoint(point2.Child + a));
        }
        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))
            });
        }
예제 #6
0
        public RelevantPoint GetRelevantObjects(RelevantPoint point1, RelevantPoint point2, RelevantPoint point3)
        {
            // Get the vectors between the points
            var a = point2.Child - point1.Child;
            var b = point3.Child - point2.Child;

            // Return null if length of a is zero
            if (Math.Abs(a.X) < double.Epsilon && Math.Abs(a.Y) < double.Epsilon)
            {
                return(null);
            }

            // Calculate the next point
            Vector2 newPoint = Vector2.ComplexProduct(b, Vector2.ComplexQuotient(b, a)) + point3.Child;

            return(new RelevantPoint(newPoint));
        }
        public RelevantPoint GetRelevantObjects(RelevantPoint point1, RelevantPoint point2)
        {
            // Any point can be the origin
            if (MySettings.OriginInputPredicate.Check(point1, this) &&
                MySettings.OtherInputPredicate.Check(point2, this))
            {
                return(new RelevantPoint(Matrix2.Mult(Matrix2.CreateRotation(MathHelper.DegreesToRadians(MySettings.Angle)), point2.Child - point1.Child) * MySettings.Scalar + point1.Child));
            }

            if (MySettings.OriginInputPredicate.Check(point2, this) &&
                MySettings.OtherInputPredicate.Check(point1, this))
            {
                return(new RelevantPoint(Matrix2.Mult(Matrix2.CreateRotation(MathHelper.DegreesToRadians(MySettings.Angle)), point1.Child - point2.Child) * MySettings.Scalar + point2.Child));
            }

            return(null);
        }
예제 #8
0
        public RelevantPoint[] GetRelevantObjects(RelevantHitObject relevantHitObject)
        {
            var ho = relevantHitObject.HitObject;

            if (!ho.IsSlider)
            {
                return(null);
            }

            var numPoints  = (int)(ho.PixelLength * ((SliderPathGeneratorSettings)Settings).PointDensity);
            var points     = new RelevantPoint[numPoints];
            var sliderPath = ho.GetSliderPath();

            for (int i = 0; i < numPoints; i++)
            {
                points[i] = new RelevantPoint(sliderPath.PositionAt((double)i / (numPoints - 1)));
            }

            return(points);
        }
예제 #9
0
 public RelevantPoint GetRelevantObjects(RelevantPoint point1, RelevantPoint point2, RelevantPoint point3)
 {
     return(new RelevantPoint((point1.Child + point2.Child + point3.Child) / 3));
 }
예제 #10
0
 public RelevantLine GetRelevantObjects(RelevantPoint point1, RelevantPoint point2)
 {
     return(new RelevantLine(Line2.FromPoints(point1.Child, point2.Child)));
 }
예제 #11
0
 public RelevantLine GetRelevantObjects(RelevantPoint point1, RelevantPoint point2)
 {
     return(new RelevantLine(new Line2((point1.Child + point2.Child) / 2, (point2.Child - point1.Child).PerpendicularLeft)));
 }
예제 #12
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)));
 }
예제 #13
0
 public RelevantLine GetRelevantObjects(RelevantLine line, RelevantPoint point)
 {
     return(new RelevantLine(new Line2(point.Child, line.Child.DirectionVector)));
 }
 public RelevantCircle GetRelevantObjects(RelevantPoint point)
 {
     return(new RelevantCircle(new Circle(point.Child, MySettings.Radius)));
 }
예제 #15
0
 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)));
 }
예제 #16
0
 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)));
 }