gpt4 book ai didi

java - 当端点完全相同时,线相交算法返回 false?

转载 作者:行者123 更新时间:2023-12-02 09:08:08 26 4
gpt4 key购买 nike

这个算法不是我写的,但是我在我的项目中使用它。每当线的两个端点完全位于同一位置时,就会返回 true。然而,这是不希望的。我希望当两个端点位于完全相同的位置时返回 false,但即使只是过去一点也应该返回 true。

enter image description here

private boolean doLineSegmentsIntersect(Point p, Point p2, Point q, Point q2) {

//Used to calculate intersecting lines

Point r = subtractPoints(p2, p);
Point s = subtractPoints(q2, q);

float uNumerator = crossProduct(subtractPoints(q, p), r);
float denominator = crossProduct(r, s);

if (denominator == 0) {
//Lines are parallel
return false;
}

float u = uNumerator / denominator;
float t = crossProduct(subtractPoints(q, p), s) / denominator;

return (t >= 0) && (t <= 1) && (u > 0) && (u <= 1);

}

private float crossProduct(Point point1, Point point2) {
return point1.x * point2.y - point1.y * point2.x;
}

private Point subtractPoints(Point point1, Point point2) {
Point result = new Point();
result.x = point1.x - point2.x;
result.y = point1.y - point2.y;

return result;
}

最佳答案

我认为当你返回时你应该只考虑开放间隔:

return (t > 0) && (t < 1) && (u > 0) && (u < 1);

这应该可以处理您插图中的情况但是如果在您的插图中将水平线延伸到“右侧”,也会返回 false。如果这不是您正在寻找的行为,那么条件应该是 t 位于闭区间内或 u 位于闭区间内,但不能同时位于闭区间内。

关于java - 当端点完全相同时,线相交算法返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59636191/

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