Como gerar n pontos equidistantes em um espaço dimensional n-1

8

Como dito, eu quero construir um programa para gerar n pontos equidistantes em um espaço euclidiano. Pelo que eu sei

  • 1d: todos os pontos
  • 2d: todos os triângulos equilaterais
  • 3d: todos os tetraedros equilaterais
  • até 3d: suponho que seja chamado de hipertriangulo equilateral

Portanto, meu problema é o seguinte, em um espaço n-1 euclidiano, fornecendo um ponto definido para construir o outro n-1, a fim de ter um hiper-triângulo equilateral com um d distante entre cada ponto.

Suponho que podemos começar como a seguir, por exemplo, um espaço 3D.

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

Começamos a consertar p2 sabendo d e p1

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

Temos 3 variáveis ​​x2, y2, z2. Podemos consertar aleatoriamente dois deles e determinar o terceiro sem problemas.

Então, para o segundo ponto, temos agora 2 equações para defini-lo:

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

Como anteriormente, presumo que possamos consertar 2 variáveis ​​para determinar a terceira.

Para o último ponto, agora temos 3 equações que o definiram.

Portanto, para um espaço dimensional n-1, temos a equação n-1 para definir o último ponto.

Não sei como resolver esse tipo de sistema composto de equação quadrática com uma variável e se o processo que consiste em fixar a dimensão n-1 para determinar a última leva a um hipertriangulo equidistante. Além disso, existem outros métodos com uma complexidade menor e mais fácil de implementar.

Espero ter sido suficientemente claro e agradeço a sua ajuda.

KyBe
fonte

Respostas:

9

Suponho que estamos trabalhando em .Rn

Antes de tudo, observe que um simplex regular determina efetivamente todos os outros. De fato, se são dois conjuntos de pontos em que atendem à condição de regularidade, eles podem ser obtidos um do outro, compondo no máximo uma isometria e uma transformação homotética do espaço afim (o converse também é verdadeiro).nS1,S2Rn

Portanto, é suficiente construir um simplex unitário centrado na origem. Visualizamos cada vértice do simplex como um elemento do espaço vetorial dimensional real .nv1,v2,vn+1n

Considere dois vértices do simplex, deixe- ser a origem e ser o plano que passa . O ângulo é exatamente . Para provar isso, observamos que:v1,v2Oπv1,v2,Oϑ=v1Ov2arccos(1/n)

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

Deduzimos que o seguinte se aplica:

  • ivi=1

  • ijvi,vj=1/n

Podemos assumir sem perda de generalidade que estão na mesma linha, que está no mesmo plano que os outros e assim por diante (em geral, que para cada , estão no mesmo subespaço de com dimensão ). Portanto, podemos escrever os vetores por coordenadas da seguinte maneira:v1,v2v3kv1,v2,vkRnk

v1v2vn+1===(x1,10 00 00 00 0)T(x2,1x2,20 00 00 0)T(xn+1,1xn+1,2xn+1,3xn+1,4xn+1,n+1)T

A primeira equação determina exclusivamente e a segunda todo . Agora usamos novamente o primeiro para calcular e com o segundo determinamos todo o restante .x1,1xm,1x2,2x2,m

A continuação do procedimento de maneira semelhante calcula os valores das coordenadas de todos os vértices.

ordenação rápida
fonte
Obrigado, apesar das coisas teóricas bem formadas que você compartilha conosco, não consigo descobrir como determinar , presumindo que é definido pelo usuário. Você pode explicar isso de outra maneira? x2,1,x2,2,...x1,1
precisa saber é
v [n + 1] deve ter n dimensões, não n + 1, como na última equação; o v [n + 1] deve ser calculado a partir de v [0] + v [1] + ... + v [n] + v [n + 1] = 0
04/04/19
6

Você pode criar n-1 pontos equidistantes usando os vetores unitários ao longo de cada um dos eixos aka. (1, 0, 0, 0, ..., 0); (0, 1, 0, 0, ..., 0); (0, 0, 1, 0, ..., 0); etc., o último enésimo ponto será ao longo da direção 1, 1, 1, ..., 1.

Então você pode usar uma escala para definir a distância entre os pontos de a e traduzir para mover um dos pontos para o ponto fixo2d

catraca arrepiante
fonte
Bom - acho que você pode escrever uma solução em formato fechado com essa abordagem!
Ruakh
1
[mais tarde] Para o último ponto, você pode usar ou . (1-nn-1,1-nn-1,,1-nn-1)(1+nn-1,1+nn-1,,1+nn-1)
Ruakh
Obrigado, mas não tenho certeza de entender bem o que você propôs "usando o vetor unitário ao longo de cada eixo", pode reformular, por favor.
precisa saber é
@KyBe Adicionei alguns exemplos.
ratchet freak
De onde você encontrou sua expressão do último ponto (que é o enésimo num espaço n-1 d) @ruakh? É interessante, mas não consigo descobrir como obtê-lo.
precisa saber é