DrawLine() com floats

5 respostas
jopss

Ola galera… procurei uma solucao mas ainda nao achei…

To fazendo uma tela onde se coloca as coordenadas e se pinta uma linha num painel… ate ai blzinha, mas gostaria de maior precisao quanto ao uso de g.drawLine(int,int,int,int)… gostaria de posicionar com valores float e nao int!!!

Será q alguem tem alguma implementacao a respeito??

jopss :stuck_out_tongue:

5 Respostas

ViniGodoy

Você terá que usar as classes do Java2D.

Dê uma olhada na classe Line2D.Float ou Line2D.Double e escolha a que tem a precisão adequada para seu uso.

Um exemplo de uso:
import java.awt.*;
import java.awt.geom.Line2D;

import javax.swing.*;

public class Line2DDemo {
    public static void main(String[] args) {
        JFrame area = new JFrame();
        area.setSize(600, 400);
        area.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        area.setContentPane(new AreaPanel());
        area.setVisible(true);
    }
    
    private static class AreaPanel extends JPanel {               
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D)g.create();
            Line2D line = new Line2D.Double(100.0, 150.0, 300.0, 300.0);            
            g2d.draw(line);
            g2d.dispose();
        }
    }
}
Kknd

jopss:
Ola galera… procurei uma solucao mas ainda nao achei…

To fazendo uma tela onde se coloca as coordenadas e se pinta uma linha num painel… ate ai blzinha, mas gostaria de maior precisao quanto ao uso de g.drawLine(int,int,int,int)… gostaria de posicionar com valores float e nao int!!!

Será q alguem tem alguma implementacao a respeito??

jopss :stuck_out_tongue:

Edit.: Ví o post do cara acima, mas não entendo a implementação de desenhar com parâmetros double.

Pontos como int: Contáveis (conjunto finito)
Pontos representados por ponto-flutuante: Contínuos (“infinitos”)

O que você pode fazer, para evitar a perda progressiva de precisão, é armazenar os pontos em campos Double, e na hora de desenhar dar um cast pra int!

jopss

kknd, fiz o cast, mas mesmo assim perde precisao!!!

ViniGodoy, tua implementacao funcionou perfeitamente doq quero…

VLW :smiley:

jopss :stuck_out_tongue:

Kknd

jopss:
kknd, fiz o cast, mas mesmo assim perde precisao!!!

ViniGodoy, tua implementacao funcionou perfeitamente doq quero…

VLW :smiley:

jopss :stuck_out_tongue:

Só, acho que eu sugeri algo diferente mesmo hehe. Só não entendo como isso ai vai desenhar “meio pixel” hehe.

ViniGodoy

Por incrível que pareça, o “meio pixel” pode ser desenhado. hehehehe…

Não é que a tela vá desenhar meio pixel, mas alguns algoritmos de pintura e anti-aliasing podem trabalhar com essa informação para gerar uma imagem mais precisa.

Além de que, é bom poder trabalhar só com floats ou doubles e não fazer cast o tempo todo…

Criado 1 de março de 2007
Ultima resposta 2 de mar. de 2007
Respostas 5
Participantes 3