Units
Angle
Angle is a sealed class with two subtypes: Angle.Radians and Angle.Degrees. All trigonometric-aware methods in GeomEz accept an Angle, so you never have to manually convert.
import units.Angle
val deg = Angle.Degrees(90.0)
val rad = Angle.Radians(Math.PI / 2)
Conversion
val deg = Angle.Degrees(180.0)
val rad: Angle.Radians = deg.toRadians() // Angle.Radians(π)
val rad2 = Angle.Radians(Math.PI)
val deg2: Angle.Degrees = rad2.toDegrees() // Angle.Degrees(180.0)
Arithmetic
All arithmetic operators work between angles of the same or different subtypes. Mixed operations auto-convert the right-hand operand to the left-hand type.
val a = Angle.Degrees(90.0)
val b = Angle.Degrees(45.0)
val sum = a + b // Angle.Degrees(135.0)
val diff = a - b // Angle.Degrees(45.0)
val half = a / 2.0 // Angle.Degrees(45.0)
val dbl = a * 2.0 // Angle.Degrees(180.0)
val neg = -a // Angle.Degrees(-90.0)
Adding a scalar
val a = Angle.Degrees(45.0)
val b = a + 10.0 // Angle.Degrees(55.0)
Comparison
val a = Angle.Degrees(90.0)
val b = Angle.Radians(Math.PI / 4) // 45°
println(a > b) // true
println(a == b) // false
Usage in GeomEz
Wherever a rotation or angular parameter is accepted, pass any Angle:
// Rotate a point
val rotated = Point2D(1.0, 0.0).rotate(Angle.Degrees(90.0))
// Rotate a 3D direction around an axis
val rotated3D = Direction3D.MAIN_X_DIRECTION.rotate(
axis = Direction3D.MAIN_Z_DIRECTION,
angle = Angle.Radians(Math.PI / 2)
)
// Define a smooth spline segment by its tangent angle
SmoothCubicBezierSplineControlPoints(
pointOnCurve = Point2D(0.0, 0.0),
angle = Angle.Degrees(30.0),
distanceControlPointAfter = 0.5
)