En este momento estás viendo Ajuste del vector a un punto de cuadrícula en una esfera (icosaedro)

 – Unity

Ajuste del vector a un punto de cuadrícula en una esfera (icosaedro) – Unity

Ajuste del vector a un punto de cuadrícula en una esfera (icosaedro)

– UnityAssets3Free

buenas , por aqui jorge y aqui os traigo
esta unity pregunta

Aquí hay un problema que pondrá tu cerebro al revés, he estado tratando de lidiar con esto durante mucho tiempo.

Suponga que tiene una esfera ubicada en el origen del espacio 3d. La esfera está segmentada en una cuadrícula de puntos equidistantes. El procedimiento que forma la cuadrícula no es tan importante, pero lo que me parece simple es usar el procedimiento regular de generación de esferas de gráficos 3D por computadora (el algoritmo que forma la esfera descrito en la figura a continuación)

Ahora, una vez que tengo esta esfera (es decir, un icosaedro de algún grado), necesito un procedimiento computacionalmente trivial que sea capaz de ajustar (un ángulo) de un vector unitario aleatorio a los puntos de borde más cercanos del icosaedro. También es aceptable que el vector se ajuste a un punto medio del triángulo que cruza el vector.

Me gustaría enfatizar que es importante que el procedimiento sea computacionalmente trivial. Esto significa que los procedimientos que en realidad crean una esfera en la memoria e implican una búsqueda entre todos los triángulos de la esfera no son una buena idea, ya que esta búsqueda requerirá acceso al montón global y a la RAM, lo cual es lento porque tengo que ejecutar este procedimiento. millones de veces en hardware móvil de bajo costo.

El procedimiento debe producir su resultado a través de un conjunto de ecuaciones matemáticas basadas solo en dos valores, el vector y el grado de icosaedro (es decir, esfera)

¿Alguna idea? ¡Agradezco anticipadamente!

============

Para editar

Una idea de último momento que me vino a la mente, parece que en el diagrama a continuación, el paso 3 (es decir, proyectar cada nuevo vértice a la esfera unitaria) no es importante, porque después de la bisección, proyectar cada vértice a una esfera preservaría todas las características angulares de un forma bisecada que estamos tratando de encajar. Por lo tanto, la tarea simplifica la identificación de las coordenadas de un subtriángulo bisecado que son atravesadas por el vector.

2 respuestas 2

Cree una tabla con 20 entradas de coordenadas de caras de icosaedro de alto nivel; por ejemplo, constrúyalas a partir de conjunto de coordenadas wiki)

Los vértices de un icosaedro centrado en el origen con una longitud de arista de 2 y un radio de esfera circunscrito de 2 sen (2π/5) se describen mediante permutaciones circulares de:

 V[] = (0, ±1, ±ϕ)
 where ϕ = (1 + √5)/2
 is the golden ratio (also written τ).

y calcular los vectores centrales correspondientes C[] (suma de tres vectores por vértices de cada cara).

Encuentre el vector central más cercano usando el producto escalar máximo (DP) de su vector P y todo C[]. Puede ser posible reducir el número de comprobaciones teniendo en cuenta los componentes P (por ejemplo, si el producto escalar de P y algo de V[i] es negativo, no tiene sentido considerar caras como vecinas de V[i]). No esté seguro de que esta eliminación lleve menos tiempo que la comparación directa y completa de los TP con los centros.

Cuando se determina la cara del triángulo grande, proyecto P en el plan de esta cara y obtener las coordenadas de P’ en uv (descomponer AP’ por AB y AC, donde A,B,C son vértices de la cara).

Multiplique u,v por 2^N (grado de subdivisión).

 u' = u * 2^N
 v' = v * 2^N
 iu = Floor(u')
 iv = Floor(v')
 fu = Frac(u')
 fv = Frac(v')

La parte entera de u’ es la «fila» del pequeño triángulo, la parte entera de v’ es la «columna». Las partes fraccionarias son coordenadas trilineales dentro de la cara pequeña del triángulo, por lo que podemos elegir el valor más pequeño de fu, fv, 1-fu-fv para obtener el vértice más cercano. Calcula este vértice más cercano y normaliza el vector si es necesario.

No es equidistante, puedes ver si estudias este versión:

es un problema de frecuencia del domo geodésico y algunas personas han dedicado tiempo a investigar todos los métodos conocidos para hacer esta geometría: http://geo-dome.co.uk/article.asp?uname=domefreqver este tipo es un geodesizer auto-etiquetado 🙂

Una página me dijo que la progresión es así: 2 + 10·4N (12,42,162…)

Puede simplificarlo a un simple triángulo fractal plano, donde cada triángulo se divide en 4 triángulos más pequeños, y cada vez que la subdivisión se gira 12 veces alrededor de una esfera.

Lógicamente, es solo un triángulo rotado 12 veces, y si resuelve el código en ese lado, tiene la versión computada más baja de esferas geodésicas.

Si no desea mantener los 12 lados como una serie de matrices y desea una versión de memoria más baja, puede leer sobre el código de subdivisión de punto medio, hay muchas versiones de subdivisión de punto medio.

Puede que me haya perdido algo por completo. solo que no hay un verdadero domo geodésico equidistante, porque un triángulo no se corresponde con una esfera, solo con icos.

nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto lo podremos de nuevo , muchas gracias

por hoy,hasta la proxima

Deja una respuesta