Advertisement
jukaukor

TetrahedronsInsideHyperball.jl

Dec 18th, 2023
16
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.98 KB | None | 0 0
  1. # tetrahedrons in dim-dimensional space
  2. using LinearAlgebra,Random,Distributions
  3. # Juhani Kaukoranta 18.12.2023
  4. function TetrahedronVolume(d12,d13,d14,d23,d24,d34)
  5. m = [0 1 1 1 1; 1 0 d12^2 d13^2 d14^2;1 d12^2 0 d23^2 d24^2; 1 d13^2 d23^2 0 d34^2; 1 d14^2 d24^2 d34^2 0]
  6. return sqrt(1/288*det(m))
  7. end
  8. function tahko(a,b,c)
  9. # laskee tahkon pinta-alan
  10. p = (a+b+c)/2 # tahkon sivut
  11. return sqrt(p*(p-a)*(p-b)*(p-c))
  12. end
  13. function TetrahedronArea(d12,d13,d14,d23,d24,d34)
  14. return sum([tahko(d12,d13,d23) tahko(d12,d14,d24) tahko(d23,d24,d34) tahko(d13,d14,d34)])
  15. end
  16. function mDballtetrahedrons(dim,n)
  17. # dim = ulottuvuus, n = tetraedrien lukumäärä
  18. Volume = 0 # tetraedrien tilavuuksien summa
  19. Ala = 0 # tetraedrien pinta-alojen summa
  20. for i = 1 : n
  21. r = rand(4) .^(1/dim) # uniformjakauman dim-juuresta säteet
  22. u = randn(4,dim) # 4 kpl m-ulotteista normaalijakatunutta kärkipistettä
  23. norm1 = norm(u[1,:]) # kärki P1 normi
  24. norm2 = norm(u[2,:]) # kärki P2 normi
  25. norm3 = norm(u[3,:]) # kärki P3 normi
  26. norm4 = norm(u[4,:]) # kärki P4 normi
  27. normi = [norm1;norm2;norm3;norm4]
  28. x = @. r * u / normi # 4 normitettua m-ulotteista muuttujaa
  29. P1 = x[1,:] # tetraedrin kärkipiste (m kpl koordinaatteja)
  30. P2 = x[2,:] # tetraedrin kärkipiste
  31. P3 = x[3,:] # tetraedrin kärkipiste
  32. P4 = x[4,:] # teraedrin kärkipiste
  33. d12 = norm(P1-P2) # tetraedrit sivujen pituudet
  34. d13 = norm(P1-P3)
  35. d14 = norm(P1-P4)
  36. d23 = norm(P2-P3)
  37. d24 = norm(P2-P4)
  38. d34 = norm(P3-P4)
  39. Volume += TetrahedronVolume(d12,d13,d14,d23,d24,d34)
  40. Ala += TetrahedronArea(d12,d13,d14,d23,d24,d34)
  41. end
  42. println(n," tetraedria satunnaisesti arvottuna ",dim,"-ulotteisen yksikköpallon sisälle")
  43. println("Tedraedrien tilavuuksien keskiarvo = ", Volume/n)
  44. println("tetraedrien kokonaispinta-alan keskiarvo =",Ala/n)
  45. end
  46.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement