我正在学习,我是C ++编程的初学者,目前我们正在学习翻译,旋转和缩放。我们已经给出了一个代码,该代码显示围绕另一个内圈的圆形轨道中的外圆。我们需要使这个外圈围绕内圈旋转。这是给定的代码:
{
int gd,gm;
detectgraph(&gd,&gm);
initgraph(&gd,&gm,"c:\\tc\\bgi");
setcolor(WHITE);
rectangle(10,60,400,400);
//Central inner circle
int CC_x,CC_y;
CC_x=10+390/2;
CC_y=60+340/2;
outtextxy(CC_x, CC_y, "Central Circle");
circle(CC_x,CC_y,30);
//orbit
circle(CC_x,CC_y,120);
//Outer circle
int c_x,c_y;
double angle;
angle=0;
c_x=CC_x+120;
c_y=CC_y;
while(1){
setcolor(WHITE);
outtextxy(c_x, c_y, "Outer Circle");
circle(c_x,c_y,10);
// Blinking effect
circle(CC_x,CC_y,120);
delay(100);
setcolor(BLACK);
outtextxy(c_x, c_y, "Outer Circle");
circle(c_x,c_y,10);
delay(90);
// modified code
c_x = CC_x + (c_x - CC_x) cos(angle) – (c_y - CC_y) sin(angle)
c_y = CC_y + (c_x - CC_x) sin(angle) – (c_y - CC_y) cos(angle)
angle++
// end of modified code
}
getch();
}
我通过声明double angle
并将其初始化为0来修改它。然后我在循环中使用了以下公式。
x′ = xr + (x - xr) cosθ – (y - yr) sinθ
y′ = yr + (x - xr) sinθ – (y - yr) cosθ
但结果是外圈最终螺旋式下降到内圈的中心。我怎样才能让它留在圆形路径上?我希望我已经很好地解释了我的问题。我试图谷歌解决这个问题,但它只给了我上面的公式,我已经尝试过。如果你们能帮助我并告诉我我的代码出错了,我会非常感谢你。感谢。
答案 0 :(得分:2)
经典错误是在第二个赋值中使用修改后的x
,因此实际上是
计算yr + (x' - xr) sinθ – (y - yr) cosθ
(未显示您使用的实际代码不是一个好主意。)