2012-02-25 2 views
1

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

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 он не видел меня такой же длины, как я получил от вышеуказанного кода. Итак, Какова проблема с этим и как я могу найти точную длину строки?

+3

Есть ли у вас какие-либо спецификации для вашего монитора? Вы уверены, что разрешение экрана, как сообщает набор инструментов, является правильным? – claesv

+0

Я думаю, что это правильно ... но не уверен .. – Parth

ответ

2

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

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