Mark Sibly 8 jaren geleden
bovenliggende
commit
429d30f1dc
2 gewijzigde bestanden met toevoegingen van 21 en 1 verwijderingen
  1. 4 0
      modules/std/geom/line.monkey2
  2. 17 1
      modules/std/geom/plane.monkey2

+ 4 - 0
modules/std/geom/line.monkey2

@@ -31,6 +31,10 @@ Struct Line<T>
 		Return New Line( o-v,d )
 	End
 	
+	Operator*:Vec3<T>( time:Double )
+		Return o+d*time
+	End
+	
 	Method Nearest:Vec3<T>( p:Vec3<T> )
 		Return o+d*( d.Dot( p-o )/d.Dot( d ) )
 	End

+ 17 - 1
modules/std/geom/plane.monkey2

@@ -16,30 +16,46 @@ Struct Plane<T>
 	End
 	
 	Method New( n:Vec3<T>,d:T )
+		
 		Self.n=n
 		Self.d=d
 	End
 	
 	Method New( p:Vec3<T>,n:Vec3<T> )
+		
 		Self.n=n
 		Self.d=-n.Dot( p )
 	End
 	
 	Method New( v0:Vec3<T>,v1:Vec3<T>,v2:Vec3<T> )
+		
 		n=(v1-v0).Cross(v2-v0).Normalize()
 		d=-n.Dot( v0 )
 	End
 	
 	Operator-:Plane()
+	
 		Return New Plane( -n,-d )
 	End
 	
 	Method Distance:Double( p:Vec3<T> )
-		return n.Dot( p )+d
+		
+		Return n.Dot( p )+d
 	End
 
 	Method Nearest:Vec3<T>( p:Vec3<T> )
+		
 		Return p-n*Distance( p )
 	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