Digamos que tengo una esfera D-dimensional con centro, [C1, C2, C3, C4, ... CD], y un radio R. Ahora quiero trazar N número de puntos distribuidos uniformemente (equidistante aparte de cada uno otro) en la superficie de la esfera. No importa dónde estén exactamente esos puntos, solo que están BASTANTE equidistantes entre sí. Quiero una función que devuelve una matriz de estos puntos, P.Cómo trazar N puntos en la superficie de una esfera D-dimensional aproximadamente equidistante aparte?
function plotter(D, C[1...D], R, N)
{
//code to generate the equidistant points on the sphere
return P[1...N][1...D];
}
Esto es matemáticamente bastante técnico para hacerlo bien. En cambio, le preguntaría esto en math.stackexchange.com. Pero solo fíjelo como puntos en una unidad D-Sphere (ya que la escala y la traducción para hacer que tenga un radio R, centrado en (c_1, ..., c_D) es trivial. –
No lo he pensado del todo, así que puede que no tenga sentido. ¿Qué pasa si comienzas con cualquier punto (digamos (R, 0, 0, ..., 0) y asumes que la esfera está centrada en el origen). Ahora gira ese punto en los ejes D-1 (no debería lo que es consecuente) por un ángulo de theta/(N-1) y poner un nuevo punto allí (esto implicará una gran cantidad de [multiplicación de matrices] (http://en.wikipedia.org/wiki/Rotation_matrix# General_rotations). Haz esto N-1 veces. Esto puede hacerte querer lo que quieres, pero me disculpo si falla horriblemente ya que no lo he pensado todo el tiempo. –
Puede crear una solución aleatoria y luego restablecerla. Crea N puntos aleatorios en la D-Sphere. Evaluar usando una medida de uniformidad. Cambia aleatoriamente un punto aleatorio. Si eso mejora la medida, mantenga el ajuste, de lo contrario, deshazte. Repita hasta cansado. – NovaDenizen