org.opengis.geometry.coordinate

## Interface Arc

• All Superinterfaces:
ArcString, CurveSegment, GenericCurve
All Known Subinterfaces:
Circle

```@UML(identifier="GM_Arc",
specification=ISO_19107)
public interface Arc
extends ArcString```
Arc of the circle determined by 3 points, starting at the first, passing through the second and terminating at the third. If the 3 points are co-linear, then the arc shall be a 3-point line string, and will not be able to return values for center, radius, start angle and end angle.
NOTE: In the model, an `Arc` is a subclass of `ArcString`, being a trivial arc string consisting of only one arc. This may be counter-intuitive in the sense that subclasses are often thought of as more complex than their superclass (with additional methods and attributes). An `Arc` is simpler than a arc string in that it has less data, but it is more complex in that it can return geometric information such as "center", "start angle", and "end angle". This additional computational complexity forces the subclassing to be the way it is. In addition the "is type of" semantics works this way and not the other.
In its simplest representation, the three points in the control point sequence for an `Arc` shall consist of, in order, the initial point on the arc, some point on the arc neither at the start or end, and the end point of the `Arc`. If additional points are given, then all points must lie on the circle defined by any 3 non-colinear points in the control point array. All points shall lie on the same circle, and shall be given in the control point array in the order in which they occur on the arc.
NOTE: The use of the term "midPoint" for the center position of the control point sequence is not meant to require that the position be the geometric midpoint of the arc. This is the best choice for this position from a computational stability perspective, but it is not absolutely necessary for the mathematics to work.
Since:
GeoAPI 1.0
Author:
Martin Desruisseaux (IRD)
`GeometryFactory.createArc(Position,Position,Position)`, `GeometryFactory.createArc(Position,Position,double,double[])`
• ### Method Summary

All Methods
Modifier and Type Method and Description
`DirectPosition` `getCenter()`
Calculates the center of the circle of which this arc is a portion as a direct position.
`Bearing` `getEndAngle()`
Calculates the bearing of the line from the center of the circle of which this arc is a portion to the end point of the arc.
`double` `getRadius()`
Calculates the radius of the circle of which this arc is a portion.
`Bearing` `getStartAngle()`
Calculates the bearing of the line from the center of the circle of which this arc is a portion to the start point of the arc.
• ### Methods inherited from interface ArcString

`asArcs, getControlPoints, getInterpolation, getNumArc`
• ### Methods inherited from interface CurveSegment

`getBoundary, getCurve, getNumDerivativesAtEnd, getNumDerivativesAtStart, getNumDerivativesInterior, getSamplePoints, reverse`
• ### Methods inherited from interface GenericCurve

`asLineString, forConstructiveParam, forParam, getEndConstructiveParam, getEndParam, getEndPoint, getParamForPoint, getStartConstructiveParam, getStartParam, getStartPoint, getTangent, length, length`
• ### Method Detail

• #### getCenter

```@UML(identifier="center",
obligation=MANDATORY,
specification=ISO_19107)
DirectPosition getCenter()```
Calculates the center of the circle of which this arc is a portion as a direct position. The coordinate reference system of the returned direct position will be the same as that for this `Arc`. In some extreme cases, the direct position as calculated may lie outside the domain of validity of the coordinate reference system used by this `Arc` (especially if the underlying arc has a very large radius). Implementations may choose an appropriate course of action in such cases.
Returns:
The center of the circle of which this arc is a portion.

```@UML(identifier="radius",
obligation=MANDATORY,
specification=ISO_19107)
Calculates the radius of the circle of which this arc is a portion.
Returns:
The radius of the circle of which this arc is a portion.
• #### getStartAngle

```@UML(identifier="startAngle",
obligation=MANDATORY,
specification=ISO_19107)
Bearing getStartAngle()```
Calculates the bearing of the line from the center of the circle of which this arc is a portion to the start point of the arc. In the 2D case this will be a start angle. In the 3D case, the normal bearing angle implies that the arc is parallel to the reference circle. If this is not the case, then the bearing must include altitude information.
Returns:
The bearing from the center of the circle to the `start point` of this arc.
• #### getEndAngle

```@UML(identifier="endAngle",
obligation=MANDATORY,
specification=ISO_19107)
Bearing getEndAngle()```
Calculates the bearing of the line from the center of the circle of which this arc is a portion to the end point of the arc. In the 2D case this will be an end angle. In the 3D case, the normal bearing angle implies that the arc is parallel to the reference circle. If this is not the case, then the bearing must include altitude information.
Returns:
The bearing from the center of the circle to the `end point` of this arc.