Как найти отклонение в Java двух строк

Я хотел бы сделать очень простое приложение, которое при инициализации приложения рисуется прямой статической линией, а затем дает пользователю возможность нарисовать другую линию (пользователь попытается следовать первой строке) и в конце вычислить, какое было отклонение или разница между этими двумя строками.

Мне приходит в голову сначала сохранить все точки (координаты) X1, Y1 строки A и то же самое для строки B в отдельных массивах и перебрать оба массива и вычислить разницу, используя формулу Пифагора из https://www.mathplanet.com/education/algebra-2/conic-sections/distance-between-two-points-and-the-midpoint

Моя текущая реализация такова:

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 implements ActionListener, MouseListener, MouseMotionListener {    

  private static final long serialVersionUID = 1L;

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

  public void paintComponent(Graphics g) {

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

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

  }

  public double calculateDifference() {
       double deviation = 0.0;
       double deviationPerPoint = 0.0;
       for (int i = 0; i < lineA.length; i++) {
          deviationPerPoint = Math.sqrt( Math.pow(2, (lineB[i].x - lineA[i].x))  + Math.pow(2,(lineB[i].y - lineA[i].y)));
      }
      deviation = deviation +deviationPerPoint;
      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);
  }

    @Override
    public void mouseClicked(MouseEvent arg0) {
        // TODO Auto-generated method stub
        System.out.println("mouse clicked.");

        LinePoint lp = new LinePoint();
        lp.x = arg0.getX();
        lp.y = arg0.getY();
        lineB[0] = lp; // 0 should replace with some variable so it does not override first element

    }

    @Override
    public void mouseEntered(MouseEvent arg0) {
        // TODO Auto-generated method stub
        System.out.println("mouse entered.");
    }

    @Override
    public void mouseExited(MouseEvent arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mousePressed(MouseEvent arg0) {
        // TODO Auto-generated method stub
        System.out.println("mouse pressed.");
    }

    @Override
    public void mouseReleased(MouseEvent arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mouseDragged(MouseEvent arg0) {
        // TODO Auto-generated method stub
        System.out.println("mouse drawged.");
    }

    @Override
    public void mouseMoved(MouseEvent arg0) {
        // TODO Auto-generated method stub
        System.out.println("mouse moved.");
    }

    @Override
    public void actionPerformed(ActionEvent arg0) {
        // TODO Auto-generated method stub
        System.out.println("action performed.");
    }
}

class LinePoint
{
    double x;
    double y;
}

Ну, у меня есть проблема с mouseListener, который не фиксирует щелчок мышью или перетаскивание или что-то еще.

Кто-нибудь может помочь мне выполнить эту задачу?

Почему это помечено как C#? Который из них? Java или C# - выберите один.

Fildor 06.11.2018 16:02

его Java. вы должны пометить только то, с чем он связан.

Halil İbrahim 06.11.2018 16:03

@Fildor на самом деле не имеет значения язык, так как это чистое ООП. но да, я могу удалить C#

Mizlul 06.11.2018 16:06

Что ж, это не имеет значения для ты, но это не очень полезно, если вопрос, который, по-видимому, касается Java, получает ответы на C#. Видите ли, SO хочет предоставить качественные ответы на конкретные вопросы, которые не только помогут OP, но и будут полезны людям, имеющим ту же проблему. Перенос ответа Java на вопрос Java на другой язык может быть возможен, но тот, кто ищет ответ Java, вероятно, испугается, найдя ответы на C#. Это все равно, что искать в Google фотографии немецких машин и представлять Хонды.

Fildor 06.11.2018 16:12

@Fildor, ты прав, сэр, я не обратил на это слишком много внимания, но, думаю, мне следовало!

Mizlul 06.11.2018 16:14

Не о чем сожалеть. Просто хотел объяснить, почему всем полезно придерживаться одного языка. Не хотел разглагольствовать.

Fildor 06.11.2018 16:19

Вы никогда не регистрируете слушателя. Недостаточно реализовать прослушиватель, вам также необходимо вызвать связанный метод add…Listener на компоненте, от которого вы хотите получать события. Тем не менее, позволять самому компоненту реализовывать интерфейс слушателя - это плохой стиль кодирования. И не изобретайте велосипед. Вместо создания класса LinePoint вы можете использовать Point2D.Double.

Holger 06.11.2018 17:05
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
7
50
0

Другие вопросы по теме