Understanding cos & sin

BlitzMax Forums/BlitzMax Beginners Area/Understanding cos & sin

Matt McFarland(Posted 2006) [#1]
Does anyone know how to make an object move along a horizontal wave, and perhaps another demo on how to move an object on a vertical wave?

I've seen this done before, and although I've managed to do it once or twice I can never remember which args you put to make the object move really far from its "center point" or close. I would love if someone could post something on this subject as its great help to us newbie developers! :D


klepto2(Posted 2006) [#2]
Something like this?
Const Vertical:Int = 0
Const Horizontal:Int = 1


Type TMover
	Field Speed:Float
	Field X# , Y#
	Field Angle:Int = 0
	Field Mode:Int
	
	Function Create:TMover(X , Y , Speed:Float,Mode:Int = Horizontal)
		
		Local M:TMover = New TMover
		
		M.X = X
		M.Y = Y
		M.Speed = Speed
		M.Mode = Mode
		
		Return M
		
	End Function
	
	Method Update()
		Select Mode
			Case Horizontal
				Y:+ (Sin(Angle) * Speed)
				X:+ Speed
			Case Vertical
				X:+ (Cos(Angle) * Speed)
				Y:+ Speed
		End Select
		
		If X > GraphicsWidth() Then X:- GraphicsWidth()
		If X < 0 Then Y:+ GraphicsHeight() 
		If Y > GraphicsHeight() Then Y:- GraphicsHeight()
		If Y < 0 Then Y:+GraphicsHeight()

		
		Angle:+ 1
		If Angle > 359 Then Angle = 0	
		Draw()
	End Method
	
	Method Draw()
		DrawOval X , Y , 15 , 15
	End Method
End Type

Graphics 800 , 600 , 0 , 60

Local M:TMover = TMover.Create(400 , 300 , 0.8 , Vertical)
Local M2:TMover = TMover.Create(400 , 300 , 1.6 , Horizontal)


While Not KeyHit(Key_Escape)
	Cls
	SetColor 0,255,0
	M.Update()
	SetColor 255,0,0
	M2.Update()
	Flip
Wend




Scott Shaver(Posted 2006) [#3]
SuperStrict 

Global image:TImage = LoadImage("mouseloc.png")

'----------------------------------------------------------------------------------------
Global screenWidth:Int =800
Global screenHeight:Int =600
Graphics screenWidth,screenHeight',32',60

Global xpos:Double = 0
Global ypos:Double = 30
Global waveLength:Double = 10 ' bigger number smaller length
Global waveHeight:Double = 40.0 ' bigger number taller waves

' move horizontally
While Not KeyHit(KEY_ESCAPE)
	Cls
	xpos:+1
	ypos = Sin(xpos*waveLength)*waveHeight
	DrawImage image,xpos,ypos
	Flip
Wend

xpos = 100
ypos = 0

' move vertically
While Not KeyHit(KEY_ESCAPE)
	Cls
	ypos:+1
	xpos = Cos(ypos*waveLength)*waveHeight
	DrawImage image,xpos,ypos
	Flip
Wend