A Circle2d is defined by its center point and radius. This module includes
functionality for
Construct a circle from its radius and center point:
exampleCircle =
Circle2d.withRadius (Length.meters 3)
(Point2d.meters 1 2)If you pass a negative radius, the absolute value will be used.
Attempt to construct a circle that passes through the three given points. If
the three given points are collinear, returns Nothing.
Circle2d.throughPoints
Point2d.origin
(Point2d.meters 1 0)
(Point2d.meters 0 1)
--> Just <|
--> Circle2d.withRadius (Length.meters 0.7071)
--> (Point2d.meters 0.5 0.5)
Circle2d.throughPoints
Point2d.origin
(Point2d.meters 2 1)
(Point2d.meters 4 0)
--> Just <|
--> Circle2d.withRadius (Length.meters 2.5)
--> (Point2d.meters 2 -1.5)
Circle2d.throughPoints
Point2d.origin
(Point2d.meters 2 0)
(Point2d.meters 4 0)
--> Nothing
Circle2d.throughPoints
Point2d.origin
Point2d.origin
(Point2d.meters 1 0)
--> NothingConstruct a circle by rotating a point on the circle around a given center point. The center point is given first and the point on the circle is given second.
Circle2d.sweptAround Point2d.origin
(Point2d.meters 2 0)
--> Circle2d.withRadius (Length.meters 2)
--> Point2d.originThe above example could be rewritten as
Point2d.meters 2 0
|> Circle2d.sweptAround Point2d.originand if you wanted to create many concentric circles all centered on the origin but passing through several other different points, you could use something like
concentricCircles =
points
|> List.map
(Circle2d.sweptAround Point2d.origin)Get the center point of a circle.
Circle2d.centerPoint exampleCircle
--> Point2d.meters 1 2Get the radius of a circle.
Circle2d.radius exampleCircle
--> Length.meters 3Get the diameter of a circle.
Circle2d.diameter exampleCircle
--> Length.meters 6Get the area of a circle.
Circle2d.area exampleCircle
--> Area.squareMeters 28.2743Get the circumference of a circle.
Circle2d.circumference exampleCircle
--> Length.meters 18.8496Get the minimal bounding box containing a given circle.
Circle2d.boundingBox exampleCircle
--> BoundingBox2d.fromExtrema
--> { minX = Length.meters -2
--> , maxX = Length.meters 4
--> , minY = Length.meters -1
--> , maxY = Length.meters 5
--> }Convert a circle to a 360 degree arc.
Circle2d.toArc exampleCircle
--> Point2d.meters 4 2
--> |> Arc2d.sweptAround
--> (Point2d.meters 1 2)
--> (Angle.degrees 360)Check if a circle contains a given point.
Circle2d.contains Point2d.origin exampleCircle
--> True
exampleCircle
|> Circle2d.contains
(Point2d.meters 10 10)
--> FalseCheck if a circle intersects with a given bounding box. This function will return true if the circle intersects the edges of the bounding box or is fully contained within the bounding box.
boundingBox =
BoundingBox2d.fromExtrema
{ minX = Length.meters 2
, maxX = Length.meters 3
, minY = Length.meters 0
, maxY = Length.meters 2
}
circle =
Circle2d.withRadius (Length.meters 3)
Point2d.origin
Circle2d.intersectsBoundingBox boundingBox circle
--> TrueConvert a circle from one units type to another, by providing a conversion factor given as a rate of change of destination units with respect to source units.
Convert a circle from one units type to another, by providing an 'inverse' conversion factor given as a rate of change of source units with respect to destination units.
These transformations generally behave just like the ones in the Point2d
module.
Scale a circle about a given point by a given scale.
Rotate a circle around a given point by a given angle.
Translate a circle by a given displacement.
Translate a circle in a given direction by a given distance.
Mirror a circle across a given axis.
Take a circle defined in global coordinates, and return it expressed in local coordinates relative to a given reference frame.
Take a circle considered to be defined in local coordinates relative to a given reference frame, and return that circle expressed in global coordinates.