以下代码使用简单的缓动函数将线旋转到鼠标位置,但问题是 atan2() 方法从 -PI 到 PI 工作,当角度达到任一限制时,线会向后旋转,我可以使它从 0 旋转到 TWO_PI 但没有什么不同,因为线将向后旋转直到它到达 targetAngle,如果我不使用缓动计算工作正常,因为从 -PI 到 PI 的跳跃是不明显的,所以我该如何缓和我的轮换并避免这个问题?
float angle = 0;
float targetAngle = 0;
float easing = 0.1;
void setup() {
size(320, 240);
}
void draw() {
background(200);
noFill();
stroke( 0 );
// get the angle from the center to the mouse position
angle = atan2( mouseY - height/2, mouseX - width/2 );
// check and adjust angle to go from 0 to TWO_PI
if ( angle < 0 ) angle = TWO_PI + angle;
// ease rotation
targetAngle += (angle - targetAngle) * easing;
pushMatrix();
translate( width/2, height/2 );
rotate( targetAngle );
line( 0, 0, 60, 0 );
popMatrix();
}
谢谢