Come generare n punti equidistanti in uno spazio dimensionale n-1


8

Come detto, voglio costruire un programma per generare n punti equidistanti in uno spazio euclideo. Da quello che so

  • 1d: tutti i punti
  • 2d: tutti i triangoli equilateri
  • 3d: tutti i tetraedri equilateri
  • fino a 3d: suppongo che si chiama ipertriangolo equilatero

Quindi il mio problema è il seguente, in uno spazio euclideo n-1, dando un punto definito costruisci l'altro n-1 per avere un ipertriangolo equilatero con una d distante tra ogni punto.

Suppongo che possiamo iniziare come segue, ad esempio con uno spazio 3d.

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

Iniziamo a correggere p2 conoscendo d e p1

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

Abbiamo 3 variabili x2, y2, z2. Possiamo risolverne a caso due e determinarne il terzo senza problemi.

Quindi per il secondo punto abbiamo ora 2 equazioni per definirlo:

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

Come in precedenza, presumo che possiamo correggere 2 variabili per determinare la terza.

Per l'ultimo punto ora abbiamo 3 equazioni che lo hanno definito.

Quindi per uno spazio dimensionale n-1 abbiamo un'equazione n-1 per definire l'ultimo punto.

Non so come risolvere questo tipo di sistema composto da equazione quadratica con una variabile e se il processo che consiste nel fissare la dimensione n-1 per determinare l'ultima porta a un ipertriangolo equidistante. Inoltre esistono forse altri metodi con una complessità minore e più facili da implementare.

Spero di essere stato abbastanza chiaro e ti ringrazio per il tuo aiuto.

Risposte:


9

Presumo che stiamo lavorando in .Rn

Prima di tutto, osserva che un normale simplex determina efficacemente tutti gli altri. Infatti, se sono due serie di punti in che soddisfano la condizione di regolarità, allora possono essere ottenuti l'uno dall'altro componendo al massimo un'isometria e una trasformazione omotetica dello spazio affine (il anche il contrario è vero).nS1,S2Rn

Pertanto, è sufficiente costruire un simplex unitario centrato nell'origine. Visualizziamo ogni vertice del simplex come elemento del reale spazio vettoriale dimensionale.nv1,v2,vn+1n

Consideriamo due vertici del simplex, lasciate essere l'origine e essere il piano passante per . L'angolo è esattamente . Per dimostrarlo, osserviamo che:v1,v2Oπv1,v2,Oϑ=v1Ov2arccos(1/n)

0=Σiovio2=(n+1)+2cosθ(n+12)

Deduciamo che il seguente vale:

  • iovio=1

  • iojvio,vj=-1/n

Possiamo presumere senza perdita di generalità che giacciono sulla stessa linea, che si trovi sullo stesso piano degli altri e così via (in generale, che per ogni , giacciono sullo stesso sottospazio di con dimensione ). Pertanto, possiamo scrivere i vettori per coordinate come segue:v1,v2v3Kv1,v2,...vKRnK

v1v2vn+1===(X1,1000...0)T(X2,1X2,200...0)T(Xn+1,1Xn+1,2Xn+1,3Xn+1,4...Xn+1,n+1)T

La prima equazione determina in modo univoco e la seconda tutta . Ora usiamo di nuovo il primo per calcolare e con il secondo determiniamo tutti i restanti .X1,1Xm,1X2,2X2,m

Continuando la procedura in modo simile, vengono calcolati i valori delle coordinate di tutti i vertici.


Grazie, nonostante le cose teoriche ben formate che condividi con noi, non riesco a capire come determinare , presumendo che è definito dall'utente. Puoi per favore spiegarlo in un altro modo? X2,1,X2,2,...X1,1
KyBe

v [n + 1] dovrebbe avere n dimensioni non n + 1 come nell'ultima equazione; v [n + 1] dovrebbe essere calcolato da v [0] + v [1] + ... + v [n] + v [n + 1] = 0
titus

6

È possibile creare n-1 punti equidistanti utilizzando i vettori unità lungo ciascuno degli assi aka. (1, 0, 0, 0, ..., 0); (0, 1, 0, 0, ..., 0); (0, 0, 1, 0, ..., 0); ecc., L'ultimo ennesimo punto sarà lungo la direzione 1, 1, 1, ..., 1.

Quindi è possibile utilizzare una scala per impostare la distanza tra i punti da a e una traslazione per spostare uno dei punti sul punto fisso2d


Bello - Penso che tu possa effettivamente scrivere una soluzione a forma chiusa con questo approccio!
Ruakh

1
[più tardi] Per l'ultimo punto, puoi usare o . (1-nn-1,1-nn-1,...,1-nn-1)(1+nn-1,1+nn-1,...,1+nn-1)
Ruakh

Grazie, ma non sono sicuro di capire bene ciò che hai proposto "usando il vettore unitario lungo ciascuno degli assi", puoi riformulare per favore.
KyBe

@KyBe ho aggiunto alcuni esempi.
Cricchetto maniaco del

Da dove hai trovato la tua espressione dell'ultimo punto (che è l'ennesimo in uno spazio n-1 d) @ruakh? È interessante ma non riesco a capire come ottenerlo.
KyBe
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.