Nabend und frohe Ostern!
Ich habe ein Programm zur Simulation der Drehspiegelmethode in Python 3.1 geschrieben, aufgrund massiver Performance-Probleme habe ich mich an die "Übersetzung" in Java gemacht. Allerdings bin ich Java-Anfänger und scheitere im Moment an folgendem Problem:
Neben der Applet-Klasse habe ich eine Klasse zum Zeichnen einer gedrehten Ellipse geschrieben. Beim Compilieren erscheint folgende Fehlermeldung:
Der Source-Code:
und die Klasse Ellipse:
Das Grundgerüst des Applets habe ich einem Beispiel aus dem Net übernommen: Das fraktale Apfelmnnchen als Java-Applet mit Zoom-Funktion
Vor meiner "Modifikation" war es noch lauffähig...^^
Danke im Voraus!
Ich habe ein Programm zur Simulation der Drehspiegelmethode in Python 3.1 geschrieben, aufgrund massiver Performance-Probleme habe ich mich an die "Übersetzung" in Java gemacht. Allerdings bin ich Java-Anfänger und scheitere im Moment an folgendem Problem:
Neben der Applet-Klasse habe ich eine Klasse zum Zeichnen einer gedrehten Ellipse geschrieben. Beim Compilieren erscheint folgende Fehlermeldung:
Code:
Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException
at applet.Ellipse.draw(Ellipse.java:69)
at applet.DSPS.paint(DSPS.java:37)
at sun.awt.RepaintArea.paintComponent(Unknown Source)
at sun.awt.RepaintArea.paint(Unknown Source)
at sun.awt.windows.WComponentPeer.handleEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Der Source-Code:
Java:
package applet;
import java.awt.*;
import java.applet.*;
//import java.util.*;
import applet.Ellipse;
public class DSPS extends Applet {
Ellipse ellipse;
Image buffer;
Graphics gBuffer;
public void init() {
setBackground(new Color(255,255,255));
ellipse = new Ellipse(72, 18, -100, 100, Math.PI, 100, this.gBuffer);
}
/*
public boolean keyDown(Event ev, int key) {
// Alles zurücksetzen
if (key==Event.F12) {/*
...
buffer = null;
repaint();
}
return true;
}*/
public void paint (Graphics g) {
if (buffer!=null) {
g.drawImage (buffer, 0, 0, this);
return;
}
buffer = createImage(this.getSize().width, this.getSize().height);
gBuffer = buffer.getGraphics();
ellipse.draw();
g.drawImage(buffer, 0,0,this);
repaint();
}
}
und die Klasse Ellipse:
Java:
package applet;
import java.awt.Graphics;
public class Ellipse{
public int h_width;
public int h_height;
public int x_shift;
public int y_shift;
public double angle;
public int iterations;
public Graphics reference;
public double[][] matrix;
public double[][] manipulated_matrix;
public Ellipse(int px_Size, int py_Size, int px_shift, int py_shift,
double pangle, int piterations, Graphics pBuffer)
{
h_width = px_Size;
h_height = py_Size;
x_shift = px_shift;
y_shift = py_shift;
angle = pangle;
iterations = piterations;
reference = pBuffer;
matrix = new double[iterations * 2][2];
double current_x, current_y;
for (double x = 0; x < iterations; x++)
{
current_x = x * ((2 * h_width) / iterations ) - h_width;
current_y = calculate(current_x);
matrix[(int) (x * 2) ][0] = current_x;
matrix[(int) (x * 2) ][1] = current_y;
matrix[(int) (x * 2 + 1)][0] = current_x;
matrix[(int) (x * 2 + 1)][1] = - current_y;
}
manipulated_matrix = new double[iterations * 2][2];
double[] coordinates = new double[2];
double[] manipulated_coordinates = new double[2];
for (int cnt = 0; cnt < iterations * 2; cnt++)
{
coordinates = matrix[cnt];
manipulated_coordinates = turn(coordinates, angle);
manipulated_coordinates[0] += x_shift;
manipulated_coordinates[1] += y_shift;
manipulated_matrix[cnt] = manipulated_coordinates;
}
}
private double calculate(double p_x)
{
return (h_height * Math.sqrt( (1 - ((p_x * p_x) / (h_width * h_width)))));
}
private double[] turn(double[] coordinates, double phi)
{
double x_old, y_old, x_new, y_new;
double[] ret_M = new double[2];
x_old = coordinates[0];
y_old = coordinates[1];
x_new = x_old * Math.cos( -phi ) - y_old * Math.sin( -phi );
y_new = y_old * Math.cos( -phi ) + x_old * Math.sin( -phi );
ret_M[0] = x_new;
ret_M[1] = y_new;
return ret_M;
}
public void draw()
{
for (int cnt = 0; cnt < iterations * 2; cnt++)
{
this.reference.drawLine((int)manipulated_matrix[cnt][0] + 400, //Zeile 69!!!
(int)manipulated_matrix[cnt][1] + 300,
(int)manipulated_matrix[cnt][0] + 400,
(int)manipulated_matrix[cnt][1] + 300);
}
}
}
Das Grundgerüst des Applets habe ich einem Beispiel aus dem Net übernommen: Das fraktale Apfelmnnchen als Java-Applet mit Zoom-Funktion
Vor meiner "Modifikation" war es noch lauffähig...^^
Danke im Voraus!