Relative angle between 2 vectors

Blitz3D Forums/Blitz3D Programming/Relative angle between 2 vectors

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.

And this ?
Graphics 800, 600, 0, 2
SetBuffer BackBuffer()

ang1# = Rand(360)
ang2# = Rand(360)
ang2r# = ang2#

Repeat
	
	;draw angles
	Cls
	Origin 400, 300

	;red=angle1	
	Color 255, 0, 0
	x1# = Cos(ang1) * 120
	y1# = Sin(ang1) * 120
	Line 0, 0, x1, y1
	Text x1 * 1.2, y1 * 1.2, ang1, 1, 1
	
	;aqua=angle2
	Color 0, 255, 255
	x2# = Cos(ang2) * 120
	y2# = Sin(ang2) * 120
	Line 0, 0, x2, y2
	Text x2 * 1.2, y2 * 1.2, ang2, 1, 1
	
	Origin 0, 0


	;calculate angles from coordinates
	Color 255, 255, 255
	angle1# = (ATan2(y1, x1) + 360) Mod 360
	angle2# = (ATan2(y2, x2) + 360) Mod 360
	
	;show calculated angles
	Text 0, 60, "angle1= " + angle1
	Text 0, 80, "angle2= " + angle2

	;calculate differences
	angdif1# = (angle2 - angle1)
	angdif2# = (angle2 + 360 - angle1)
	angdif3# = (angle2 - 360 - angle1)

	;determine smallest difference	
	If (Abs(angdif1) < Abs(angdif2)) And (Abs(angdif1) < Abs(angdif3)) Then angdif# = angdif1#
	If (Abs(angdif2) < Abs(angdif1)) And (Abs(angdif2) < Abs(angdif3)) Then angdif# = angdif2#
	If (Abs(angdif3) < Abs(angdif2)) And (Abs(angdif3) < Abs(angdif1)) Then angdif# = angdif3#
	
	;show difference
	Text 0, 100, "difference= " + angdif#
	
	;show usage
	Text 0, 0, "usage:"
	Text 0, 20, "use cursor keys to move angle1, use space to apply difference"

	;cursor keys = move angle 1
	If KeyDown(203) Then ang1 = ang1 - 1
	If KeyDown(205) Then ang1 = ang1 + 1
	
	;automove with space
	If KeyHit(57) Then
		ang2r# = angle2 - angdif
	End If	
	If ang2r <> ang2 Then ang2 = ang2 + Sgn(ang2r - ang2)	
	


	Flip

Until KeyHit(1)
WaitKey()

End