Advertisement
jukaukor

Tetraedriunitball.jl

Jan 20th, 2023
24
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.26 KB | None | 0 0
  1. # arvotaan 3-ulotteisen yksikköpallon sisään tetraedeja
  2. # lasketaan tetraedrien keskitilavuus
  3. # Juhani Kaukoranta 20.1.2023
  4. using LinearAlgebra,Random,Distributions
  5. function mDballtetrahedrons(n)
  6. # n = tetraedrien lukumäärä
  7. # lasketaan tetraedrien keskitilavuus yksikköpallossa
  8. m = 3 # ulottuvuus, dimensio
  9. tilavuus = 0 # tetraedrien tilavuuksien summa
  10. V = 0 # determinantin avulla laskettu
  11. kokonaisala = 0 # laskee pinta-alan
  12. function tahko(a,b,c)
  13. # laskee tahkon pinta-alan
  14. p = (a+b+c)/2 # tahkon sivut
  15. return sqrt(p*(p-a)*(p-b)*(p-c))
  16. end
  17.  
  18. for i = 1 : n
  19. d = Normal(0,1)
  20. r = rand(4) .^(1/m) # uniformjakauman m-juuresta säteet
  21. u = rand(d,4,m) # m kpl muuttujia, kaikilla 4 arvoa
  22. norm1 = norm(u[1,:]) # kärki P1 normi
  23. norm2 = norm(u[2,:]) # kärki P2 normi
  24. norm3 = norm(u[3,:]) # kärki P3 normi
  25. norm4 = norm(u[4,:]) # kärki P4 normi
  26. normi = [norm1;norm2;norm3;norm4]
  27. x = @. r * u / normi # 4 normitettua m-ulotteista muuttujaa
  28. P1 = x[1,:] # tetraedrin kärkipiste (m kpl koordinaatteja)
  29. P2 = x[2,:] # tetraedrin kärkipiste
  30. P3 = x[3,:] # tetraedrin kärkipiste
  31. P4 = x[4,:] # teraedrin kärkipiste, huippu
  32. # P1P2P3 muodostavat "pohjakolmion", P4 huippu
  33. a = norm(P2 .- P1) # pohjakolmion sivu
  34. b = norm(P3 .- P2) # pohjakolmion sivu
  35. c = norm(P3 .- P1) # pohjakolmion sivu
  36. d = norm(P4 .- P1)
  37. e = norm(P4 .- P2)
  38. f = norm(P4 .- P3)
  39. pohjanala = tahko(a,b,c) # Heron, pohjakolmion pinta-ala
  40. sivutahkot = tahko(a,e,d)+tahko(b,f,e)+tahko(c,d,f)
  41. kokonaisala += pohjanala + sivutahkot
  42. #N = cross((P2-P1),(P3-P1)) # pohjakolmion normaali
  43. #korkeus = abs(dot((P4-P1),N))/norm(N) #tetraedrin korkeus
  44. #tilavuus += pohjanala * korkeus/3 # tetraedrin tilavuuksien summa
  45. M = [P1-P4 P2-P4 P3-P4] # determinanttia varten
  46. determ = abs(det(M))/6
  47. V += determ # tilavuus
  48. end
  49.  
  50. #println("tetraedrien tilavuuksien keskiarvo =",tilavuus/n)
  51. println("tilavuuksien keskiarvo = ", V/n)
  52. println("tetraedrien kokonaispinta-alan keskiarvo =",kokonaisala/n)
  53.  
  54. end
  55.  
  56.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement