代码之家  ›  专栏  ›  技术社区  ›  Mizlul

如何在Java中找到两行[duplicate]的偏差

  •  0
  • Mizlul  · 技术社区  · 7 年前

    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

    偏差坐标3:1.4142135623730951

    偏差坐标4:1.4142135623730951

    偏差:7.0710678118654755

    导出结果:

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

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

    0 回复  |  直到 7 年前
        1
  •  2
  •   Ervin Szilagyi    7 年前

    因为你是用欧几里德距离来计算偏差,你的公式是错误的。在Java中使用数学库计算值平方的正确方法是 Math.pow(x, 2) Math.pow(2, (lineB[i].x - lineA[i].x)) 应该是 Math.pow((lineB[i].x - lineA[i].x), 2) y 协调。