我在Java中用这个http://www.gamekb.com/thumbs_v2/01872/1872657-85play-curve-fever-2.gif编写曲线蛇游戏。如果我想在特定的角度下移动它:
posX += cos(angle);
posY += sin(angle);
当我按向左或向右键时,它会计算旋转的中间位置(左侧和右侧),然后
posX = middleX + sin(angle) * radius;
posY = middleY + cos(angle) * radius;
angle += PI/180;
如果我释放键,它应该计算新的角度:
vectorx = middleX - posX; /*normal vector to tangent*/
vectory = middleY - posY;
k = -(vectorx/vectory); /*directiv of tangent. Should be angle in radians but not
in all cases */
angle = k;
这段代码意味着我计算的矢量[vectorx,vectory]垂直于我的新直线,我正在计算角度,而k
来自直线的参数形式,它是弧度的角度,基本上我是'我试图在我释放箭头的位置与圆相切。
答案 0 :(得分:0)
您没有指定蛇转动时angle
代表什么。使用旧角度计算新角度可能很简单,但这是一种使用切线的方法:
vectorX = posX - middleX;
vectorY = posY - middleY;
tangentX = -vectorY; // flip the signs of these two for
tangentY = +vectorX; // turning in the other direction
angle = atan2(tangentY, tangentX)
另一种方法是将angle
的含义保持为蛇的方向,并忘记圆的中心和切线。当蛇转弯时,1 / radius
会在angle
中相加或相减,并且仍会使用posX += cos(angle), posY += sin(angle)
计算位置。