|
@@ -16,30 +16,46 @@ Struct Plane<T>
|
|
End
|
|
End
|
|
|
|
|
|
Method New( n:Vec3<T>,d:T )
|
|
Method New( n:Vec3<T>,d:T )
|
|
|
|
+
|
|
Self.n=n
|
|
Self.n=n
|
|
Self.d=d
|
|
Self.d=d
|
|
End
|
|
End
|
|
|
|
|
|
Method New( p:Vec3<T>,n:Vec3<T> )
|
|
Method New( p:Vec3<T>,n:Vec3<T> )
|
|
|
|
+
|
|
Self.n=n
|
|
Self.n=n
|
|
Self.d=-n.Dot( p )
|
|
Self.d=-n.Dot( p )
|
|
End
|
|
End
|
|
|
|
|
|
Method New( v0:Vec3<T>,v1:Vec3<T>,v2:Vec3<T> )
|
|
Method New( v0:Vec3<T>,v1:Vec3<T>,v2:Vec3<T> )
|
|
|
|
+
|
|
n=(v1-v0).Cross(v2-v0).Normalize()
|
|
n=(v1-v0).Cross(v2-v0).Normalize()
|
|
d=-n.Dot( v0 )
|
|
d=-n.Dot( v0 )
|
|
End
|
|
End
|
|
|
|
|
|
Operator-:Plane()
|
|
Operator-:Plane()
|
|
|
|
+
|
|
Return New Plane( -n,-d )
|
|
Return New Plane( -n,-d )
|
|
End
|
|
End
|
|
|
|
|
|
Method Distance:Double( p:Vec3<T> )
|
|
Method Distance:Double( p:Vec3<T> )
|
|
- return n.Dot( p )+d
|
|
|
|
|
|
+
|
|
|
|
+ Return n.Dot( p )+d
|
|
End
|
|
End
|
|
|
|
|
|
Method Nearest:Vec3<T>( p:Vec3<T> )
|
|
Method Nearest:Vec3<T>( p:Vec3<T> )
|
|
|
|
+
|
|
Return p-n*Distance( p )
|
|
Return p-n*Distance( p )
|
|
End
|
|
End
|
|
|
|
|
|
|
|
+ Method TIntersect:Double( line:Line<T> )
|
|
|
|
+
|
|
|
|
+ Return -Distance( line.o )/n.Dot( line.d )
|
|
|
|
+ End
|
|
|
|
+
|
|
|
|
+ Method Intersect:Vec3<T>( line:Line<T> )
|
|
|
|
+
|
|
|
|
+ Return line * TIntersect( line )
|
|
|
|
+ End
|
|
|
|
+
|
|
End
|
|
End
|