java - 如何使用Java找到偏差

标签 java arrays eclipse swing

我想使用以下代码找出两条绘图线之间的偏差,但由于某种原因,感觉不对。

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;

import javax.swing.*;

public class DrawLine extends JPanel {  

  private static final long serialVersionUID = 1L;

  LinePoint[] lineA = new LinePoint[5];
  LinePoint[] lineB = new LinePoint[5];

  public void paintComponent(Graphics g) {

     for(int i = 0; i < lineA.length; i++) {
         lineA[i] =  new LinePoint();
         lineB[i] =  new LinePoint();

     }

     int initialLocationPoint = 10;
     for(int i = 0; i<lineA.length; i++) {
         lineA[i].x = initialLocationPoint;
         lineA[i].y = 100;
         lineB[i].x = initialLocationPoint;
         lineB[i].y = 100;
         g.drawOval((int)lineA[i].x, (int)lineA[i].y, 1, 1);
         g.drawOval((int)lineB[i].x, (int)lineB[i].y, 1, 1);
         initialLocationPoint +=1; 
     }

     System.out.println("DEVIATION: " + this.calculateDifference());

  }

  public double calculateDifference() {
      double deviation = 0.0;
      double deviationPerCordinate = 0.0;
      for (int i = 0; i < lineA.length; i++) {
          deviationPerCordinate = Math.sqrt( Math.pow(2, (lineB[i].x - lineA[i].x))  + Math.pow(2,(lineB[i].y - lineA[i].y)));
          System.out.println("deviationPerCordinate " + i + ": " + deviationPerCordinate);
          deviation = deviation + deviationPerCordinate;
      }
      return deviation;
  }

  public static void main(String[] args) {
    JFrame.setDefaultLookAndFeelDecorated(true);

    JFrame frame = new JFrame("Draw Line");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setBackground(Color.white);
    frame.setSize(400, 400);

    DrawLine panel = new DrawLine();

    frame.add(panel);

    frame.setVisible(true);
  }

结果:

坐标偏差0:1.4142135623730951

坐标偏差1:1.4142135623730951

坐标偏差2:1.4142135623730951

坐标偏差3:1.4142135623730951

坐标偏差4:1.4142135623730951

偏差:7.0710678118654755

预期结果:

这不应该返回0吗?因为根本没有区别,因为两张图都位于相同的位置/电线。

有人知道我在这里做错了什么吗?是公式吗?

最佳答案

假设您使用欧几里德距离来计算偏差,则您的公式是错误的。在 Java 中使用 Math 库对值求平方的正确方法是 Math.pow(x, 2) 。话虽这么说,这个Math.pow(2, (lineB[i].x - lineA[i].x))应该是Math.pow((lineB[i].x - lineA[i].x), 2) y 也是如此坐标。

关于java - 如何使用Java找到偏差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53179812/

相关文章:

java - 如何将 Activity 保存为包含数据的 PDF 文件

java - 按键事件 : Making multiple inputs work together

java - eclipse "Widget is disposed"错误

java - 如何在java中清除BufferedImage的像素?

java - 使用 Spring 自动从属性文件连接多个数组

javascript - 比较 jquery 中的两个二维数组

javascript - 通过引用和拼接传递

java - 更改maven eclipse项目中的java SDK版本

java - 在整个项目中创建 List 时更改为编译器 1.7 会产生错误

java - 查询在 Mongo 中工作,但不适用于 spring-data-mongo