Lines intersect

Blitz3D Forums/Blitz3D Beginners Area/Lines intersect

The forum is locked. These are the original blitzbasic.com forums, kept so they can still be read. No new topics, replies or edits can be made here. To join in, head over to the Blitz3D+ forums.

That one of sswifts doesn't work, as someone has pointed out in the comments. There are several other one's in the archives that do work, though.

[edit]

Actually, here's the functions I have for line intersection:
;
; Determines whether two lines intersect without calculating the actual point of intersection.
;
; Params:
; x1,y1   - Start coords of first line.
; dx1,dy1 - Delta coords of first line.
; x2,y2   - Start coords of second line.
; dx2,dy2 - Delta coords of second line.
;
; Returns:
; True if the lines intersect, false otherwise.
;
Function lines_intersect(x1#, y1#, dx1#, dy1#,  x2#, y2#, dx2#, dy2#)
	
	u_b# = dy2 * dx1 - dx2 * dy1

	If (u_b <> 0) 

		ua_t# = (dx2 * (y1 - y2)) - (dy2 * (x1 - x2))
		ub_t# = (dx1 * (y1 - y2)) - (dy1 * (x1 - x2))
		
		ua# = ua_t / u_b
		ub# = ub_t / u_b

		If (ua >= 0 And ua =< 1 And ub >= 0 And ub =< 1) Then Return True

	EndIf

	Return False
	
End Function

Global intersect_x#, intersect_y#

;
; Determines whether two lines intersect, or not. If the lines do intersect, the
; point of intersection is returned in the global variables intersect_x and intersect_y.
;
; Params:
; x1,y1   - Start coords of first line.
; dx1,dy1 - Delta coords of first line.
; x2,y2   - Start coords of second line.
; dx2,dy2 - Delta coords of second line.
;
; Returns:
; True if the lines intersect, false otherwise.
;
Function lines_intersect_xy(x1#, y1#, dx1#, dy1#,  x2#, y2#, dx2#, dy2#)
	
	u_b# = dy2 * dx1 - dx2 * dy1

	If (u_b <> 0) 

		ua_t# = (dx2 * (y1 - y2)) - (dy2 * (x1 - x2))
		ub_t# = (dx1 * (y1 - y2)) - (dy1 * (x1 - x2))
		
		ua# = ua_t / u_b
		ub# = ub_t / u_b
	
		If (ua >= 0 And ua <= 1 And ub >= 0 And ub <= 1) 

			intersect_x = x1 + (ua * dx1)
			intersect_y = y1 + (ua * dy1)

			Return True

		EndIf 

	EndIf

	Return False
	
End Function