gpt4 book ai didi

c - 如何检测点是否位于线段

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

目前我可以通过以下代码检测该点是否属于线段:

uint8_t point_lies_onSegment(const POINT2D *point, const POINT2D *linea, const POINT2D *lineb) {
double slope, intercept;
double px, py;
double left, top, right, bottom; // Bounding Box For Line Segment
double dx, dy;

px = point->x;
py = point->y;

dx = lineb->x - linea->x;
dy = lineb->y - linea->y;

slope = dy / dx;
// y = mx + c
// intercept c = y - mx
intercept = linea->y - slope * linea->x; // which is same as y2 - slope * x2

// For Bounding Box
if(linea->x < lineb->x) {
left = linea->x;
right = lineb->x;
} else {
left = lineb->x;
right = linea->x;
}
if(linea->y < lineb->y) {
top = linea->y;
bottom = lineb->y;
} else {
top = linea->y;
bottom = lineb->y;
}

//"Equation of the line: %.2f X %c %.2f\n", slope, ((intercept < 0) ? ' ' : '+'), intercept;

if( slope * px + intercept > (py - FP_TOLERANCE) &&
slope * px + intercept < (py + FP_TOLERANCE)) {
if( px >= left && px <= right &&
py >= top && py <= bottom ) {
return VG_TRUE;
}
else
return VG_FALSE;
}
else
return VG_FALSE;
}

但是如果这条线是垂直的,它就不会像预期的那样工作。例如:

线段 = (10, 10) - (10, 30)点 = (10, 20)

这返回 FALSE。

如何解决?

最佳答案

垂直线将使您的程序除以零。我很惊讶你能得到任何输出——我原以为它会崩溃。由于它没有崩溃,您可能会将 NaN 设置为 slope,这会导致其余问题。您可能想要使用与当前使用的算法不同的算法 - 例如,不需要您计算斜率的算法。

关于c - 如何检测点是否位于线段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15236891/

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