Eu preciso desenhar passo a passo a “construção” do meu grafo.
Num frame tem a matriz de adj desse grafo, a lista de arestas geradas
e o desenho do grafo.
No estado inicial, eu tenho a matriz zerada, a lista vazia e o grafo só com os vertives
O problema é que no estado inicial ja desenha no grafo as arestas do passo seguinte e no passo seguinte as arestas do passo seguinte, e assim por diante.
Eu debuguei meu projeto, pra verificar como estava meu grafo a cada passo e descobri onde começa o erro, mas nao sei como resolver.
A logica é a seguinte: só desenha a linha se houver aresta (se houver 1 na matriz de adj)
vou mostrar no codigo onde ta o erro
[code]package Principal;
import Grafo.;
import java.awt.;
import javax.swing.*;
public class Desenha {
private JFrame frame;
private JTextArea matrizA, list, titulo;
public Desenha(Grafo grafo, String lista) { // passo um grafo inicialmente só com os vertices
frame = new JFrame();
matrizA = new JTextArea();
list = new JTextArea();
titulo = new JTextArea();
matrizA.setText(grafo.Matriz());
matrizA.setVisible(true);
matrizA.setBounds(30, 30, 390, 320);
//--------------------------------------
titulo.setText(" => Lista de Arestas Geradas:");
titulo.setVisible(true);
titulo.setBounds(30, 400, 200, 15);
//--------------------------------------
list.setText(lista);
list.setVisible(true);
list.setBounds(30, 420, 360, 220);
frame.add(titulo);
frame.add(list);
frame.add(matrizA);
Grafico painelGrafo = new Grafico(grafo); // passo esse grafo pra classe Grafico q é onde desenha
frame.getContentPane().add(painelGrafo);
frame.setSize(907, 526);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
public JFrame Desenha() {
return frame; // so retorna o frame pra eu usar dps abrindo e fechando
}
class Grafico extends JPanel { // classe interna q desenha
private Grafo grafo;
Color Vertice;
Color Aresta;
Color Texto;
public Grafico(Grafo grafo) { // pega o grafo só com os vertices
this.grafo = grafo; // ATE AQUI ESTA CERTO, a matriz esta zerada entao deveria desenhar só os vertices
this.Vertice = new Color(72, 118, 255);
this.Aresta = new Color(39, 64, 139);
this.Texto = new Color(0, 0, 139);
}
@Override
public void paint(Graphics g) {
super.paint(g); // painel // qnd debuguei aqui a matriz ja estava preenchida
// aqui ta o problema, eu nao sei como essa matriz foi preenchida
// pq eu nao alterei o grafo hora nenhuma
// com coordenadas polares
int margem = 40;
int r;
if (this.getWidth() < this.getHeight()) {
r = this.getWidth() / 2 - margem;
} else {
r = this.getHeight() / 2 - margem;
}
int xc = this.getWidth() / 2 + 180;
int yc = this.getHeight() / 2 - 10;
double rad = 1.5 * Math.PI;
double incRad = 2 * Math.PI / grafo.getNumV();
int x;
int y;
Point[] ponto = new Point[grafo.getNumV()];
for (int cont = 0; cont < grafo.getNumV(); cont++) {
x = (int) (r * Math.cos(rad) + xc);
y = (int) (r * Math.sin(rad) + yc);
ponto[cont] = new Point(x, y);
rad += incRad;
}
for (int i = 1; i < grafo.getNumV(); i++) {
for (int j = 0; j < i; j++) {
if (grafo.matrizAdj[i][j] != 0) { // no 1º passo, n deveria entrar nesse if, mas entra e desenha
g.setColor(Aresta);
g.drawLine(ponto[i].x + 30, ponto[i].y + 20, ponto[j].x + 30, ponto[j].y + 20);
}
}
}
for (int cont = 0; cont < grafo.getNumV(); cont++) {
g.setColor(Vertice);
g.fillOval(ponto[cont].x, ponto[cont].y, 40, 40);
g.setColor(Texto);
g.drawString("v[" + (cont) + "]", ponto[cont].x + 10, ponto[cont].y + 25);
}
}
}
}
[/code]
enfim… alguem sabe o q pode ser?
ou viu algum erro nesse codigo?
eu ja li tudo qnt é forum e tutorial, mas nao encontrei nada