hallo, und im vorraus schon einmal danke für eure zeit!
ich möchte einige geometrische formen unterschiedlicher farbe zeichnen, die sie gegenseitig überlappen (für die dies interessiert, es handelt sich um ein fraktal, den pythagoras-baum Pythagoras-Baum ? Wikipedia).
das problem an der ganzen sache ist, dass es unmöglich ist, die teile die als oberstes zu sehen sein sollen auch zeitlich zuletzt zu zeichnen. so dachte ich mir erschaffe ich einfach mehrere ebenen und zeichne dann einfach in die passende ebene. dies funktioniert auch mit jpanels die übereinander liegen und durchsichtig sind. ich wollte für jedes jpanel ein anderes graphics objekt benutzen auf das dann gezeichnet werden kann. doch nun weiß ich nicht ob man überhaupt mehrere graphics objekte gleichzeitig haben kann, da diese ja nicht instanziiert werden dürfen und wie man diese graphics objekte "in" das jpanel bekommt. hier ist der code:
jetzt mekelt der compiler bei
rum.
versuche ich in der pyth methode nicht g2d[iteration] sondern draw[iteration].getGraphics() zu verwenden, erhalte ich eine null pointer exception.
ich habe schon alles versucht und gegoogled aber ich finde einfach keine lösung. hat jemand von euch vielleicht eine idee? danke
ich möchte einige geometrische formen unterschiedlicher farbe zeichnen, die sie gegenseitig überlappen (für die dies interessiert, es handelt sich um ein fraktal, den pythagoras-baum Pythagoras-Baum ? Wikipedia).
das problem an der ganzen sache ist, dass es unmöglich ist, die teile die als oberstes zu sehen sein sollen auch zeitlich zuletzt zu zeichnen. so dachte ich mir erschaffe ich einfach mehrere ebenen und zeichne dann einfach in die passende ebene. dies funktioniert auch mit jpanels die übereinander liegen und durchsichtig sind. ich wollte für jedes jpanel ein anderes graphics objekt benutzen auf das dann gezeichnet werden kann. doch nun weiß ich nicht ob man überhaupt mehrere graphics objekte gleichzeitig haben kann, da diese ja nicht instanziiert werden dürfen und wie man diese graphics objekte "in" das jpanel bekommt. hier ist der code:
Java:
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import javax.swing.JPanel;
public class Pythagoras_Tree extends Frame{
static final int WIDTH = 1024-8;
static final int HEIGHT = 768-34;
static final int MAX_ITERATION = 16;
static JPanel[] draw = new JPanel[MAX_ITERATION+1];
static Graphics2D[] g2d = new Graphics2D[MAX_ITERATION+1];
static final float TRUNK_RED = 139f/255f;
static final float TRUNK_GREEN = 90f/255f;
static final float TRUNK_BLUE = 43f/255f;
static final float CROWN_RED = 0f;
static final float CROWN_GREEN = 155f/255f;
static final float CROWN_BLUE = 0f;
Pythagoras_Tree(){
addWindowListener(new MyFinishWindow());
createAndAddComponents();
pyth(0, 423,730, 591,730, 0);
}
public class MyFinishWindow extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
public void createAndAddComponents(){
/*int z = 0;
while (z<=MAX_ITERATION){
Graphics2D g2d[z]; = Graphics2D;
z++;
}*/
FlowLayout flow0 = new FlowLayout();
flow0.setHgap(0);
flow0.setVgap(0);
draw[0] = new JPanel();
draw[0].paint(g2d[0]);
draw[0].setLayout(flow0);
int i = 1;
while (i<MAX_ITERATION){
draw[i] = new JPanel();
draw[i].paint(Graphics g){
g2d[i] = (Graphics2D)g;
}
draw[i].paint(g2d[i]);
draw[i].setOpaque(false);
draw[i].setLayout(flow0);
draw[i-1].add(draw[i]);
i++;
}
}
public static void pyth (double alpha, double ax, double ay, double bx, double by, int iteration){
if(iteration<=MAX_ITERATION){
double length = Math.sqrt((bx-ax)*(bx-ax)+(by-ay)*(by-ay));
double nax,nay,nbx,nby,cx,cy;
nax = ax+Math.sin(alpha)*length;
nay = ay-Math.cos(alpha)*length;
nbx = bx+Math.sin(alpha)*length;
nby = by-Math.cos(alpha)*length;
cx = nax+Math.cos(alpha-Math.PI/4.0)*(length/Math.sqrt(2));
cy = nay+Math.sin(alpha-Math.PI/4.0)*(length/Math.sqrt(2));
float red = ((MAX_ITERATION-iteration)*TRUNK_RED+iteration*CROWN_RED)/MAX_ITERATION;
float green = ((MAX_ITERATION-iteration)*TRUNK_GREEN+iteration*CROWN_GREEN)/MAX_ITERATION;
float blue = ((MAX_ITERATION-iteration)*TRUNK_BLUE+iteration*CROWN_BLUE)/MAX_ITERATION;
g2d[iteration].setColor(new Color(red,green,blue));
g2d[iteration].drawLine((int)ax,(int)ay, (int)nax,(int)nay);
g2d[iteration].drawLine((int)bx,(int)by, (int)nbx,(int)nby);
g2d[iteration].fillPolygon(new int[]{(int)ax,(int)nax,(int)cx,(int)nbx,(int)bx}, new int[]{(int)ay,(int)nay,(int)cy,(int)nby,(int)by}, 5);
pyth(alpha-Math.PI/4, nax,nay, cx,cy, iteration+1);
pyth(alpha+Math.PI/4, cx,cy, nbx,nby, iteration+1);
}
}
public static void main (String[] args){
Pythagoras_Tree main = new Pythagoras_Tree();
main.setVisible(true);
main.setSize(WIDTH+8,HEIGHT+34);
main.setResizable(false);
main.validate();
}
}
jetzt mekelt der compiler bei
Java:
draw[i].paint(Graphics g){
g2d[i] = (Graphics2D)g;
}
versuche ich in der pyth methode nicht g2d[iteration] sondern draw[iteration].getGraphics() zu verwenden, erhalte ich eine null pointer exception.
ich habe schon alles versucht und gegoogled aber ich finde einfach keine lösung. hat jemand von euch vielleicht eine idee? danke