Найти длину линии в JAVA - PullRequest
       15

Найти длину линии в JAVA

1 голос
/ 25 февраля 2012

Я хочу найти длину строки. Я инициализировал координаты x1, y1, x2, y2, используя события мыши. Когда я пытаюсь найти расстояние, как показано ниже:

public class LineFunctions {
    static int dpi;
    static double pixel_per_cm;
    public LineFunctions(){
        Toolkit tk;
        tk=Main.frame.getToolkit();
        dpi=tk.getScreenResolution();
        pixel_per_cm=dpi/2.54;
    }
    public double lengthInPixel(int x1,int y1,int x2,int y2){
        double length_in_pixel;
        double x=Math.pow((x2-x1), 2);
        double y=Math.pow((y2-y1), 2);
        length_in_pixel = Math.sqrt(x+y);
        return length_in_pixel;
    }
    public double lengthInCm(int x1,int y1,int x2,int y2){

        double length_in_pixel=lengthInPixel(x1,y1,x2,y2);
        double length_in_cm = length_in_pixel / pixel_per_cm;
        System.out.println("Length in Cm= "+length_in_cm);
        return length_in_cm;
    }
}

Main.java

public class Main {
    public static JFrame frame;
    public static void main(String ar[]) {
        frame=new JFrame("LINE FRAME");
    }
    static class ImageComponent extends JComponent implements MouseListener {
        Line2D line;
            int x1,y1,x2,y2;
            public ImageComponent() {
                addMouseListener(this);
                addMouseMotionListener(this);
    }
            @Override
            public void paintComponent(Graphics g){
                  super.paintComponent(g);
                  Graphics2D gd=(Graphics2D)g;
                  line=new Line2D.Double(x1,y1,x2,y2);
                  gd.draw(line);
            }
            @Override
    public void mousePressed(MouseEvent e) {

        x1=e.getX();
                    y1=e.getY();
    }

    @Override
    public void mouseReleased(MouseEvent e) {
                    x2=e.getX();
                    y2=e.getY();
                    LineFunctions lf=new LineFunctions();
                    double length=lf.lengthInCm(x1,y1,x2,y2);
                    System.out.println("Line Length="+length);
                    repaint();                    
    }
    .......................
    ........................
}

Этот код находит длину линии по координатам, но когда я нахожу длину линии, нарисованной на моем экране из RULER , она не видит меня такой же длины, как у меня из код выше. Итак, в чем проблема с этим и как я могу найти точную длину линии?

1 Ответ

2 голосов
/ 25 февраля 2012

Вы можете использовать getNormalizingTransform() из GraphicsConfiguration вашего GraphicsDevice, чтобы определить необходимую геометрию.В частности, преобразование identity указывает, что «72 единицы в пользовательском пространстве равны 1 дюйму в пространстве устройства».

Также рассмотрите Math.hypot() для большей точности.

...