Advertisement
jukaukor

Triangles_mDunitball.jl

Jan 15th, 2023 (edited)
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.40 KB | None | 0 0
  1. # arvotaan m-ulottesen yksikköpallon sisään kolmioita
  2. # tutkitaan kuinka suuri osa kolmioista on tylppäkulmaisia
  3. # m-ulotteisen pallon sisällä
  4. # Juhani Kaukoranta 18.1.2023
  5. using LinearAlgebra,AngleBetweenVectors,Random,Distributions
  6.  
  7. function mDballquadro(m,n)
  8. # m = ulottuvuus,n kolmioiden määrä
  9. #d = Normal(0,1)
  10. jananpituus = 0
  11. area1 = 0 # nelikulmion puoliskon ala = kolmion ala
  12. area2 = 0 # nelikulmien puolisko
  13. piiri = 0 # nelikulmion piiri
  14. kovera = 0 # laskee koverien (concave) nelikulmioiden määrän,yksi kulma > 180
  15. kolmionpiiri = 0
  16. tylppa = 0 # joku kolmion kulmista > 90 astetta
  17. acute = 0 # kaikki kulmat < 90
  18. suorakulmainen = 0
  19.  
  20. for i = 1 : n
  21. d = Normal(0,1)
  22. r = rand(4) .^(1/m) # pallon säde kärkipisteille uniformajakaumasta m-juurikorjattuna
  23. u = rand(d,4,m) # m kpl muuttujia, kaikilla 4 arvoa
  24. norm1 = norm(u[1,:]) # muuttujien normit
  25. norm2 = norm(u[2,:])
  26. norm3 = norm(u[3,:])
  27. norm4 = norm(u[4,:])
  28. normi = [norm1;norm2;norm3;norm4]
  29. x = @. r * u / normi # 4 normitettua m-ulotteista muuttujaa
  30. P1 = x[1,:] # nelikulmion kärkipiste (m kpl koordinaatteja)
  31. P2 = x[2,:] # nelikulmion kärkipiste
  32. P3 = x[3,:] # nelikulmion kärkipiste
  33. P4 = x[4,:] # nelikulmion kärkipiste
  34. u1 = P1 .- P2 # kärjestä P1
  35. v1 = P1 .- P4 # kärjestä P1
  36. area1 += 0.5*sqrt(dot(u1,u1)*dot(v1,v1) - dot(u1,v1)^2) #P1 kolmion ala
  37. u2 = P2 .- P3 # kärjestä P3
  38. v2 = P4 .- P3 # kärjestä P3
  39. area2 += 0.5*sqrt(dot(u2,u2)*dot(v2,v2) - dot(u2,v2)^2) #P3 kolmion ala
  40. angleP1 = angle(P2 .- P1,P4 .- P1) # nelikulmion kärkikulmia
  41. angleP2 = angle(P3 .- P2,P1 .- P2)
  42. angleP3 = angle(P4 .- P3,P2 .- P3)
  43. angleP4 = angle(P1 .- P4,P3 .- P4)
  44. alfa = angleP1 # kolmion kulma
  45. beta = angle(P4-P2,P1-P2) # kolmion kulma
  46. gamma = angle(P2-P4,P1-P4) # kolmion kulma
  47. # jos yksikin kolmion kulmista > 90°,kolmio on tylppäkulmainen
  48. if alfa > pi/2 || beta > pi/2 || gamma > pi/2
  49. tylppa += 1
  50. end
  51. if abs(alfa-pi/2) < 1.0e-6 && abs(beta-pi/2)<1.0e-6 && abs(gamma-pi/2)<1.0e-6
  52. acute += 1
  53. end
  54. if abs(alfa-pi/2)<1.0e-6 || abs(beta-pi/2)<1.0e-6 || abs(gamma-pi/2)<1.0e-6
  55. suorakulmainen += 1
  56. end
  57. if abs(angleP1 + angleP2 +angleP3 + angleP4 - 2*pi) <1.0e-6
  58. kovera += 1 # nelikulmio on kovera (concave)
  59. end
  60. a, b, c, d = norm(u1), norm(u2), norm(v2),norm(v1)
  61. lavistaja = norm(P2-P4)
  62. piiri += a+b+c+d # nelikulmion piiri
  63. kolmionpiiri += a+b+lavistaja
  64. jananpituus += norm(u1) #
  65. end
  66. println("koveria (concave) nelikulmioita = ",kovera)
  67. println("koverien osuus =", kovera/n)
  68. println("nelikulmioiden pinta-alan keskiarvo = ",(area1+area2)/n)
  69. println("nelikulmioiden piirien keskiarvo = ",piiri/n)
  70. println("kolmioiden piirien keskiarvo = ",kolmionpiiri/n)
  71. println("kolmioiden pinta-alojen keskiarvo = ",area1/n)
  72. println("tylppäkulmaisten kolmioiden osuus = ",tylppa/n)
  73. println("teräväkulmaisten kolmioiden osuus = ",1-tylppa/n)
  74. println("suorakulmaisia kolmioita(radiaanitarkkuus 1.e-6) = ",suorakulmainen)
  75. println("janojen keskipituus = ",jananpituus/n)
  76. end
  77.  
  78.  
  79.  
  80.  
  81.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement