我有一个跟随鼠标的点,我如何给它一个有限的转动速率?

I have a point that follows the mouse, how would I give it a limited turning rate?

我有一个点跟随我在 Processing 中制作的鼠标。

void move() {
   double slope = (y - mouseY)/(x-mouseX);
    double atanSlope = atan(slope);
    if (slope < 0 && mouseY < y ) {
      x += cos(atanSlope)*(speed);
      y += sin(atanSlope)*(speed);
    } else if (slope >= 0 && mouseY < y) {
      x -= cos(atanSlope)*(speed);
      y -= sin(atanSlope)*(speed);
    } else if (slope > 0) {
      x += cos(atanSlope)*(speed);
      y += sin(atanSlope)*(speed);
    } else {
      x -= cos(atanSlope)*(speed);
      y -= sin(atanSlope)*(speed);
    }
}

我怎样才能改变这个或添加这个来使这个点有一个有限的转弯率?我的想法与这款游戏中的导弹类似。 https://scratch.mit.edu/projects/181364872/ 我不知道我什至会如何开始限制点的转动速度。任何帮助将不胜感激。

(我也标记了 java,因为虽然这是在 Processing 中,但 Processing 几乎 Java 有时带有内置方法。)

一种方法是保持对象的当前方向。然后,您可以使用向量与鼠标的叉积,以及沿对象方向的向量来找到它需要转动以指向鼠标的角度。然后您可以限制转弯并添加更改以获得新方向。

double direction = ?; // the current direction of object in radians
double x = ?;  // the current position
double y = ?;
double maxTurn = ?; // Max turn speed in radians
double speed = ?;
void move() {
   double mvx = mouseX - x;   // get vector to mouse
   double mvy = mouseY - y;
   double dist = Math.sqrt(mvx * mvx + mvy * mvy);  // get length of vector
   if(dist > 0){  // must be a distance from mouse
       mvx /= dist;  // normalize vector
       mvy /= dist; 
       double ovx = Math.cos(direction); // get direction vector
       double ovx = Math.sin(direction);
       double angle = Math.asin(mvx * ovy - mvy * ovx); // get angle between vectors
       if(-mvy * ovy - mvx * ovx < 0){ // is moving away
          angle = Math.sign(angle) * Math.PI - angle;  // correct angle
       }
       // angle in radians is now in the range -PI to PI
       // limit turn angle to maxTurn
       if(angle < 0){
          if(angle < -maxTurn){
             angle = -maxTurn;
          }
       }else{
          if(angle > maxTurn){
             angle = maxTurn;
          }
       }
       direction += angle; // turn 
       // move along new direction
       x += Math.cos(direction) * speed;
       y += Math.sin(direction) * speed;
    }
}