在C++中使一个圆在绕另一个圆的圆形路径中运行
Making a circle orbit in a circular path around another circle in C++
我正在学习,我是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θ
但结果是外圈最终螺旋下降到内圈的中心。如何让它保持在循环路径上?我希望我已经很好地解释了我的问题。我试图谷歌这个问题的解决方案,但它只给了我已经尝试过的上述公式。如果你们能帮助我,告诉我我的代码做错了什么,我将非常感谢你们。谢谢。
经典的错误是在第二个赋值中使用修改后的x
,所以你实际上是
计算yr + (x' - xr) sinθ – (y - yr) cosθ
(不显示您正在使用的实际代码不是一个好主意。
相关文章:
- 运行同一解决方案的另一个项目的项目
- C++线程:如何在一个线程仍在运行时阻止另一个线程执行 (Win32)
- 使用另一个程序调用正在运行的 C++ 程序中的函数
- System Verilog DPI - 在 cpp 中运行并行线程,在 SV 中运行另一个并行线程
- 使用 (cin) 用户输入将其粘贴到 std::system 中,并在另一个终端中运行带有输入的命令
- 如何在 qt 中从另一个线程运行 qt并发时关闭程序
- 助推.如何在另一个测试单元中运行一个测试组件
- 给定的两个代码有什么区别.一个在 ideone 上运行时超出时间限制,另一个工作正常
- C++ 减慢另一个正在运行的进程
- 在另一个 QThread 上运行成员方法时,无法将事件发送到其他线程拥有的对象
- 字符* 复制到另一个字符* 运行时错误
- C++ 菜单代码 - 运行另一个类
- 我无法使用 c++(代码块)中的 fstream 将文件内容复制到另一个。如何运行该文件?
- 运行EXE形成另一个EXE并传递参数
- 只有当输入文件确实包含要读取的另一个值时,我才能让getline(variable,n)运行
- 使用 memcpy 将动态数组的内容复制到另一个动态数组上会产生运行时错误
- 将信息从运行函数发送到另一个
- 我试图运行将文本从一个文件复制到另一个文件的程序
- 一个应用程序可以运行另一个应用软件的代码吗
- UNIX中两个进程之间通信的最佳方式:一个运行ruby服务器,另一个运行C++客户端