用于检查一行是否包含另一行(由点定义)的Java算法

时间:2015-05-10 14:56:42

标签: java algorithm line

有人知道算法来检查两条线是否相互包含?

我有交叉检查算法但不起作用,例如:

line A (1,1) to (2,2)
line B (1,1) to (3,3)

代码:

double s1_x = this.getRightPoint().getX() - this.getLeftPoint().getX(),
        s1_y = this.getRightPoint().getY() - this.getLeftPoint().getY(),

        s2_x = other.getRightPoint().getX() - other.getLeftPoint().getX(),
        s2_y = other.getRightPoint().getY() - other.getLeftPoint().getY(),

        s = (-s1_y * (this.getLeftPoint().getX() - other.getLeftPoint().getX()) + s1_x * (this.getLeftPoint().getY() - other.getLeftPoint().getY())) / (-s2_x * s1_y + s1_x * s2_y),
        t = (s2_x * (this.getLeftPoint().getY() - other.getLeftPoint().getY()) - s2_y * (this.getLeftPoint().getX() - other.getLeftPoint().getX())) / (-s2_x * s1_y + s1_x * s2_y);

if (Double.valueOf(s).isNaN() && Double.valueOf(t).isNaN()) {
    return true;
}

if (s >= 0 && s <= 1 && t >= 0 && t <= 1) {
    // Collision detected
}

//s is NaN and t becomes NaN

1 个答案:

答案 0 :(得分:0)

st的分母为零。 相反,尝试使用它。 你知道&#34;彼此包含的两行&#34;将具有相同的渐变。 您可以获得gradient1 m1=s1_y/s1_x和gradient2 m2=s2_y/s2_x 左线的右边点也必须位于右线的右点和左点之间。 所以它会是:

(other.getRightPoint().getX() >= this.getRightPoint().getX()) && (other.getRightPoint().getX()<= other.getLeftPoint().getX())

结合这两个事实会给你你想要的东西。