Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么';判断两条线段是否相交的代码有何错误?_C++_Math_Line_Intersection_Algebra - Fatal编程技术网

C++ 什么';判断两条线段是否相交的代码有何错误?

C++ 什么';判断两条线段是否相交的代码有何错误?,c++,math,line,intersection,algebra,C++,Math,Line,Intersection,Algebra,我一辈子都想不出,如果这些片段交叉了,如何让它回归真实。任何帮助都将不胜感激 bool doCross(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4) { bool cross = true; double denom, uA, uB; denom = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1); if(denom == 0)

我一辈子都想不出,如果这些片段交叉了,如何让它回归真实。任何帮助都将不胜感激

bool doCross(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4)
{
    bool cross = true;
    double denom, uA, uB;

    denom = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1);

    if(denom == 0)
    {
        cross = false;
    }
    else
    {
        uA = (x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3) / denom;
        uB = (x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3) / denom;
    }
    if (abs(0 < uA) && abs(uA < 1) && abs(0 < uB) && abs(uB < 1))
    {
        cross = true;
    }
    else
    {
        cross = false;
    }       
    return cross;   
}
bool doCross(intx1、inty1、intx2、inty2、intx3、inty3、intx4、inty4)
{
布尔交叉=真;
双分母,uA,uB;
denom=(y4-y3)*(x2-x1)-(x4-x3)*(y2-y1);
如果(denom==0)
{
交叉=假;
}
其他的
{
uA=(x4-x3)*(y1-y3)-(y4-y3)*(x1-x3)/denom;
uB=(x2-x1)*(y1-y3)-(y2-y1)*(x1-x3)/denom;
}
if(abs(0
两条线段AB和CD交叉iff A和B位于CD的不同侧面,反之亦然。要测试点X是否位于定向线段PQ的左侧,请使用ccw原语。有关某些代码,请参见中的线段交点和中的一些幻灯片。

如果A和B位于CD的不同侧面,则两条线段AB和CD交叉,反之亦然。要测试点X是否位于定向线段PQ的左侧,请使用ccw原语。有关一些代码,请参见中的线段交点和中的一些幻灯片。

您说过:

uA = (x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3) / denom;
uB = (x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3) / denom;
if (abs(0 < uA) && abs(uA < 1) && abs(0 < uB) && abs(uB < 1))
我想你想要:

uA = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)) / denom;
uB = ((x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3)) / denom;
if ((0 < abs(uA)) && (abs(uA) < 1) && (0 < abs(uB)) && abs(uB) < 1))
你说:

uA = (x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3) / denom;
uB = (x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3) / denom;
if (abs(0 < uA) && abs(uA < 1) && abs(0 < uB) && abs(uB < 1))
if(abs(0
你拿的是比较的绝对值,这毫无意义。 你想要:

uA = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)) / denom;
uB = ((x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3)) / denom;
if ((0 < abs(uA)) && (abs(uA) < 1) && (0 < abs(uB)) && abs(uB) < 1))
if((0
在比较浮点/双精度时使用整型常量是一种不好的形式,尽管不一定是一种错误

uA = (x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3) / denom;
uB = (x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3) / denom;
if (abs(0 < uA) && abs(uA < 1) && abs(0 < uB) && abs(uB < 1))
我想你想要:

uA = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)) / denom;
uB = ((x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3)) / denom;
if ((0 < abs(uA)) && (abs(uA) < 1) && (0 < abs(uB)) && abs(uB) < 1))
你说:

uA = (x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3) / denom;
uB = (x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3) / denom;
if (abs(0 < uA) && abs(uA < 1) && abs(0 < uB) && abs(uB < 1))
if(abs(0
你拿的是比较的绝对值,这毫无意义。 你想要:

uA = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)) / denom;
uB = ((x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3)) / denom;
if ((0 < abs(uA)) && (abs(uA) < 1) && (0 < abs(uB)) && abs(uB) < 1))
if((0

在比较浮点/双精度

直线或线段交叉时使用整型常量是一种不好的形式,尽管不一定是一种错误?你都提到了。您可以定义一条只有两个点的直线,也可以定义一条有两个点的线段的端点。哪两对构成线段1、2的坐标?如果在第一对内,则移动第二对。这不会改变结果,但会更清楚。另外,为了便于理解,人们可以帮助解释你的算法。为什么要计算布尔值的绝对值?计算的基本思想是找出每一段是否截取由另一段定义的矩形。直线或线段交叉?你都提到了。您可以定义一条只有两个点的直线,也可以定义一条有两个点的线段的端点。哪两对构成线段1、2的坐标?如果在第一对内,则移动第二对。这不会改变结果,但会更清楚。另外,为了便于理解,人们可以帮助解释你的算法。为什么要计算布尔值的绝对值?计算的基本思想是找出每一段是否截取了由另一段定义的矩形。我也想知道这些。
uA
的绝对值从不为负值;0(或0.0)算作交叉点吗?这是否意味着这些片段相互接触?与1.0相比,我仍然没有得到任何输出。我只是很沮丧。我是一个相当新手的程序,这个作业有点让我不知所措。我也想知道这些。
uA
的绝对值从不为负值;0(或0.0)算作交叉点吗?这是否意味着这些片段相互接触?与1.0相比,我仍然没有得到任何输出。我只是很沮丧。我是一个相当新手的程序,这个任务有点让我不知所措。