I am creating a PVector
using the .fromAngle()
method. I use an variable that increments from 0 to TWO_PI. When I access the heading()
of the vector, I get a range from 0 → PI → -PI → 0. Is this expected behaviour? I’m trying to map the angle of the vector to another range and am struggling to find a way to do this.
Am I being stupid? Is there another way to access the angle of the vector that isn’t .heading()
?
2 Likes
Hello @gomako,
PVector.heading() uses atan2() under the hood:
https://github.com/benfry/processing4/blob/main/core/src/processing/core/PVector.java#L849
atan2() Processing reference:
atan2() Wikipedia reference:
Angles are clockwise in Processing:
A quick demo to map values returned from atan2() to 0 to TAU radians (0 to 360 degrees):
PVector v;
void setup()
{
size(500, 500);
}
void draw()
{
background(255);
translate(width/2, height/2);
v = new PVector(mouseX-width/2, mouseY-height/2);
line(0, 0, v.x, v.y);
float h = v.heading();
println(h, degrees(h));
if (h<0) h+= TAU; // This does the mapping! TAU = TWO_PI
println(h, degrees(h));
println();
String s = str(int(degrees(h)))+ "°"; // Mofify if you want decimal places
fill(255, 0, 0);
textSize(24);
text(s, v.x, v.y);
}
There is also a map() function if you want to use that:
:)
2 Likes
Ah thank you so much for the detailed answer, that is just what I needed. I couldn’t quite figure out how to make the -PI to -1 bit into PI+1 to TWO_PI and the following is what did it.
Thanks again for the references too, I appreciate it.
2 Likes