vec4.monkey2 1.7 KB

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