Comment générer n points équidistants dans un espace dimensionnel n-1

8

Comme je l'ai dit, je veux construire un programme pour générer n points équidistants dans un espace euclidien. De ce que je sais

  • 1d: tous les deux points
  • 2d: tous les triangles équilatéraux
  • 3D: tous les tétraèdres équilatéraux
  • jusqu'à 3d: je suppose que cela s'appelle un hypertriangle équilatéral

Donc mon problème est le suivant, dans un espace euclidien n-1, donnant un point défini construire l'autre n-1 afin d'avoir un hypertriangle équilatéral avec un d distant entre chaque point.

Je suppose que nous pouvons commencer comme suit avec par exemple un espace 3D.

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

Nous commençons à fixer p2 connaissant d et p1

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

Nous avons 3 variables x2, y2, z2. Nous pouvons corriger au hasard deux d'entre eux et déterminer le troisième sans problème.

Ensuite, pour le deuxième point, nous avons maintenant 2 équations pour le définir:

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

Comme précédemment, je suppose que nous pouvons fixer 2 variables pour déterminer la troisième.

Pour le dernier point, nous avons maintenant 3 équations qui le définissent.

Donc, pour un espace dimensionnel n-1, nous avons l'équation n-1 pour définir le dernier point.

Je ne sais pas comment résoudre ce type de système composé d'équation quadratique à une variable et si le processus qui consiste à fixer la dimension n-1 pour déterminer la dernière conduit à un hypertriangle équidistant. De plus il existe peut-être d'autres méthodes avec une complexité moindre et plus faciles à mettre en œuvre.

J'espère avoir été assez clair et je vous remercie de votre aide.

KyBe
la source

Réponses:

9

Je suppose que nous travaillons dans .Rn

Tout d'abord, notez qu'un simplexe régulier détermine efficacement tous les autres. En fait, si sont deux ensembles de points dans qui satisfont la condition de régularité, alors ils peuvent être obtenus l'un de l'autre en composant au plus une isométrie et une transformation homothétique de l'espace affine (le l'inverse est également vrai).nS1,S2Rn

Par conséquent, il suffit de construire un simplexe unitaire centré sur l'origine. Nous visualisons chaque sommet du simplexe comme un élément de l' espace vectoriel réel à dimensions.nv1,v2,vn+1n

Considérons deux sommets du simplex, laissez être l'origine et être le plan passant par . L'angle est exactement . Pour le prouver, nous observons que:v1,v2Oπv1,v2,Oϑ=v1Ov2arccos(1/n)

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

Nous en déduisons que la tenue suivante:

  • ivi=1

  • ijvi,vj=1/n

On peut supposer sans perte de généralité que se trouvent sur la même ligne, que se trouve sur le même plan que les autres et ainsi de suite (en général, que pour chaque , se trouvent sur le même sous-espace de avec la dimension ). Par conséquent, nous pouvons écrire les vecteurs par coordonnées comme suit: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 première équation détermine uniquement et la seconde tous les . Maintenant, nous utilisons à nouveau le premier pour calculer et avec le second, nous déterminons tous les restants .X1,1Xm,1X2,2X2,m

La poursuite de la procédure d'une manière similaire calcule les valeurs de coordonnées de tous les sommets.

tri rapide
la source
Merci, malgré les trucs théoriques bien formés que vous partagez avec nous, je n'arrive pas à trouver comment déterminer les , en supposant que est défini par l'utilisateur. Pouvez-vous l'expliquer d'une autre manière? X2,1,X2,2,...X1,1
KyBe
v [n + 1] devrait avoir n dimensions et non n + 1 comme dans la dernière équation; le v [n + 1] doit être calculé à partir de v [0] + v [1] + ... + v [n] + v [n + 1] = 0
titus
6

Vous pouvez créer n-1 points équidistants en utilisant les vecteurs unitaires le long de chacun des axes aka. (1, 0, 0, 0, ..., 0); (0, 1, 0, 0, ..., 0); (0, 0, 1, 0, ..., 0); etc., Le dernier nième point sera dans la direction 1, 1, 1, ..., 1.

Ensuite, vous pouvez utiliser une échelle pour définir la distance entre les points de à et une translation pour déplacer l'un des points vers le point fixe2

monstre à cliquet
la source
Nice - je pense que vous pouvez réellement écrire une solution sous forme fermée avec cette approche!
ruakh
1
[plus tard] Pour le dernier point, vous pouvez utiliser soit ou . (1-nn-1,1-nn-1,,1-nn-1)(1+nn-1,1+nn-1,,1+nn-1)
ruakh
Merci, mais je ne suis pas sûr de bien comprendre ce que vous proposiez en "utilisant le vecteur unitaire le long de chacun des axes", pouvez-vous reformuler s'il vous plaît.
KyBe
@KyBe J'ai ajouté quelques exemples.
monstre à cliquet
D'où avez-vous trouvé votre expression du dernier point (qui est le nième dans un n-1 d-espace) @ruakh? C'est intéressant mais je n'arrive pas à trouver comment l'obtenir.
KyBe