Measure y LandmarkRef
Measure
Sección titulada «Measure»public enum Measure: Sendable, Hashable, CodableAlgo que se lee de una pose, en grados.
| Caso | Resultado |
|---|---|
.angle(a:vertex:b:) |
Ángulo interno en vertex, 0…180. |
.flexion(a:vertex:b:) |
180 − angle: 0 = recto, crece al doblar. |
.fromVertical(from:to:) |
Segmento contra la vertical: 0 abajo, 90 horizontal, 180 arriba. |
.tilt(a:b:) |
Línea contra la horizontal: 0 nivelada, 90 vertical. |
func value(in pose: Pose, side: BodySide) -> Double?func joints(for side: BodySide) -> [Joint]value es nil si falta alguna articulación o si dos puntos coinciden.
let flexion = Measure.flexion(a: "hip", vertex: "knee", b: "ankle")flexion.value(in: pose, side: .left) // p. ej. 87.4flexion.joints(for: .left) // [.leftHip, .leftKnee, .leftAnkle]LandmarkRef
Sección titulada «LandmarkRef»public struct LandmarkRef: Sendable, Hashable, Codable, ExpressibleByStringLiteralUn punto del cuerpo relativo al lado que se ejercita, para que un ejercicio sirva para ambos lados.
| Texto | Significado con side = .left |
|---|---|
"elbow" |
.leftElbow |
"opposite.shoulder" |
.rightShoulder |
"neck" |
.neck (línea media: no cambia) |
Puntos: nose, neck, root, eye, ear, shoulder, elbow, wrist, hip, knee, ankle.
LandmarkRef(.shoulder, opposite: true)LandmarkRef(string: "opposite.hip") // nil si no se reconoceref.joint(for: .right)ref.stringValue // "opposite.hip"En JSON es un String. Un literal desconocido en Swift ("elbw") detiene la ejecución con preconditionFailure; en JSON produce un DecodingError.