gpt4 book ai didi

c++数学问题,如果数学全部在同一行,则Double不返回值

转载 作者:太空宇宙 更新时间:2023-11-03 22:07:40 24 4
gpt4 key购买 nike

首先感谢您在本网站上提出的所有重要问题和答案!这个网站是一个很好的资源,可以解决我的许多问题,其他人过去曾遇到过这些问题,这些问题已经得到解答。但是,我目前遇到了一个问题,我似乎找不到解决方案......

我正在使用 OpenCV 尝试制作我的第一个 C++ 程序,但我遇到了一个奇怪的数学问题。我猜这很简单,我没有看到,我希望有人能解释我做错了什么。

问题出在下面一行:双 L1_Slope = (L1P2.y-L1P1.y)/(L1P2.x-L1P1.x);如果我在同一行上进行所有数学运算,它会返回 0,但如果我将它分成 3 行,它会为我提供所需的输出。

我见过类似的问题,但它们都涉及整数。L1P1、L1P2、L2P1、L2P2 实际上都是 cv::Point 的——它们是整数……但由于我将 L1_Slope 声明为 double ,所以我不明白为什么会这样。

有什么想法吗?我知道我可以分解数学并且它会起作用,但我无法想象不能在一条线上完成这个数学。

cv::Point calcIntersection(cv::Point L1P1, cv::Point L1P2, cv::Point L2P1, cv::Point L2P2) {
//calculates the intersection of two lines

std::cout << "\n\nL1P1.x=" << L1P1.x << "\n";
std::cout << "L1P1.y=" << L1P1.y << "\n";
std::cout << "L1P2.x=" << L1P2.x << "\n";
std::cout << "L1P2.y=" << L1P2.y << "\n\n";

double test1 = (L1P2.y - L1P1.y);
double test2 = (L1P2.x - L1P1.x);
double test3 = test1/test2;
std::cout << "test1=" << test1 << "\n";
std::cout << "test2=" << test2 << "\n";
std::cout << "test3=" << test3 << "\n\n";

double L1_Slope = (L1P2.y-L1P1.y) / (L1P2.x-L1P1.x);
std::cout << "L1_Slope=" << L1_Slope << "\n\n";

double L1_Intersect = L1P1.y - L1_Slope * L1P1.x;
double L2_Slope = (L2P2.y - L2P1.y) / (L2P2.x - L2P1.x);
std::cout << "L2_Slope=" << L2_Slope << "\n";

double L2_Intersect = L2P2.y - L2_Slope * L2P2.x;
double intersectionX = (L2_Intersect - L1_Intersect) / (L1_Slope - L2_Slope);
double intersectionY = (L1_Slope * intersectionX + L1_Intersect);
cv::Point intersection = { static_cast<int>(intersectionX), static_cast<int>(intersectionY) };
return intersection;}

这是控制台输出的内容:

L1P1.x=111
L1P1.y=62
L1P2.x=578
L1P2.y=345

test1=283
test2=467
test3=0.605996

L1_Slope=0
L2_Slope=0

最佳答案

double L1_Slope = (L1P2.y-L1P1.y) / (L1P2.x-L1P1.x);

这里,xy 坐标是整数。表达式的计算结果为:

(345 - 62) / (578 - 111)

283 / 467

您会惊讶地发现,在 C++ 中,283/467 是 0。这是整数除法,按整数执行,没有小数部分。即使最终结果被分配给一个 double,也为时已晚。该部门首先得到评估。小数部分已被截断,因此最终结果为 0。

double test1 = (L1P2.y - L1P1.y);
double test2 = (L1P2.x - L1P1.x);
double test3 = test1/test2;

在这里,您将分子和分母分别存储到 double 变量中,然后除法除以两个 double 值:

283.0 / 467.0

现在这是一个浮点除法,其结果是 .605996

关于c++数学问题,如果数学全部在同一行,则Double不返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54681943/

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