Where is the Intersect between 2 lines
Monkey Forums/Monkey Code/Where is the Intersect between 2 lines
| ||
Strict
Import mojo
Class intersect Extends App
Method OnUpdate:Int()
Return 0
End Method
Method OnRender:Int()
Cls(0,0,0)
Local line1x1:Int=20
Local line1y1:Int=20
Local line1x2:Int=90
Local line1y2:Int=20
Local line2x1:Int=30
Local line2y1:Int=15
Local line2x2:Int=30
Local line2y2:Int=90
DrawLine(line1x1,line1y1,line1x2,line1y2)
DrawLine(line2x1,line2y1,line2x2,line2y2)
Local A1:Float = line1y2-line1y1
Local B1:Float = line1x1-line1x2
Local C1:Float = A1*line1x1+B1*line1y1
Local A2:Float = line2y2-line2y1
Local B2:Float = line2x1-line2x2
Local C2:Float = A2*line2x1+B2*line2y1
Local delta:Float = A1*B2 - A2*B1
If(delta = 0)
Print("Lines are parallel");
Endif
Local x:Float = (B2*C1 - B1*C2)/delta
Local y:Float = (A1*C2 - A2*C1)/delta
SetColor (255,0,0)
DrawOval(x-1,y-1,2,2)
SetColor(255,255,255)
Return 0
End Method
Method OnCreate:Int()
SetUpdateRate(30)
Return 0
End Method
End Class
Function Main:Int()
New intersect
Return 0
End Function |
| ||
Here's another one i ported from blitzmax:
Field Intersection_X:Float
Field Intersection_Y:Float
Method Lines_Intersect:Int(Ax:Float, Ay:Float, Bx:Float, By:Float, Cx:Float, Cy:Float, Dx:Float, Dy:Float) 'finds the line intersections...
Local DymCy:Float = Dy - Cy
Local DxmCx:Float = Dx - Cx
Local Rn:Float = (Ay-Cy)*(DxmCx) - (Ax-Cx)*(DymCy)
Local Rd:Float = (Bx-Ax)*(DymCy) - (By-Ay)*(DxmCx)
Local Intersection_AB:Float
Local Intersection_CD:Float
If Rd = 0
' Lines are parralel.
' If Rn# is also 0 Then lines are coincident. All points intersect.
' Otherwise, there is no intersection point.
Return False
Else
' The lines intersect at some point. Calculate the intersection point.
Local Sn:Float = (Ay-Cy)*(Bx-Ax) - (Ax-Cx)*(By-Ay)
Intersection_AB = Rn / Rd
Intersection_CD = Sn / Rd
Intersection_X = Ax + Intersection_AB*(Bx-Ax)
Intersection_Y = Ay + Intersection_AB*(By-Ay)
Endif
If Intersection_AB>0 And Intersection_AB<1 And Intersection_CD>0 And Intersection_CD<1
Return True
Else
Return False
Endif
End Method
|