Constrain Within Circle?

Malte Brill revolution at derbrill.de
Sat Nov 5 03:44:17 EST 2005


Hi Scott,

I´m not sharing too much of a secret here, so hereWeGo . :-)
(The param checking might be unneccesary for you. I just copied and 
pasted from ArcadeEngine)

Hope that helps,

Malte

on mouseUp
   set the uAllowDrag of me to false
end mouseUp

on mouseRelease
   mouseUp
end mouseRelease

on mouseDown
   set the uAllowDrag of me to true
end mouseDown

on mouseMove
   if not the uAllowDrag of me then exit mouseMove
   put 100 into x
   --xlocation of circlecenter
   put 100 into y
   --ylocation of circlecenter
   put 80 into myRadius
   --radius of the circle
   set the loc of the target to pointOnCircle(x,y,findangle(x,y, the 
mouseLoc)-90,myRadius)
end mouseMove


Function findAngle
   repeat with i=1 to paramcount()
     if i<paramcount() then
       put param(i)&"," after theValue
     else
       put param(i) after theValue
     end if
   end repeat

   repeat with i=1 to the number of items of theValue
     if item i of theValue is not a number then
       return "Error: All Parameters must be numbers!"
       exit findAngle
       exit repeat
     end if
   end repeat
   put item 1 of theValue into x1
   put item 2 of theValue into y1
   put item 3 of theValue into x2
   put item 4 of theValue into y2
   put abs(x1-x2) into oppositeLeg
   put abs(y1-y2) into adjacentLeg
   if adjacentLeg<>0 then
     put atan(oppositeleg/adjacentLeg) into alpha
     put alpha*180/pi into alpha
   else
     put 90 into alpha
   end if
   switch
   case x1<=x2 and y1>=y2
     put alpha into foundAngle
     break
   case x1<=x2 and y1<=y2
     put 180-alpha into foundAngle
     break
   case x1>=x2 and y1<=y2
     put 180+alpha into foundAngle
     break
   case x1>=x2 and y1>=y2
     put 360-alpha into foundAngle
     break
   end switch
   return round(foundangle)
end findAngle

function pointOnCircle

   repeat with i=1 to paramcount()
     if i<paramcount() then
       put param(i)&"," after theValue
     else
       put param(i) after theValue
     end if
   end repeat

   repeat with i=1 to the number of items of theValue
     if item i of theValue is not a number then
       return "Error: All Parameters must be numbers!"
       exit pointOnCircle
       exit repeat
     end if
   end repeat

   put item 1 of theValue into centerX
   put item 2 of theValue into centerY
   put item 3 of theValue into isAngle
   put item 4 of theValue into isRadius
   put centerX+cos(isAngle*pi/180)*isRadius into isNewX
   put centerY+sin(isAngle*pi/180)*isRadius into isNewY
   return round(isNewX),round(isNewY)

end pointOnCircle

----
ArcadeEngine - prepare to WOW your audience within minutes
http://www.runrev.com/section/revselect/arcadeengine
http://www.derbrill.com/arcadeengine/forum 


More information about the use-livecode mailing list