Java - 平均线性图形图

时间:2012-11-27 19:45:40

标签: java range coordinates average

我有一段代码检查给定的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发现实际上这些点是线性的(给出或取出),我希望它然后将x1,x2,x3,y1等替换为Java检查的值。

2 个答案:

答案 0 :(得分:1)

使用Hesse法线形式,您可以计算从点到线的垂直距离。因此,当距离小于一个阈值时,它们就足够了。

此类代码称为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
    }

答案 1 :(得分:0)

您是在寻找符合某些特定公式的公差,还是仅仅是“关闭”?

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

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

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