Ejemplo n.º 1
0
        private BezierSubdivision TangentIntersectionApproximation(Neuron neuron, out double length)
        {
            var firstPoint = neuron.Nucleus.Pos;
            var lastPoint  = neuron.Terminal.Nucleus.Pos;
            var dir        = Math.Sign(neuron.Terminal.Nucleus.SegmentIndex - neuron.Nucleus.SegmentIndex);
            var line1      = Line2.FromPoints(neuron.Nucleus.PathPoint, _path[neuron.Nucleus.SegmentIndex + dir]);
            var line2      = Line2.FromPoints(neuron.Terminal.Nucleus.PathPoint, _path[neuron.Terminal.Nucleus.SegmentIndex - dir]);

            BezierSubdivision bs;

            if (Line2.Intersection(line1, line2, out var intersection))
            {
                bs = new BezierSubdivision(new List <Vector2> {
                    firstPoint, intersection, lastPoint
                });
                length = bs.SubdividedApproximationLength();
            }
            else
            {
                bs = new BezierSubdivision(new List <Vector2> {
                    firstPoint, lastPoint
                });
                length = Vector2.Distance(firstPoint, lastPoint);
            }

            return(bs);
        }
Ejemplo n.º 2
0
 public static Line2 ToLine2(this LineShape line, double dx = 0.0, double dy = 0.0)
 {
     return(Line2.FromPoints(
                line.StartPoint.X, line.StartPoint.Y,
                line.Point.X, line.Point.Y,
                dx, dy));
 }
Ejemplo n.º 3
0
        public void FromPointsTest2()
        {
            // y = 2x + 1 => -2x + 1y = 1 -> -2x + 1y - 1 = 0
            var line = Line2.FromPoints(new Vector2(0, 1), new Vector2(1, 3));

            Assert.Equal(new Line2(-2, 1, -1), line);
        }
Ejemplo n.º 4
0
        public RelevantLine GetRelevantObjects(RelevantHitObject relevantHitObject)
        {
            var ho = relevantHitObject.HitObject;

            return(ho.IsSlider && ho.SliderType == PathType.Linear && ho.CurvePoints.Count >= 1
                ? new RelevantLine(Line2.FromPoints(ho.Pos, ho.CurvePoints.Last()))
                : null);
        }
        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))
            });
        }
Ejemplo n.º 6
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);
        }
Ejemplo n.º 7
0
 public RelevantLine GetRelevantObjects(RelevantPoint point1, RelevantPoint point2)
 {
     return(new RelevantLine(Line2.FromPoints(point1.Child, point2.Child)));
 }
Ejemplo n.º 8
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)));
 }
Ejemplo n.º 9
0
        public void FromPointsTest1()
        {
            var line = Line2.FromPoints(new Vector2(1, 1), new Vector2(2, 2)); // y = x

            Assert.Equal(new Line2(-1, 1, 0), line);
        }