【问题标题】:Making a circle orbit in a circular path around another circle in C++在 C++ 中围绕另一个圆的圆形路径中制作一个圆形轨道
【发布时间】:2014-11-23 11:49:58
【问题描述】:

我正在学习,我是 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θ

但结果是外圈最终螺旋下降到内圈的中心。我怎样才能让它保持在它的循环路径上?我希望我已经很好地解释了我的问题。我试图用谷歌搜索这个问题的解决方案,但它只给了我上面已经尝试过的公式。如果你们能帮助我并告诉我我的代码做错了什么,我将非常感谢你们。谢谢。

【问题讨论】:

    标签: c++ graphics rotation 2d translation


    【解决方案1】:

    经典的错误是在第二次赋值中使用了修改后的x,这样你其实是

    计算yr + (x' - xr) sinθ – (y - yr) cosθ

    (不显示您正在使用的实际代码不是一个好主意。)

    【讨论】:

    • 编辑了帖子。对不起。
    • 冒着听起来很愚蠢的风险,我该如何解决?代码中是否还有其他错误?
    • 不要使用 x',使用 x(副本)。
    • 这个怎么样? x = CC_x + (c_x - CC_x) * cos(角度) - (c_y - CC_y) * sin(角度); y = CC_y + (c_x - CC_x) * sin(角度) - (c_y - CC_y) * cos(角度); c_x=x; c_y=y;
    • 它没有。同样的螺旋问题。 //外圆 int c_x,c_y;浮动角度;角度=0.0; c_x=CC_x+120; c_y=CC_y; while(1){ x = CC_x + (c_x - CC_x) * cos(角度) - (c_y - CC_y) * sin(角度); y = CC_y + (c_x - CC_x) * sin(角度) - (c_y - CC_y) * cos(角度); c_x=x; c_y=y; //重绘圆的闪烁效果... angle++ }
    猜你喜欢
    • 1970-01-01
    • 2019-09-04
    • 1970-01-01
    • 2021-06-24
    • 2013-09-20
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    • 2015-02-25
    相关资源
    最近更新 更多