sin and cos

BlitzPlus Forums/BlitzPlus Programming/sin and cos

superjossy(Posted 2007) [#1]
can someone give me a bit of coe that will make a car turn please


thanks


H&K(Posted 2007) [#2]
If RoadLeft= True
    Dir=(Dir-1) Mod 360
Elseif RoadRight = True
    Dir=(Dir+1) Mod 360
endif



CS_TBL(Posted 2007) [#3]
(-1 mod 360) = -1

What you meant is:

If RoadLeft= True
    Dir=(Dir+359) Mod 360
ElseIf RoadRight = True
    Dir=(Dir+1) Mod 360
EndIf


Tho I'm not sure about the status of superjossy's skills, and whether he's one of the many who's driving too fast in his first drivinglessons.. :P


H&K(Posted 2007) [#4]
What you meant is:
No I meant mine, for ease of understanding. I admit that yours would be an acceptable alternative, (Thou not better) solution


CS_TBL(Posted 2007) [#5]
hm.. I guess the choice is whether one wants the angle to stay within the 0..359 range or within the -359..359 range. My alternative is based on the 0..359 range..

ohwell..


H&K(Posted 2007) [#6]
Humm.
For me, the choice is if your normal system of use has Dir:+1 implemented as a single command, or if you have memory restrictions and have lookup tables for the subsequent sin/cos equations.


b32(Posted 2007) [#7]
I wrote this as an example. I'm not sure if it is what you ment. You can use the cursorkeys to drive the block around.



CS_TBL(Posted 2007) [#8]
;left/right
		If KeyDown(203) Then carangle = carangle - 2
		If KeyDown(205) Then carangle = carangle + 2
		If carangle < 0 Then carangle = 359
		If carangle > 359 Then carangle = 0


Are you sure? carangle -2 could be like -2. The correct value should then be 358. +2 and +358, and one single modulo.. :P


Réno(Posted 2007) [#9]
Thanks b32 !!

It is very usefull for me too :)))

But I don't understand CS_TBL, what would you change in the b32 code ?


CS_TBL(Posted 2007) [#10]
Well, the issue is this:

He changes angles in steps of 2, rite?
So, possible values are 8 6 4 2 0 -2 -4 -6 -8.

Next he clips them so that <0 would becomes 359 and >359 would become 0. And there's the problem.

A value of -2 becomes 359. The distance from -2 to 0 = '2', the distance from 359 to 0 = '1', so there's where angle errors come from.

What I would do:

option 1:

		If carangle < 0 Then carangle = 358
		If carangle > 358 Then carangle = 0


But his option is hardcoded for angle-rotations of 2, not
exactly elegant.


option 2: have a 'speed' variable somewhere, with the value '2'.

If KeyDown(203) Then carangle = (carangle + (360-speed)) Mod 360
If KeyDown(205) Then carangle = (carangle + speed) Mod 360


In this solution you can change the speed whenever you want.

'speed' could be any name tho, such as 'angledelta'..


Réno(Posted 2007) [#11]
Thanks a lot ;)


b32(Posted 2007) [#12]
CB, you are right offcourse. :)
Ow .. and, Reno, if you want to rotate masked images, you should use "TFormFilter 0", else the images are smoothened and the transparent background gets blended with the foreground.
And I don't know if you're familiar with the LoadAnimImage command ? With LoadAnimImage, you could use one single (big) image that contains all the prerotated frames. It's much easier than loading 180 separate images.


Réno(Posted 2007) [#13]
Thanks, but I knew that already ;)