A circle is defined by a center and a radius (given as the squared radius due to the inexactness of square roots). In 3 dimensions a circle is a disc and thus have an orientation given by an orthogonal direction. If the radius is 0 the circle is considered degenerate.

## Arguments

- ...
Various input. See the Constructor section.

- default_dim
The dimensionality when constructing an empty vector

- x
A circle vector or an object to convert to it

## Constructors

**2 dimensional circles**

Providing one point and one numeric vector will construct circles centered at the point with the

**squared**radius given by the numeric.Providing two points will construct circles centered between the two points with a radius of half the distance between the two points.

Providing three point vectors will construct the unique circle that pass through the three points.

**3 dimensional circles**

Providing three point vectors will construct the unique circle that pass through the three points.

Providing a point, a numeric, and a plane will construct a circle centered on the point with the squared radius given by the numeric and the orientation given by the plane. The point must lie on the plane

Providing a point, a numeric, and a vector will construct a circle centered on the point with the squared radius given by the numeric and the orientation orthogonal to the vector

Providing a point, a numeric, and a direction will construct a circle centered on the point with the squared radius given by the numeric and the orientation orthogonal to the direction

Providing two spheres will construct a circle given by the intersection of the two spheres. The spheres must intersect

Providing a sphere and a plane will construct a circle given by the intersection of the sphere and the plane. The sphere and plane must intersect.

## Examples

```
## 2 Dimensions
point1 <- point(runif(5), runif(5))
point2 <- point(runif(5), runif(5))
point3 <- point(runif(5), runif(5))
number <- exact_numeric(1:5)
# Construction with center and radius
circ <- circle(point1, number)
circ
#> <2D circles [5]>
#> [1] <x:0.857, y:0.547, r2:1> <x:0.402, y:0.0434, r2:2>
#> [3] <x:0.653, y:0.376, r2:3> <x:0.0793, y:0.601, r2:4>
#> [5] <x:0.123, y:0.624, r2:5>
plot(circ)
# integers and numerics are converted automatically
circle(point1, 1:5)
#> <2D circles [5]>
#> [1] <x:0.857, y:0.547, r2:1> <x:0.402, y:0.0434, r2:2>
#> [3] <x:0.653, y:0.376, r2:3> <x:0.0793, y:0.601, r2:4>
#> [5] <x:0.123, y:0.624, r2:5>
# You are free to name the input for readability
circle(center = point1, radius = number)
#> <2D circles [5]>
#> [1] <x:0.857, y:0.547, r2:1> <x:0.402, y:0.0434, r2:2>
#> [3] <x:0.653, y:0.376, r2:3> <x:0.0793, y:0.601, r2:4>
#> [5] <x:0.123, y:0.624, r2:5>
# Construction with 2 points
circle(point1, point2)
#> <2D circles [5]>
#> [1] <x:0.918, y:0.763, r2:0.0503> <x:0.576, y:0.184, r2:0.0502>
#> [3] <x:0.53, y:0.642, r2:0.0856> <x:0.502, y:0.623, r2:0.18>
#> [5] <x:0.224, y:0.529, r2:0.0193>
# Construction with 3 points
circle(point1, point2, point3)
#> <2D circles [5]>
#> [1] <x:0.911, y:0.765, r2:0.0503> <x:0.968, y:-0.301, r2:0.44>
#> [3] <x:0.416, y:0.589, r2:0.102> <x:0.526, y:0.186, r2:0.371>
#> [5] <x:0.395, y:0.711, r2:0.0818>
plot(circle(point1[1], point1[2], point1[3]))
euclid_plot(point1[1:3], col = "firebrick", pch = 16, cex = 3)
## 3 Dimensions
point1 <- point(runif(5), runif(5), runif(5))
point2 <- point(runif(5), runif(5), runif(5))
point3 <- point(runif(5), runif(5), runif(5))
circ <- circle(point1, point2, point3)
circle(point1, number, as_vec(point2))
#> <3D circles [5]>
#> [1] <x:0.366, y:0.483, z:0.313, r2:1, dx:0.391, dy:0.441, dz:0.0111>
#> [2] <x:0.0281, y:0.116, z:0.169, r2:2, dx:0.258, dy:0.222, dz:0.0182>
#> [3] <x:0.197, y:0.0474, z:0.804, r2:3, dx:0.804, dy:0.0951, dz:0.25>
#> [4] <x:0.0307, y:0.98, z:0.942, r2:4, dx:0.955, dy:0.916, dz:0.162>
#> [5] <x:0.267, y:0.554, z:0.813, r2:5, dx:0.478, dy:0.164, dz:0.124>
# Conversion
as_plane(circ)
#> <3D euclid_planes [5]>
#> [1] <a:0.0152, b:0.0849, c:-0.0104, d:-0.0433>
#> [2] <a:0.0757, b:-0.268, c:-0.0732, d:0.0413>
#> [3] <a:0.414, b:-0.0529, c:0.449, d:-0.44>
#> [4] <a:-0.0205, b:-0.073, c:-0.0184, d:0.0895>
#> [5] <a:-0.0147, b:0.0797, c:-0.0496, d:0.000142>
as_sphere(circ)
#> <3D euclid_spheres [5]>
#> [1] <x:0.227, y:0.487, z:0.146, r2:0.0472>
#> [2] <x:0.426, y:0.137, z:0.503, r2:0.27>
#> [3] <x:0.505, y:0.379, z:0.559, r2:0.265>
#> [4] <x:0.433, y:0.983, z:0.479, r2:0.377>
#> [5] <x:0.971, y:0.525, z:0.559, r2:0.562>
```