[PD] Re: multi-speaker panning.. problamtic maths

Frank Barknecht fbar at footils.org
Mon Oct 23 21:34:37 CEST 2006


Hallo,
alexandre r. decoupigny hat gesagt: // alexandre r. decoupigny wrote:

> sorry abou that.. dont have any number example in the top of my head..
> what i know is that  [joystick] outputs numbers between zero and one on two
> outlets (x axis and y axis). now i wonder how to put these numbers together
> with a horizontal slider that represents a circle. this horizontal
> slider outputs
> values from 0-360 each representing a point on a circle.
> i dont know if i made my problem any clearer..

Lets first summarize where you are already: 

You could think of the Joystick as drawing a circle. If you scale both
outlets of the joystick to go from -1 to 1 you would basically have a
unit circle described by the Joystick's movement. Scaling from (0,1) to
(-1,1) is easily made with x*2-1 rsp. y*2-1

Now you can get the tangent of the angle in a joystick's position by
just divinging opposite and adjacent sides of the triangle made by the
angle, or in joystick coordinates this is: y/x=tan(phi) ==>
phi=atan(y/x)

In Pd you use [atan2] for this and according to the help-patch this
works like this: 

"The arc tangent takes two forms. The atan2 version takes an (x, y)
pair and gives you an output between -pi and pi."

Which is an angle in radians!

So that's where you are: You want to map a range (-pi,pi) to a range
(0,360). It's actually easy as well: Assume z=atan2(x,y), range
(-pi,pi)

z/pi will be in a range (-1,1) then.

180*z/pi will be in (-180,180) (this is what rad2deg.pd from zexy (?)
gives you.

180 + 180*z/pi will be in (0,360)

Done.

Now what is left is how to get PI? I just use [expr 4*atan(1)]
normally. I have it in an abstraction called [M_PI].

Ciao
-- 
 Frank Barknecht                 _ ______footils.org_ __goto10.org__




More information about the Pd-list mailing list