Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > Стандартная система координат при отрисовки


Автор: Codemancer 28.11.2008, 22:50
Простите за глупый вопрос. Проблема в следующем. Грубо говоря, есть массив с точками, которые определяют начало и конец линий. Лини надо построить, например, на jPanel.  
Код

           ...
           Graphics g = jPanel1.getGraphics();
           ...
           public void Draw(Graphics g){
            g.drawLine(getX1(), getY1(), getX2(), getY2());
    }

Все работает, только начало координат в jPanel по умолчанию находится в левом верхнем углу. Если визуально изобразить, то получается так
--------->Ось X
|
|
|
\/
ось Y

Как можно поменять на привычную всем в математике и самому задать начало координат?

Автор: Connie 29.11.2008, 09:30
yReal = g.getSize().height - yCalculated

еще нужно добавить проверки на выход yReal за пределы

Автор: Vurn 29.11.2008, 18:19
НЕПРАВИЛЬНО рисовать на JPanel. Для рисования есть класс Image и его производные (т.е. BufferedImage), а для отображения - JLabel.

Автор: Vurn 21.12.2008, 10:21
У любого Image можно получить Graphics2D, а ему установить аффинное преобразование. Этим Афинным преоброзованием можно получить что угодно, в том числе и новую систему координат. В случае автора, это будет выглядеть так:
Код

import javax.swing.*;
import java.awt.image.BufferedImage;
import java.awt.*;
import java.awt.geom.AffineTransform;

public class Desk implements Runnable {
    JFrame jf ;

    public Desk() {
        jf = new JFrame();
        BufferedImage bi = new BufferedImage(400, 300, BufferedImage.TYPE_INT_RGB);
        Graphics2D g2d = (Graphics2D)bi.getGraphics();
        g2d.transform(new AffineTransform(1,0,0,-1,0,300));
        g2d.drawLine(0,0, 400, 300);
        jf.add(new JLabel(new ImageIcon(bi)));
        jf.pack();
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setVisible(true); 
    }

    @Override
    public void run() {

    }

    public static void main(String[] args) {
        new Desk().run();
    }
}


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)