Q
Quh
Gast
Hallo Jungs!
Aufgabe ist es eine Sinuskurve zu programmieren die auf nem JFrame ausgegeben wird! Zusätzlich sollen 2 Threads vorhanden sein. 1 berechnet ständig die Werte und der 2te zeichnet die Kurve neu.
Das ist auch nicht das eigentliche Problem!
Ich kann auch ganz normal Linien auf dem Panel zeichen!
Die berechneten Werte sind auch richtig und werden per Queue an die Zeichenklasse übergeben!
Mein Problem sieht man auf dem Bild Bild!
Die Kurve zeichnet er indem er die lauter kleine Geraden aneinanderhängt. An sich stimmt die Kurve auch. Nur weiss ich nicht wieso er immer eine Gerade zum Ursprungspunkt noch zurück macht! Und wieso kommt da unten noch eine Gerade die da gar nicht hingehört?!?! Ich weiss nicht weiter!
Naja das ist meine Zeichenklasse!
Die berechneten Werte stimmen alle! Also an so Sachen wie setLast(Speichert den letzten Punkt) kann es nicht liegen!
Hat jmd vielleicht ne Idee?
Mfg Quh
Aufgabe ist es eine Sinuskurve zu programmieren die auf nem JFrame ausgegeben wird! Zusätzlich sollen 2 Threads vorhanden sein. 1 berechnet ständig die Werte und der 2te zeichnet die Kurve neu.
Das ist auch nicht das eigentliche Problem!
Ich kann auch ganz normal Linien auf dem Panel zeichen!
Die berechneten Werte sind auch richtig und werden per Queue an die Zeichenklasse übergeben!
Mein Problem sieht man auf dem Bild Bild!
Die Kurve zeichnet er indem er die lauter kleine Geraden aneinanderhängt. An sich stimmt die Kurve auch. Nur weiss ich nicht wieso er immer eine Gerade zum Ursprungspunkt noch zurück macht! Und wieso kommt da unten noch eine Gerade die da gar nicht hingehört?!?! Ich weiss nicht weiter!
Code:
package Voraufgabe;
import javax.swing.JPanel;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.util.Queue;
import java.awt.geom.Point2D.Double;
import java.awt.geom.Line2D;
import java.awt.BasicStroke;
import java.util.LinkedList;
public class PicturePanel extends JPanel {
private static final long serialVersionUID = 1L;
private GuiModel model;
private static final int heightwindow = 200;
private static final int amountpoints = 200;
private Double lastpoint;
private static final int multiply = 2;
PicturePanel(GuiModel model) {
this.setPreferredSize(new Dimension(amountpoints * multiply, heightwindow * multiply));
this.model = model;
this.lastpoint = new Double(0, heightwindow/2);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
Queue<Double> queue = cloneQueue();
while(queue.peek() != null) {
Double temp = queue.poll();
Line2D line = new Line2D.Double(lastpoint.getX(),lastpoint.getY(),getXValue(temp),getYValue(temp));
g2.setStroke(new BasicStroke(1));
g2.draw(line);
setLast(getXValue(temp),getYValue(temp));
}
}
private double getXValue(Double p){
return p.getX() * multiply;
}
private double getYValue(Double p){
return (p.getY() * ((heightwindow - 50) / 2)) * multiply
+ heightwindow / 2 * multiply;
}
private Queue<Double> cloneQueue() {
LinkedList<Double> list = (LinkedList<Double>) model.getQueue();
Queue<Double> newqueue = new LinkedList<Double>();
for(int i = 0; i < list.size(); i++) {
newqueue.offer(list.get(i));
}
return newqueue;
}
private void setLast(double x, double y) {
if((int)x == amountpoints ) {
lastpoint.setLocation((int)x - amountpoints, (int)y);
} else {
lastpoint.setLocation((int)x, (int)y);
}
}
}
Naja das ist meine Zeichenklasse!
Die berechneten Werte stimmen alle! Also an so Sachen wie setLast(Speichert den letzten Punkt) kann es nicht liegen!
Hat jmd vielleicht ne Idee?
Mfg Quh