vec2.monkey2 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. Namespace std.geom
  2. Alias Vec2f:Vec2<Float>
  3. Struct Vec2<T>
  4. Field x:T
  5. Field y:T
  6. Method New()
  7. End
  8. ' Method New( v:Vec2 )
  9. ' x=v.x;y=v.y
  10. ' End
  11. Method New( x:T,y:T )
  12. Self.x=x
  13. Self.y=y
  14. End
  15. Property X:T()
  16. Return x
  17. Setter( x:T )
  18. Self.x=x
  19. End
  20. Property Y:T()
  21. Return y
  22. Setter( y:T )
  23. Self.y=y
  24. End
  25. Operator-:Vec2()
  26. Return New Vec2( -x,-y )
  27. End
  28. Operator*:Vec2( v:Vec2 )
  29. Return New Vec2( x*v.x,y*v.y )
  30. End
  31. Operator/:Vec2( v:Vec2 )
  32. Return New Vec2( x/v.x,y/v.y )
  33. End
  34. Operator+:Vec2( v:Vec2 )
  35. Return New Vec2( x+v.x,y+v.y )
  36. End
  37. Operator-:Vec2( v:Vec2 )
  38. Return New Vec2( x-v.x,y-v.y )
  39. End
  40. Operator*:Vec2( s:Double )
  41. Return New Vec2( x*s,y*s )
  42. End
  43. Operator/:Vec2( s:Double )
  44. Return New Vec2( x/s,y/s )
  45. End
  46. Operator+:Vec2( s:T )
  47. Return New Vec2( x+s,y+s )
  48. End
  49. Operator-:Vec2( s:T )
  50. Return New Vec2( x-s,y-s )
  51. End
  52. Property Length:Double()
  53. Return Sqrt( x*x+y*y )
  54. End
  55. Method Dot:Double( v:Vec2 )
  56. Return x*v.x+y*v.y
  57. End
  58. Method Normalize:Vec2()
  59. Return Self/Length
  60. End
  61. Method Blend:Vec2( v:Vec2,alpha:Double )
  62. Return New Vec2( (v.x-x)*alpha+x,(v.y-y)*alpha+y )
  63. End
  64. Method ToString:String()
  65. Return "Vec2("+x+","+y+")"
  66. End
  67. End