2D-чертеж Java - PullRequest
       2

2D-чертеж Java

1 голос
/ 29 сентября 2010

я пытаюсь создать свинг-приложение, которое рисует график функции (пока просто (например, х + 2) но у меня есть проблемы, чтобы сделать математические координаты моих точек в зависимости от координат экрана. Я хочу, чтобы он просто нарисовал линию, которая идет от P1 (0,1) до P2 (1,2) внутри моего графика.

вот мой код:

import java.awt.*;
import javax.swing.*;  
public class Graph extends JPanel {

   protected void paintComponent(Graphics g) {
     int YP1,YP2;
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D)g;

      int h = getHeight();
         int w = getWidth();
         // Draw axeX.
         g2.draw(new Line2D.Double(0, h/2, w, h/2)); //to make axisX in the middle
         // Draw axeY.
         g2.draw(new Line2D.Double(w/2,h,w/2,0));//to make axisY in the middle of the panel

                  //line between P1(0,1) and P2(1,2) to draw function x+1
    Point2D P1 = new Point2D.Double(w/2,(h/2)+1);
    Point2D P2 = new Point2D.Double((w/2)+1,(h/2)+2);
     g2.draw(new Line2D.Double(P1,P2));
}
public static void main(String[] args) {
      JFrame f = new JFrame();
      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      f.add(new Graphe());
      f.setSize(400,400);
      f.setLocation(200,200);
      f.setVisible(true);
  }
}

спасибо.

Ответы [ 2 ]

1 голос
/ 29 сентября 2010
import java.awt.*;
import javax.swing.*;  
public class Graph extends JPanel {
   private static final int UNIT = 20;
   protected void paintComponent(Graphics g) {
     int YP1,YP2;
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D)g;

      int h = getHeight();
         int w = getWidth();
         // Draw axeX.
         g2.draw(new Line2D.Double(0, h/2, w, h/2)); //to make axisX in the middle
         // Draw axeY.
         g2.draw(new Line2D.Double(w/2,h,w/2,0));//to make axisY in the middle of the panel

                  //line between P1(0,1) and P2(1,2) to draw function x+1
    Point2D P1 = new Point2D.Double(w/2,(h/2)+ UNIT);
    Point2D P2 = new Point2D.Double((w/2)+ UNIT,(h/2)+ 2*UNIT);  //considering 20 = 1 unit in your syste,
     g2.draw(new Line2D.Double(P1,P2));
}
public static void main(String[] args) {
      JFrame f = new JFrame();
      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      f.add(new Graphe());
      f.setSize(400,400);
      f.setLocation(200,200);
      f.setVisible(true);
  }
}   

Попробуйте этот код читать комментарии, чтобы получить решение

1 голос
/ 29 сентября 2010

Центр вашей системы координат (0,0) окрашен в (w / 2, h / 2).Недостающая часть - это масштаб, другими словами: сколько пикселей составляют одну единицу по оси x и оси y.

Поэтому обычно вы умножаете значение своей единицы на коэффициент масштабирования (например, 10, если хотите 10пикселей на единицу) и добавьте смещение оси от левой или нижней границы.Раздражающая часть - это (0,0) на экранных координатах, это верхний левый угол, а высота отсчитывается сверху вниз (перевернутая ось Y).Это немного усложняет:

 xOnScreenPos =  (xUnit * xScale) + xScaleOffset;
 yOnScreenPos = -(yUnit * yScale) + yScaleOffset;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...