Cómo generar n puntos equidistantes en un espacio dimensional n-1

8

Como se dijo, quiero construir un programa para generar n puntos equidistantes en un espacio euclidiano. Por lo que sé

  • 1d: todos los puntos
  • 2d: todos los triángulos equiláteros
  • 3d: todos los tetraedros equiláteros
  • hasta 3d: supongo que se llama hipertriangulo equilátero

Entonces, mi problema es el siguiente, en un espacio euclidiano n-1, dando un punto definido, construya el otro n-1 para tener un hipertriangulo equilátero con una d distante entre cada punto.

Supongo que podemos comenzar como sigue con, por ejemplo, un espacio 3d.

  • p1 = (x1, y1, z1) fijo
  • p2 = (x2, y2, z2)
  • p3 = (x3, y3, z3)
  • p4 = (x4, y4, z4)
  • re

Comenzamos a arreglar p2 sabiendo d y p1

  • d²=(x1x2)2+(y1y2)2+(z1z2)2

Tenemos 3 variables x2, y2, z2. Podemos arreglar al azar dos de ellos y determinar el tercero sin problema.

Luego para el segundo punto tenemos ahora 2 ecuaciones para definirlo:

  • d²=(x1x3)2+(y1y3)2+(z1z3)2
  • d²=(x2x3)2+(y2y3)2+(z2z3)2

Como anteriormente, supongo que podemos arreglar 2 variables para determinar la tercera.

Para el último punto ahora tenemos 3 ecuaciones que lo definieron.

Entonces, para un espacio dimensional n-1 tenemos una ecuación n-1 para definir el último punto.

No sé cómo resolver este tipo de sistema compuesto de ecuaciones cuadráticas con una variable y si el proceso que consiste en fijar la dimensión n-1 para determinar la última conduce a un hipertriangulo equidistante. Además, existen otros métodos con una complejidad menor y más fáciles de implementar.

Espero haber sido lo suficientemente claro y gracias por su ayuda.

KyBe
fuente

Respuestas:

9

Supongo que estamos trabajando en .Rn

En primer lugar, observe que un simplex regular determina efectivamente a todos los demás. De hecho, si son dos conjuntos de puntos en que satisfacen la condición de regularidad, entonces pueden obtenerse unos de otros componiendo como máximo una isometría y una transformación homotética del espacio afín (el lo contrario también es cierto).nS1,S2Rn

Por lo tanto, es suficiente construir un simplex unitario centrado en el origen. Visualizamos cada vértice del simplex como un elemento del espacio vectorial -dimensional real .nv1,v2,vn+1n

Consideremos dos vértices del simplex, permiten ser el origen y es el plano que pasa a través . El ángulo es exactamente . Para probar eso, observamos que:v1,v2Oπv1,v2,Oϑ=v1Ov2arccos(1/n)

0=ivi2=(n+1)+2cosϑ(n+12)

Deducimos que se cumple lo siguiente:

  • ivi=1

  • ijvi,vj=1/n

Podemos suponer sin pérdida de generalidad que encuentran en la misma línea, que encuentra en el mismo plano que los demás y así sucesivamente (en general, que para cada , encuentran en el mismo subespacio de con dimensión ). Por lo tanto, podemos escribir los vectores por coordenadas de la siguiente manera:v1,v2v3kv1,v2,vkRnk

v1v2vn+1===(x1,10000)T(x2,1x2,2000)T(xn+1,1xn+1,2xn+1,3xn+1,4xn+1,n+1)T

La primera ecuación determina de forma exclusiva y la segunda todas las . Ahora usamos nuevamente el primero para calcular y con el segundo determinamos todos los restantes .x1,1xm,1x2,2x2,m

Continuar el procedimiento de manera similar calcula los valores de coordenadas de todos los vértices.

ordenación rápida
fuente
Gracias, a pesar de las cosas teóricas bien formadas que comparte con nosotros, no logro descifrar cómo determinar , suponiendo que está definido por el usuario. ¿Puedes explicarlo de otra manera? x2,1,x2,2,...x1,1
KyBe
v [n + 1] debe tener n dimensiones no n + 1 como en la última ecuación; v [n + 1] debe calcularse a partir de v [0] + v [1] + ... + v [n] + v [n + 1] = 0
titus
6

Puede hacer n-1 puntos equidistantes utilizando los vectores unitarios a lo largo de cada uno de los ejes aka. (1, 0, 0, 0, ..., 0); (0, 1, 0, 0, ..., 0); (0, 0, 1, 0, ..., 0); etc., el último enésimo punto estará a lo largo de la dirección 1, 1, 1, ..., 1.

Luego puede usar una escala para establecer la distancia entre los puntos de a y una traslación para mover uno de los puntos al punto fijo2d

monstruo de trinquete
fuente
Agradable: ¡creo que puedes escribir una solución de forma cerrada con este enfoque!
ruakh
1
[más tarde] Para el último punto, puede usar o . (1nn1,1nn1,,1nn1)(1+nn1,1+nn1,,1+nn1)
ruakh
Gracias, pero no estoy seguro de comprender bien lo que propuso al "usar el vector unitario a lo largo de cada uno de los ejes", ¿puede reformularlo por favor?
KyBe
@ Kybe Agregué algunos ejemplos.
monstruo de trinquete
¿De dónde encontraste tu expresión del último punto (que es el enésimo en un espacio d n-1) @ruakh? Es interesante, pero no logro descubrir cómo conseguirlo.
KyBe