【问题标题】:Java - Average Linear Graph PlotsJava - 平均线性图
【发布时间】:2012-11-27 19:45:40
【问题描述】:

我有一段代码检查给定的 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 等。

【问题讨论】:

    标签: java range coordinates average


    【解决方案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
        }
    

    【讨论】:

    • 这很接近,但我仍然需要检查我的三个点(这三个点是否在一起形成一条直线)。我将如何解决这种情况?谢谢
    • Point1 = x0, y0 ; Point2 = (x1, y1); Point3(px,py)如上图;您必须将阈值设置为只有您自己知道的可行值
    • 将“import java.awt.geom.Line2D”添加到文件的开头
    • 我做“导入 java.awt.geom.Line2D;” O_o?
    • 好的,谢谢,那么我将如何将我的 x1,x2 等实际更改为使 100% 内联的值(基于它们已经是的值(所以它基本上将它们对齐)
    【解决方案2】:

    您是在寻找满足某个特定公式的公差,还是只是一般地“接近”?

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

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

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

    【讨论】:

    • 我正在尝试查看这 3 个点是否形成一条直线,但我希望它在一个阈值内进行检查(因为有些点可能会偏离一点点)。一旦 Java 发现这些点实际上是线性的(给或取),我希望它用 Java 检查的值替换 x1、x2、x3、y1 等。跨度>
    • 我想说的是,我在答案中给出的公式适用于“一定数量的给予”,定义模糊。如果这就是你要找的东西,那么我认为这应该为你做。我有点对冲,以防您对要允许的捐赠有一些严格的定义。
    猜你喜欢
    • 2018-04-14
    • 1970-01-01
    • 2017-04-23
    • 2013-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    • 2017-09-01
    相关资源
    最近更新 更多