feat(cosmobiologia): esfera 3D batch 2 — horizonte local, cénit y relieve

Sobre el batch 1 (eclíptica + ecuador + cuerpos):

- Horizonte local: círculo máximo perpendicular al cénit, derivado de
  la latitud geográfica y el RAMC. El cénit (declinación φ, AR RAMC,
  llevado al marco eclíptico) es el «punto del observador» — marcado
  como tal, con su nadir y el meridiano local.
- Día/noche: los cuerpos bajo el horizonte se atenúan — de un vistazo
  se ve qué planetas estaban sobre la tierra en el momento de la carta.
- Marcadores de polos: eclípticos (punto dorado) y celestes (anillo +
  cruz, etiquetados PN/PS) — el ángulo entre ambos ejes ES la
  oblicuidad, ahora visible.
- Relieve de la esfera: disco base + degradado radial + brillo
  especular desplazado a la luz — volumen sin gradientes nativos.
- RenderModel gana `geo_latitude_deg` (#[serde(default)]); el bridge
  lo puebla desde birth_data.

Verificación: 2 tests nuevos fijan la construcción del cénit — está a
la colatitud del polo celeste, y cénit/polo/MC son coplanares (el
plano del meridiano), lo que ancla el RAMC. 35 tests verdes.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
sergio
2026-05-22 18:49:02 +00:00
parent 900cd19e49
commit 8fc26b0c0c
5 changed files with 362 additions and 16 deletions
@@ -1496,6 +1496,7 @@ fn build_render_model(
midheaven_deg,
descendant_deg,
imum_coeli_deg,
geo_latitude_deg: chart.birth_data.latitude_deg as f32,
layers: vec![sign_dial, houses, bodies, aspects_layer],
overlays: Vec::new(),
aspect_summary: Vec::new(),
@@ -388,6 +388,7 @@ pub fn compute_mock(chart: &Chart) -> RenderModel {
midheaven_deg: 270.0,
descendant_deg: 180.0,
imum_coeli_deg: 90.0,
geo_latitude_deg: chart.birth_data.latitude_deg as f32,
layers: vec![sign_dial],
overlays: Vec::new(),
aspect_summary: Vec::new(),