Autor Tema: Algoritmos que me dé N puntos equidistante en la superficie de una esfera

0 Usuarios y 1 Visitante están viendo este tema.

23 Septiembre, 2019, 07:13 pm
Leído 568 veces

jlopez

  • $$\pi \pi$$
  • Mensajes: 34
  • Karma: +0/-0
  • Sexo: Masculino
Mi idea es usarlo para crear N círculos lo más regularmente posible en una esfera hueca.
Los puntos sirven para crear aros cuya perpendicular apunte a dichos puntos y estén centrados en el origen
Se puede usar por ejemplo para calcular hilos para cubrir una esfera de fibra de carbono para cubrirla con epoxi y albergar hidrógeno a presión o por ejemplo en mi caso para hacer una máquina magnética.

He intentado el siguiente algoritmo:
Latex:
\(
\Delta\phi =\pi*(3-\sqrt{5}) \\
offset=2/N \\
Bucle: i=0..N:\\
y=i*offset-1+\frac{offset}{2} \\
r=\sqrt{1-y^{2}}\\
\phi=i*\Delta\phi \\
vector={r*cos(\phi),y,r*sin(\phi)}
 \)
Código: [Seleccionar]
       //C++:
double inc = PI * (3. - sqrt(5.)), off = 2. / n;
for (int i = 0; i < n; i++)
{
double y = i * off - 1. + 0.5*off,  r = sqrt(1. - y * y), phi = i * inc;
dxyz = { r*cos(phi),y,r*sin(phi) };
                imprime(dxyz);               
}

Pero el resultado es un desastre, por ejemplo para n=128:



24 Septiembre, 2019, 11:53 am
Respuesta #1

Luis Fuentes

  • el_manco
  • Administrador
  • Mensajes: 47,106
  • País: es
  • Karma: +0/-0
  • Sexo: Masculino

25 Septiembre, 2019, 09:46 am
Respuesta #2

jlopez

  • $$\pi \pi$$
  • Mensajes: 34
  • Karma: +0/-0
  • Sexo: Masculino
Gracias Luis, aunque no me soluciona el problema pues la esfera que sale monta los hilos en los casquetes polares.
También he encontrado otro sistema a base de distribuir puntos con distribución par-impar según latitud y longitud pero el resultado es peor (la distancia mínima entre puntos es menor) y por eso no lo pongo

He visto que en la esfera que he generado con mi programa mejora mucho si elimino los puntos de uno de los hemisferios, pues así no duplico hilos generados por centros de uno de los hemisferios con los del otro, pero el resultado sigue sin ser bueno pues se montan hilos en varios puntos, o sea, mi idea de cubrir la esfera con hilos es un problema distinto del de los puntos equidistantes.

Por ahora probaré con el sistema propuesto con centros en uno de los hemisferios a ver que tal va el simulador

saludos

25 Septiembre, 2019, 02:14 pm
Respuesta #3

Abdulai

  • Moderador Global
  • Mensajes: 2,383
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino

Un recurso para distribuirlos casi equidistantes es partir de un poliedro regular (p.e. el icosaedro) e ir subdividiendo las caras.



(de http://www.songho.ca/opengl/gl_sphere.html )

De todas maneras tu problema es mas complejo, pues no se trata de encontrar puntos sino una línea continua donde los cruces y los espacios libres estén lo mas regularmente distribuidos posible.

25 Septiembre, 2019, 06:59 pm
Respuesta #4

jlopez

  • $$\pi \pi$$
  • Mensajes: 34
  • Karma: +0/-0
  • Sexo: Masculino
Gracias, no se me había ocurrido subdividir el icosaedro

Un saludo