Create an N-Dimensional Simplex (Tetrahedron)
Python 78 66 Bytes
lambda n:[i*[0]+[n]+(n+~i)*[0]for i in range(n)]+[n*[1+(n+1)**.5]]
Surely can be improved, especially at handling n=1```. (How is that even a simplex?) Just realized that's not necessary. Can probably be improved still ^^
Try it online!
[i*[0]+[1]+(n+~i)*[0]for i in range(n)]
creates identity matrix. All points have distance sqrt(2)
from each other. (thanks to Rod for improving)
Now we need a n+1
-th point with the same distance to all other points. We have to choose (x, x, ... x)
.
Distance from (1, 0, ... )
to (x, x, ... x)
is sqrt((x-1)²+x²+...+x²)
. If we want an n
dimensional simplex this turns out to be sqrt((x-1)²+(n-1)x²)
, as we have one 1
and n-1
0
s in the first point. Simplify a bit: sqrt(x²-2x+1+(n-1)x²) = sqrt(nx²-2x+1)
We want this distance to be sqrt(2)
.
sqrt(2) = sqrt(nx²-2x+1)
2 = nx²-2x+1
0 = nx²-2x-1
0 = x²-2/n*x+1/n
Solving this quadratic equation (one solution, other one works fine, too):
x = 1/n+sqrt(1/n²+1/n) = 1/n+sqrt((n+1)/n²) = 1/n+sqrt(n+1)/n = (1+sqrt(n+1))/n
Put that in a list n
times, put that list in a list and join with identity matrix.
-4 Bytes thanks to Alex Varga:
Multiply each vector by n
. This changes the creation of the identity matrix to lambda n:[i*[0]+[n]+(n+~i)*[0]
(same length) and gets rid of the division by n
in the additional point, so it becomes n*[1+(n+1)**.5]
, saving two brackets and the /n
.
Wolfram Language (Mathematica), 46 bytes
IdentityMatrix@#~Join~{Table[1-(#+1)^.5,#]/#}&
Try it online!
Jelly, 11 bytes
‘½‘÷ẋW
=þ;Ç
Try it online!
Works by generating the identity matrix of size N and concatenating it with the list generated by repeating N times the singleton √(N + 1) + 1, divided by N.
‘½‘÷ẋW – Helper link (monadic). I'll call the argument N.
‘ – Increment N (N + 1).
½ – Square root.
‘ – Increment (√(N + 1) + 1).
÷ – Divide by N.
ẋ – Repeat this singleton list N times.
W – And wrap that into another list.
––––––––––––––––––––––––––––––––––––––––––
=þ;Ç – Main link.
=þ – Outer product of equality.
;Ç – Concatenate with the result given by the helper link applied to the input.