gpt4 book ai didi

c++ - 在 C++ 中使用 y = mx + b 公式移动圆

转载 作者:行者123 更新时间:2023-11-28 03:44:57 25 4
gpt4 key购买 nike

所以我正在编写一个通过一条线移动圆的程序,我需要线像素的坐标,所以我使用 y = mx + b 公式,但是 的坐标y 如果我使用 x++ 不会改变,谁能告诉我我做错了什么?

这是我的代码的一部分,我在其中使用了这个公式:

void draw_picture(Canvas & canvas) {

srand((unsigned)time(0));

PairXY a(200,400);
PairXY b(300,100);
int o=20;
Line l(a,b);
double x=0;
Circle cir(a,o);
draw_circle(cir, canvas);
draw_line(l, canvas);

x=a.x;
for (int i=20; i>0; i--){

x++;

///////

double m = (b.y-a.y)/(b.x-a.x);
double b1 = a.y - m * x;
double y = m * x + b1;

///////

a.x=x;
a.y=y;

Circle cir1(a,o);
draw_circle(cir1, canvas);
}
}

最佳答案

double m = (b.y-a.y)/(b.x-a.x);
double b1 = a.y - m * x;
double y = m * x + b1;

C++ 不会使用您对值所做的操作来影响值的计算方式。您将这些值分配给 double 的事实不会导致它们被计算为 double 。由于数学是基于整数的,因此您得到的是整数数学,这绝对不是您想要的。

一个修复:

double m = (b.y-a.y) / (double) (b.x-a.x);
double b1 = a.y - (double) m * x;
double y = m * (double) x + b1;

通过在每个操作中强制至少一个参数为 double ,您也强制将另一个参数提升为 double ,并强制在 double 上完成操作。

请注意,只有当 y 是有符号类型时,第一行才是安全的。否则,(b.y-a.y) 可能会下溢。在这种情况下,您需要 (b.y - (double) a.y)

关于c++ - 在 C++ 中使用 y = mx + b 公式移动圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7942297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com