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); }
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)); }
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); }
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)) }); }
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); }
public RelevantLine GetRelevantObjects(RelevantPoint point1, RelevantPoint point2) { return(new RelevantLine(Line2.FromPoints(point1.Child, point2.Child))); }
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))); }
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); }