Unidades
Angle
Angle é uma classe selada com dois subtipos: Angle.Radians e Angle.Degrees. Todos os métodos que lidam com trigonometria no GeomEz aceitam um Angle, então você nunca precisa converter manualmente.
import units.Angle
val graus = Angle.Degrees(90.0)
val rad = Angle.Radians(Math.PI / 2)
Conversão
val graus = Angle.Degrees(180.0)
val rad: Angle.Radians = graus.toRadians() // Angle.Radians(π)
val rad2 = Angle.Radians(Math.PI)
val graus2: Angle.Degrees = rad2.toDegrees() // Angle.Degrees(180.0)
Aritmética
Todos os operadores aritméticos funcionam entre ângulos do mesmo subtipo ou de subtipos diferentes. Operações mistas convertem automaticamente o operando do lado direito para o tipo do lado esquerdo.
val a = Angle.Degrees(90.0)
val b = Angle.Degrees(45.0)
val soma = a + b // Angle.Degrees(135.0)
val dif = a - b // Angle.Degrees(45.0)
val metade = a / 2.0 // Angle.Degrees(45.0)
val dobro = a * 2.0 // Angle.Degrees(180.0)
val neg = -a // Angle.Degrees(-90.0)
Adicionando um escalar
val a = Angle.Degrees(45.0)
val b = a + 10.0 // Angle.Degrees(55.0)
Comparação
val a = Angle.Degrees(90.0)
val b = Angle.Radians(Math.PI / 4) // 45°
println(a > b) // true
println(a == b) // false
Uso no GeomEz
Em qualquer lugar onde um parâmetro de rotação ou angular é aceito, passe qualquer Angle:
// Rotacionar um ponto
val rotado = Point2D(1.0, 0.0).rotate(Angle.Degrees(90.0))
// Rotacionar uma direção 3D em torno de um eixo
val rotado3D = Direction3D.MAIN_X_DIRECTION.rotate(
axis = Direction3D.MAIN_Z_DIRECTION,
angle = Angle.Radians(Math.PI / 2)
)
// Definir um segmento suave de spline pelo seu ângulo de tangente
SmoothCubicBezierSplineControlPoints(
pointOnCurve = Point2D(0.0, 0.0),
angle = Angle.Degrees(30.0),
distanceControlPointAfter = 0.5
)