plane.monkey2 607 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. Namespace std.geom
  2. #rem monkeydoc @hidden
  3. #end
  4. Alias Planef:Plane<Float>
  5. #rem monkeydoc @hidden
  6. #end
  7. Struct Plane<T>
  8. Field n:Vec3<T>
  9. Field d:T
  10. Method New()
  11. End
  12. Method New( n:Vec3<T>,d:T )
  13. Self.n=n
  14. Self.d=d
  15. End
  16. Method New( p:Vec3<T>,n:Vec3<T> )
  17. Self.n=n
  18. Self.d=-n.Dot( p )
  19. End
  20. Method New( v0:Vec3<T>,v1:Vec3<T>,v2:Vec3<T> )
  21. n=(v1-v0).Cross(v2-v0).Normalize()
  22. d=-n.Dot( v0 )
  23. End
  24. Operator-:Plane()
  25. Return New Plane( -n,-d )
  26. End
  27. Method Distance:Double( p:Vec3<T> )
  28. return n.Dot( p )+d
  29. End
  30. Method Nearest:Vec3<T>( p:Vec3<T> )
  31. Return p-n*Distance( p )
  32. End
  33. End