[Tutorial] Rotating Pictures Based on Mouse Position
Author |
Message |
wierdo1111
|
Posted: Sun Mar 24, 2013 12:26 am Post subject: [Tutorial] Rotating Pictures Based on Mouse Position |
|
|
This will cover how to rotate pictures based on it's position relative to the mouse.
Before I start somethings to note; I have included the picture i used as an attachment, your picture must have some padding or some of it may get clipped
during the rotation unless your picture is just a circle like mine, and to get rid of the white border you can just use picMerge and Pic.SetTransparentColor.
Have your basic variables You can assume what they are, and specifying what image to use.
code: | var mx, my, b : int
var px : int := maxx div 2
var py : int := maxy div 2
var ang : real := 0
var chars : array char of boolean
var pic, pic1 : int
pic := Pic.FileNew ("circlep.gif")
View.Set ("offscreenonly")
|
Here is some code that will let you move your picture around, I'm not going to talk about how it works.
code: | loop
cls
drawfillbox (0, 0, maxx, maxy, blue)
mousewhere (mx, my, b)
Input.KeyDown (chars)
%%%%%%%%%%%%%%%%%%%%%% left
if chars ('a') or chars (KEY_LEFT_ARROW) then
if px > 60 then
px := px - 4
end if
end if
%%%%%%%%%%%%%%%%%%%%% right
if chars ('d') or chars (KEY_RIGHT_ARROW) then
if px < maxx - 90 then
px := px + 4
end if
end if
%%%%%%%%%%%%%%%%%%%%%%% up
if chars ('w') or chars (KEY_UP_ARROW) then
if py < maxy - 90 then
py := py + 4
end if
end if
%%%%%%%%%%%%%%%%%%%%%%%% down
if chars ('s') or chars (KEY_DOWN_ARROW) then
if py > 60 then
py := py - 4
end if
end if |
Now whats happening is that we are getting an x and a y value based off the position of the center of the image relative to the mouse position.
Based on the combination of these x and y values being positive or negative we can determine the quadrant the mouse is in.
Using this info we can use sohcahtoa and related angles to find the theta (angle), so RA = arctand (|opp|/|adj|) or so RA = arctand (|y|/|x|),
following that up with, then theta can be found using some related angle knowledge.
code: | if px - mx < 0 and py - my < 0 then %checks quadrant 1
ang := arctand (abs (py - my) / abs (px - mx))
elsif px - mx > 0 and py - my < 0 then % checks qudrant 2
ang := 180 - arctand (abs (py - my) / abs (px - mx))
elsif px - mx > 0 and py - my > 0 then % checks qudrant 3
ang := 180 + arctand (abs (py - my) / abs (px - mx))
elsif px - mx < 0 and py - my > 0 then % checks qudrant 4
ang := 360 - arctand (abs (py - my) / abs (px - mx))
end if |
Now all that's left is to make pic1 become pic rotated by the angle we got from before, draw it, then free pic1 or Turing will eventually crash.
The parameters for Pic.Rotate are (variable of pic to rotate, angle (must be integer), pivot point or point of rotation in pic)
code: | pic1 := Pic.Rotate (pic, (round (ang)), 50, 50)
Pic.Draw (pic1, px - 50, py - 50, picCopy)
Pic.Free (pic1)
View.Update
delay (15)
end loop
|
Description: |
|
Filesize: |
1.06 KB |
Viewed: |
10144 Time(s) |
|
|
|
|
|
|
|
Sponsor Sponsor
|
|
|
|
|