Estoy seguro de que la respuesta que proporcionó @Aretino también funciona, pero dejo mi propia solución en aras de la integridad.
Esto es lo que he hecho yo mismo. Como los lectores habrán adivinado, mi objetivo era intentar proyectar los puntos de la superficie dentro de la cara del icosaedro en el respectivo triángulo esférico. El problema que tenía era que con el mapeo ingenuo el triángulo esférico "tomaría" los puntos de la superficie planar que están fuera del triángulo planar. Véase mi imagen, en la que he delineado el borde áspero del triángulo planar en uno de sus lados: https://i.snag.gy/GVYsAX.jpg
Inicialmente hice el mapeo de la siguiente manera:
- obtener coordenadas baricéntricas: $baryP = getTriangleBarycentric(pos, icoFace[0], icoFace[1], icoFace[2]$$ );$
$pos$ es un punto de la esfera. $icoFace[0..3]$ son vértices de un icosaedro y del correspondiente triángulo esférico.
- $planarPoint$ = $baryP.x * [0.0, 0.0] + baryP.y * [1.0, 0.0] + baryP.z * [0.5, \frac{\sqrt{3}}{2}]$
$planarPoint$ es un vector de dos componentes que representa los puntos del triángulo desde el que hago el mapa. $[0.0, 0.0] ; [1.0, 0.0] ; [0.5, \frac{\sqrt{3}}{2}]$ son puntos del triángulo desde los que hago el mapeo. Nota: este triángulo es similar (y equilátero) al triángulo plano icosaedro original. Es sólo una cuestión de preferencia para trabajar con el triángulo "unidad".
Así que ese fue el enfoque original y no funcionó.
Lo que hizo que funcionara es la siguiente transformación de $pos$ antes de que se utilice para calcular la coordenada baricéntrica correspondiente a $pos$ .
$triangleToPointDist = DistancePointToTriangle(pos, icoFace[0], icoFace[1], icoFace[2])$ $pos = pos * (1.0 - triangleToPointDist)$
Estas dos líneas proyectan esencialmente $pos$ de estar en la superficie del triángulo esférico a estar en el triángulo del icosaedro.
La falta de proyección de la esfera al triángulo plano del icodahedro fue mi único error.
P.D. Como lo hago para el shader WebGL (un programa que se ejecuta en la GPU), no puedo resistir la tentación de compartir el enlace al excelente resultado final: https://shaderfrog.com/app/view/2360
0 votos
Tome cualquier similitud que lleve los vértices de $Ts$ a $Tp$ seguido por el evidente "aplanamiento" de $Ts$ .
0 votos
Soy bueno con la transformación $Ts$ vértices a $Tp$ los. Coinciden perfectamente. Sin embargo, es evidente que tengo problemas con la parte del "aplanamiento". Con el ingenuo (inverso $Tp$ , en $\mathbb{R}^2$ a $Ts$ , en $\mathbb{R}^3$ ) el mapeo me está dando puntos que están fuera del triángulo planar. Ver la imagen: i.snag.gy/GVYsAX.jpg Las marcas rojas representan aproximadamente dónde está el borde de mi triángulo planar.