Curves¶
The curves package contains basic 2D primitives:
LineParametricLineRaySegmentCircleArcContour
These types support distance, projection, and intersection-style workflows.
Project returns the projected point and distance. Curves with a length-based parameterization also expose
ProjectWithParameter, which additionally returns the curve coordinate.
Angles are expressed in radians by default. Non-radian members use an explicit suffix, such as Deg, and document their unit.
Segment Projection¶
using Akeldov.Math.Spatial2D;
using Akeldov.Math.Spatial2D.Curves;
var segment = new Segment(
new VectorXY(0f, 0f),
new VectorXY(10f, 0f));
var projection = segment.ProjectWithParameter(new VectorXY(4f, 3f));
VectorXY point = projection.ProjectedPoint;
float curveCoordinate = projection.CurveCoordinate;
float distance = projection.Distance;
Lines and Rays¶
var line = new Line(
new VectorXY(0f, 0f),
new VectorXY(10f, 0f));
var parametricLine = new ParametricLine(
line,
referencePoint: new VectorXY(2f, 0f));
var ray = new Ray(VectorXY.Zero, angle: 0f);
var lineProjection = line.Project(new VectorXY(4f, 3f));
var parametricLineProjection = parametricLine.ProjectWithParameter(new VectorXY(4f, 3f));
var rayProjection = ray.ProjectWithParameter(new VectorXY(4f, 3f));
Circles and Arcs¶
var circle = new Circle(VectorXY.Zero, radius: 5f);
var arc = new Arc(VectorXY.Zero, radius: 5f, startAngle: 0f, endAngle: MathF.PI);
float circleDistance = circle.Distance(new VectorXY(3f, 0f));
var arcProjection = arc.ProjectWithParameter(new VectorXY(0f, 8f));
bool isWithinAngularRegion = arc.IsWithinAngularRegion(new VectorXY(1f, 1f));
Contours¶
var contour = new Contour(new ICurve[]
{
new Circle(VectorXY.Zero, radius: 5f)
});
bool isInside = contour.Contains(new VectorXY(3f, 0f));
Helpers¶
Curve extension methods include:
ShortenandExtendfor segments.PerpendicularAtandIsSameSidefor lines.CreateFilletArcandCreateCornerTangentCirclefor corner construction.