Yes I'm sure that this graph you posted from Wikipedia is extremely relevant.
((y2#-y1#)/(x2#-x1#))
looks like it needs rotating by 180 degrees along the z axis, so maybe if you added something to the formula to accommodate that.
Is this something you've coded yourself or does it run off an existing engine?
acc#=0.5ts#=6.0maxr#=10.0f#=0.0do r#=(f#/ts#)*maxr# if rightkey() then yrotate object 1,wrapvalue(object angle y(1)+r#) if leftkey() then yrotate object 1,wrapvalue(object angle y(1)-r#) if upkey() then f#=f#+acc# if downkey() then f#=f#-acc# move object 1,f# f#=curvevalue(0.0,f#,ts#) x#=object position x(1) y#=object position y(1) z#=object position z(1) col=intersectObjectDBC(0,0,x#,255.0,z#,x#,0.0,z#,1) position object 1,x#,getStaticCollisionY(),z# rotate object 1,angle#(y#,getCollisionNormalY(),z#,getCollisionNormalZ()),object angle y(1),angle#(x#,getCollisionNormalX(),y#,getCollisionNormalY()) set camera to follow x#,y#,z#,object angle y(1),object size z(1)*2.0,y#+(object size y(1)*2.0),5,0 point camera x#,y#,z# position object 65535,camera position x(),camera position y(),camera position z() if escapekey() then pause=1 if pause center text 400,300,"QUIT TO WINDOWS? Y/N" if lower$(inkey$())="y" then end if lower$(inkey$())="n" then pause=0 endif syncloopfunction angle#(x1#,x2#,y1#,y2#) result#=wrapvalue(atan(abs((y2#-y1#)/failsafe#(x2#-x1#))))endfunction result#function failsafe#(result#) if result#=0 then result#=.0000000000000000000000000000000000000000001endfunction result#
well who needs school for math when you can learn from instead!!!!!!!!!!!!!!!!!