3

我有一段代码检查给定的 3 个坐标是否彼此线性(如果是,则返回 true)。但是有没有办法让代码给出或占用几个像素/图?

private boolean collinear(double x1, double y1, double x2, double y2, double x3, double y3) {
    return (y1 - y2) * (x1 - x3) == (y1 - y3) * (x1 - x2);
}

你看,坐标必须完全内联才能注册为线性。我怎样才能让它看起来在某种“范围”内,让它在一个值内检查,然后用新值设置坐标?

- - 添加 - -

我正在尝试查看这 3 个点是否构成一条直线,但我希望它在一个阈值内进行检查(因为有些点可能会偏离一点点)。一旦 Java 发现这些点实际上是线性的(给或取),我希望它用 Java 检查的值替换 x1、x2、x3、y1 等。

4

2 回答 2

1

使用黑森范式,您可以计算从点到线的垂直距离。因此,当距离小于一个门槛时,它们就足够近了。

此类代码称为distanceFromLine() Java 内置

   Line2D line = new Line2D.Double(x0, y0, x1, y1);

    double distance = line.ptLineDist(px, py);

    if (Math.abs(distance) < threshold) {
              // is Near line
    }
于 2012-11-27T19:54:03.037 回答
0

您是否正在寻找满足某些特定公式的公差,或者只是一般来说,“接近”?

如果您只是在寻找一般的“关闭”,那么只需检查一些有用范围内的差异而不是相等。例如

return Math.abs((x1-x2)*(y1-y3)-(y1-y2)*(x1-x3))<tolerance;

如果您有一些特定的规则,例如“第三个点必须在前两个点形成的线的 2 个像素内”或类似的规则,那么您当然必须研究任何规则并编写明确实现它的代码。

于 2012-11-27T20:04:57.867 回答