line.monkey2 701 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. Namespace std.geom
  2. #rem monkeydoc @hidden
  3. #end
  4. Alias Linef:Line<Float>
  5. #rem monkeydoc @hidden
  6. #end
  7. Struct Line<T>
  8. Field o:Vec3<T>
  9. Field d:Vec3<T>
  10. Method New()
  11. End
  12. Method New( o:Vec3<T>,d:Vec3<T> )
  13. Self.o=o;Self.d=d
  14. End
  15. Operator To:String()
  16. Return "Line("+o+","+d+")"
  17. End
  18. Operator-:Line()
  19. Return New Line( o,-d )
  20. End
  21. Operator+:Line( v:Vec3<T> )
  22. Return New Line( o+v,d )
  23. End
  24. Operator-:Line( v:Vec3<T> )
  25. Return New Line( o-v,d )
  26. End
  27. Operator*:Vec3<T>( time:Double )
  28. Return o+d*time
  29. End
  30. Method TNearest:Float( p:Vec3<T> )
  31. Return ( d.Dot( p-o )/d.Dot( d ) )
  32. End
  33. Method Nearest:Vec3<T>( p:Vec3<T> )
  34. Return o+d*( d.Dot( p-o )/d.Dot( d ) )
  35. End
  36. End