vec3.monkey2 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. Namespace std.geom
  2. #rem monkeydoc @hidden
  3. #end
  4. Alias Vec3f:Vec3<Float>
  5. #rem monkeydoc @hidden
  6. #end
  7. Struct Vec3<T>
  8. Field x:T
  9. Field y:T
  10. Field z:T
  11. Method New()
  12. End
  13. Method New( t:T )
  14. x=t;y=t;z=t
  15. End
  16. Method New( x:T,y:T,z:T )
  17. Self.x=x;Self.y=y;Self.z=z
  18. End
  19. Method New( v:Vec2<T>,z:T )
  20. Self.x=v.x;Self.y=v.y;Self.z=z
  21. End
  22. Method To<C>:Vec3<C>()
  23. Return New Vec3<C>( x,y,z )
  24. End
  25. Method To:String()
  26. Return "Vec3("+x+","+y+","+z+")"
  27. End
  28. Property X:T()
  29. Return x
  30. Setter( x:T )
  31. Self.x=x
  32. End
  33. Property Y:T()
  34. Return y
  35. Setter( y:T )
  36. Self.y=y
  37. End
  38. Property Z:T()
  39. Return z
  40. Setter( z:T )
  41. Self.z=z
  42. End
  43. Property XY:Vec2<T>()
  44. Return New Vec2<T>( x,y )
  45. Setter( xy:Vec2<T> )
  46. x=xy.x;y=xy.y
  47. End
  48. Operator-:Vec3()
  49. Return New Vec3( -x,-y,-z )
  50. End
  51. Operator*:Vec3( v:Vec3 )
  52. Return New Vec3( x*v.x,y*v.y,z*v.z )
  53. End
  54. Operator/:Vec3( v:Vec3 )
  55. Return New Vec3( x/v.x,y/v.y,z/v.z )
  56. End
  57. Operator+:Vec3( v:Vec3 )
  58. Return New Vec3( x+v.x,y+v.y,z+v.z )
  59. End
  60. Operator-:Vec3( v:Vec3 )
  61. Return New Vec3( x-v.x,y-v.y,z-v.z )
  62. End
  63. Operator*:Vec3( s:Double )
  64. Return New Vec3( x*s,y*s,z*s )
  65. End
  66. Operator/:Vec3( s:Double )
  67. Return New Vec3( x/s,y/s,z/s )
  68. End
  69. Operator+:Vec3( s:T )
  70. Return New Vec3( x+s,y+s,z+s )
  71. End
  72. Operator-:Vec3( s:T )
  73. Return New Vec3( x-s,y-s,z-s )
  74. End
  75. Property Pitch:Double()
  76. return -ATan2( y,Sqrt( x*x+z*z ) )
  77. End
  78. Property Yaw:Double()
  79. return -ATan2( x,z )
  80. End
  81. Property Length:Double()
  82. Return Sqrt( x*x+y*y+z*z )
  83. End
  84. Method Dot:Double( v:Vec3 )
  85. Return x*v.x+y*v.y+z*v.z
  86. End
  87. Method Cross:Vec3( v:Vec3 )
  88. Return New Vec3( y*v.z-z*v.y,z*v.x-x*v.z,x*v.y-y*v.x )
  89. End
  90. Method Normalize:Vec3()
  91. Return Self/Length
  92. End
  93. Method Blend:Vec3( v:Vec3,alpha:Double )
  94. Return New Vec3( (v.x-x)*alpha+x,(v.y-y)*alpha+y,(v.z-z)*alpha+z )
  95. End
  96. End