Measure e LandmarkRef
Measure
Seção intitulada “Measure”public enum Measure: Sendable, Hashable, CodableAlgo que se lê de uma pose, em graus.
| Caso | Resultado |
|---|---|
.angle(a:vertex:b:) |
Ângulo interno em vertex, 0…180. |
.flexion(a:vertex:b:) |
180 − angle: 0 = reto, cresce ao dobrar. |
.fromVertical(from:to:) |
Segmento em relação à vertical: 0 para baixo, 90 horizontal, 180 para cima. |
.tilt(a:b:) |
Linha em relação à horizontal: 0 nivelada, 90 vertical. |
func value(in pose: Pose, side: BodySide) -> Double?func joints(for side: BodySide) -> [Joint]value é nil se faltar alguma articulação ou se dois pontos coincidirem.
let flexion = Measure.flexion(a: "hip", vertex: "knee", b: "ankle")flexion.value(in: pose, side: .left) // p. ex. 87.4flexion.joints(for: .left) // [.leftHip, .leftKnee, .leftAnkle]LandmarkRef
Seção intitulada “LandmarkRef”public struct LandmarkRef: Sendable, Hashable, Codable, ExpressibleByStringLiteralUm ponto do corpo relativo ao lado exercitado, para que um exercício sirva para os dois lados.
| Texto | Significado com side = .left |
|---|---|
"elbow" |
.leftElbow |
"opposite.shoulder" |
.rightShoulder |
"neck" |
.neck (linha média: não muda) |
Pontos: nose, neck, root, eye, ear, shoulder, elbow, wrist, hip, knee, ankle.
LandmarkRef(.shoulder, opposite: true)LandmarkRef(string: "opposite.hip") // nil se não for reconhecidoref.joint(for: .right)ref.stringValue // "opposite.hip"Em JSON é uma String. Um literal desconhecido em Swift ("elbw") interrompe a execução com preconditionFailure; em JSON produz um DecodingError.