Kurven zeichnen

Potti

Neues Mitglied
Ich habe ein Problem und hoffe ihr könnt mir erneut helfen :)
Ich möchte noch nicht einmal unbedingt, dass ihr mir komplette Lösungen vorschlagt ich möchte vielmehr Lösungsansätze :p

Hier mein Problem:
Wir möchten "Achtung die Kurve" in der Schule programmieren falls ihr das Spiel nicht kennen solltet klickt mal hier: Achtung die kurve flash - Endlosspielen.de Kostenlose Spiele Minigames gratis spielen
Man lässt eine Linie in eine Richtung streben und kann diese durch 2 tasten ändern, wenn man eine taste gedrückt halt "fährt" die Linie einen Kreis
Nun wüsste ich gerne von euch wie ich es am besten realisieren kann, dass die Steuerung über 2 Knöpfe
diese Richtungsänderung bewirkt. Wie komme ich an eine Lösung? vielleich über die Berechnung der Steigung meines zweit letzten Punktes zum letzen Punkt? oder habt ihr andere Ideen?

Hier mein Code den ich bisher habe:
durch gedrückthalten der linken maustaste fährt der strich nach links durch drücken der rechten nach rechts aber nach den drücken soll der strich dann auch in die richtung streben und nicht nur ein stück weiter nach rechts oder links "fahren"


Java:
import java.awt.*;
import java.awt.event.*;
import java.awt.Point;
import javax.swing.*;
import java.util.ArrayList; 


public class Spielfeld2 extends JFrame{

        JPanel spielfeld  = new JPanel();
        Spielflaeche spielflaeche = new Spielflaeche();
        int xkoord = 200;
        int ykoord = 0;
        ArrayList<Point> koordAL = new ArrayList<Point>();
        int lpressed = 0;
        int rpressed = 0;
        Point koord;
        int[] xkoordA =new int[1000];
        int[] ykoordA =new int[1000];

        class Zeichnen extends Thread {
           public void run() {
               for(int  i = 0; i<950; i++){
                 try{
                     sleep(7);
                 }
                 catch(InterruptedException e) {
                 }
                 ykoord++;
                 koordAL.add(new Point(xkoord, ykoord));
                 
                 for(int i2 = 0; i2 < koordAL.size(); i2++){
                 koord = koordAL.get(i2); 
                 xkoordA[i2] = koord.x; 
                 ykoordA[i2] = koord.y;                 
                }                
                 if (lpressed==1){
                     xkoord++;
                    }
                 if (rpressed==1){
                     xkoord--;
                    }
                 add("Center", spielflaeche);
                 repaint();              
            }
        }
    }
        
        class Spielflaeche extends JPanel {

            Spielflaeche() {
               setLayout(null);
               setBackground(Color.red);
            }
            public void paintComponent(Graphics g) {    
              g.setColor(Color.black);
              g.fillRect(0,0,getWidth(), getHeight());
              g.setColor(Color.white);
              for(int i = 0; i <= koordAL.size(); i++){
               g.drawOval(xkoordA[i],ykoordA[i],5,5);
               g.fillOval(xkoordA[i],ykoordA[i],5,5); 
              }
              g.drawLine(66,77,66,ykoord);
            }
            
        }
        
    public Spielfeld2()
    {
        super ("ADK");
        initFrame();
        addMouseListener(new MyMouseListener());
    }
   
    public void initFrame() {
        spielfeld.setLayout(new BorderLayout());   
        setSize(1000,1000);      
        add("Center", spielflaeche);
        Zeichnen ausgabe = new Zeichnen();
        ausgabe.start();        
         setVisible(true); 
        }

    class MyMouseListener extends MouseAdapter
           {
               Graphics g = getGraphics();
              public void mousePressed(MouseEvent event)
              {
                   if (event.getModifiers() == 4) { 
                       rpressed = 1;
                }
                else if (event.getModifiers() == 16) { 
                       lpressed = 1;
                }                       
              }
              public void mouseReleased(MouseEvent event)
              {

                 lpressed = 0;
                 rpressed = 0;
                 
                }     
    }
}
 
S

SlaterB

Gast
nette Aufgabe,
wichtig ist dass du ein dauerhaftes Klassenattribut zur Richtung hast, welches bei gedrückter Änderung eben auch kontinuierlich modifiziert wird,
danach nur noch aus dieser Richtung ständig die neue Position berechnen,
auf genaue int-Schritte dabei verzichten, lieber die aktuelle Position double-genau abspeichern, damit sich jede winzige Richtungabweichung dann eben erst alle drei Schritte in einem Pixel bemerkbar macht,
für x/y des nächsten Punktes dann runden

hier ein Beispiel, die geänderten Stellen deines Programms:
Java:
	double xk = 200;
	double yk = 50;
	int dir = 180;
	int lpressed = 0;
	int rpressed = 0;
	int count = 0;
	Point koord;
	int[] xkoordA = new int[1000];
	int[] ykoordA = new int[1000];

	class Zeichnen extends Thread {
		public void run() {
			for (int i = 0; i < 950; i++) {
				try {
					sleep(50);
				} catch (InterruptedException e) {
				}
				double rad = Math.toRadians(dir);
				xk += Math.sin(rad);
				yk -= Math.cos(rad);
				xkoordA[count] = (int) xk;
				ykoordA[count] = (int) yk;
				count++;
				if (lpressed == 1) {
					dir += 4;
				}
				if (rpressed == 1) {
					dir -= 4;
				}
				dir = (dir + 360) % 360; // zwischen 0 und 360 bleiben

				add("Center", spielflaeche); // das reicht wohl einmal am Anfang..
				repaint();
			}
		}
	}
dir ist Richtung in Grad, 0 nach oben, 180 nach unten,
das sleep habe ich etwas hochgesetzt, die Änderung von dir kann auch ein anderer Wert als 4 sein,
> xk += Math.sin(rad);
rechnet die neue Position aus, da kann auch *2 oder so dranstehen, probiere alles aus, vollziehe nach was sich dann ändert bzw. wie die Rechnungen überhaupt ablaufen

> ArrayList<Point> koordAL
habe ich vorerst entfernt, hatte keine Funktion außer dass da ständig kopiert wurde,
bei 500 Elementen macht 30x alles ins Array kopieren pro Sekunde schon was aus..

langfristig ist die Liste aber besser, da dort beliebig viele Elemente reinpassen, damit kannst du auch zeichnen,
beim Zeichnen kann man viel optimieren, jedesmal alle Elemente neu ist ähnlich aufwendig wie das Kopieren der Liste,
wenn du auf einem BufferedImage malst kannst du den alten Stand behalten und musst nur die neuesten Änderungen ergänzen,
oder male eine gesammte Schlange als Polygon,
viele Möglichkeiten, musst nicht alle jetzt schon kennen
 
Zuletzt bearbeitet von einem Moderator:
4

47fhr34h

Gast
kann mir bitte jemand helfen ich weiß nicht was ich machen soll, biiiittte!!!!


Java:
package Geometrie;

import java.awt.geom.Point2D;
import java.awt.geom.QuadCurve2D;

public class QuadBeziercurve extends QuadCurve2D.Double {

	public QuadBeziercurve() {
		super();
		// TODO Auto-generated constructor stub
	}

	public QuadBeziercurve(double p0x, double p0y, double p1x,
			double p1y,double p2x, double p2y) {
		super(p0x, p0y, p1x, p1y, p2x, p2y);
		
	}
  
	//Punkt auf der Kurve bestimmen
	public Point2D getPoint (double t){
		if (t<0 || t>1)
			return null;
		else {
	
	//Berechnungsformel
	double x = this.x1*(1-t)*(1-t)+2*t*(1-t)*this.ctrlx+t*this.x2;
	double y = this.y1*(1-t)*(1-t)+2*t*(1-t)*this.ctrly+t*this.y2;
	
	return new Point2D.Double(x,y);
	
 }
	}
	
	//Kurvenlänge bis t
	public double getLength (double t){
		double eps = 1;		
	   //TODO
		return 0;
	}
    //Punkt mit Abstand a von der Kurve in t
	public Point2D getPoints (double t, double a){
		
	//bestimmen des Punktes für t
		
		 
	//bestimmen der Tangente
	
	
		
	//vektorielle Addition und Multiplikation	
	

	   }
		
	}
 
Zuletzt bearbeitet von einem Moderator:
T

Trolllllll

Gast
den Java-Tag verwenden [ JAVA][ /JAVA]
und warum Postest du das in der geklärten Frage von 2010?
 
S

SlaterB

Gast
Tipp 1:
eigenes Thema eröffnen
Tipp 2:
bevor du andere fragst wenigstens darüber klar werden, was du haben möchtest, das dann auch formulieren

'ich weiß nicht was ich machen soll'
klingt recht deutlich in der Hinsicht, aber ist ja kaum eine Grundlage,
wenn ich dir jetzt schreibe 'trink ein Glas Cola' dann wirst du wohl doch beurteilen, dass das nicht deinen Zielen entspricht,
oder in Gottvertrauen folgen und zufrieden sein?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Linien und Kurven erkennen Java Basics - Anfänger-Themen 2
A double and add algorithmus für elliptische kurven/ integer binär darstellen Java Basics - Anfänger-Themen 14
J SWING UI Designer und zeichnen Java Basics - Anfänger-Themen 4
luggas89 Mit Jframe live zeichnen Java Basics - Anfänger-Themen 4
K 3D Fläche Zeichnen Java Basics - Anfänger-Themen 2
J Bild auf Hintergrundbild zeichnen Java Basics - Anfänger-Themen 5
R Iterativ zeichnen Java Basics - Anfänger-Themen 1
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
P JFrame, Linien zeichnen, MouseListener Java Basics - Anfänger-Themen 2
KogoroMori21 Mit einer Schleife eine Treppe zeichnen Java Basics - Anfänger-Themen 29
V Speicherzustand zeichnen Java Basics - Anfänger-Themen 0
O Klappt nicht: Ein Panel neu zeichnen Java Basics - Anfänger-Themen 3
CptK Interface Bilder mit Graphics g zeichnen Java Basics - Anfänger-Themen 7
B Java JFrame zeichnen Java Basics - Anfänger-Themen 4
Mosquera f(x)=x² zeichnen Java Basics - Anfänger-Themen 5
J Graphen in Java zeichnen Java Basics - Anfänger-Themen 11
L Anfängerin möchte Linie zeichnen Java Basics - Anfänger-Themen 8
D JPanel mehrere Formen zeichnen Java Basics - Anfänger-Themen 5
S Zeichnen mit Wiederholungen Java Basics - Anfänger-Themen 12
B Wie kann ich Linien rekursiv zeichnen? Java Basics - Anfänger-Themen 4
P Einen String mittig zeichnen? Java Basics - Anfänger-Themen 1
T Koordinatensystem zeichnen - Variablen merken? Quadratische Funktion zeichnen? Java Basics - Anfänger-Themen 5
M Ein Bild durch Objekterzeugung zeichnen Java Basics - Anfänger-Themen 5
W Wie kann ich in Java eine Kurve aus Punkten zeichnen? Java Basics - Anfänger-Themen 25
snipesss Linie zeichnen ohne extra Klasse? Java Basics - Anfänger-Themen 3
C Umrisse von Bilddateien mithilfe Polygonen zeichnen Java Basics - Anfänger-Themen 5
G Aus einem Code ein Sequenzdiagramm zeichnen? Java Basics - Anfänger-Themen 1
K Rechtecke rekursiv zeichnen Java Basics - Anfänger-Themen 20
V Quadrate rekursiv zeichnen Java Basics - Anfänger-Themen 7
B Java Graphen zeichnen - Brauche Hilfe Java Basics - Anfänger-Themen 9
C Schleifenaufgabe - Molekül zeichnen Java Basics - Anfänger-Themen 6
K Ungenauigkeit beim Zeichnen von Funktionen Java Basics - Anfänger-Themen 6
H Linie zeichnen... Java Basics - Anfänger-Themen 16
N Treppe zeichnen Java Basics - Anfänger-Themen 1
M Quadrat zeichnen einfach bitte! Java Basics - Anfänger-Themen 2
P Shape Zeichnen klappt nicht - einlesen der Breite/Höhe schon Java Basics - Anfänger-Themen 1
M in Java zeichnen Java Basics - Anfänger-Themen 2
J JLabel Icon neu zeichnen Java Basics - Anfänger-Themen 2
J Rechteck zeichnen mit Canvas Java Basics - Anfänger-Themen 7
D Zeichnen, Schleifen Java Basics - Anfänger-Themen 7
S Zeichnen , Schleifen Java Basics - Anfänger-Themen 4
S Rechteck zeichnen Java Basics - Anfänger-Themen 2
S Ein Graphics Obejct mehrmals mit denselben Eigenschaften zeichnen lassen?!?!? Java Basics - Anfänger-Themen 4
S Wo beginnt ein Draw String zu zeichnen. Java Basics - Anfänger-Themen 4
S Paint Anwendung: Freihandlinien zeichnen Java Basics - Anfänger-Themen 4
llabusch Layout neu zeichnen lassen Java Basics - Anfänger-Themen 2
A Histogramm zeichnen Java Basics - Anfänger-Themen 2
S Punkt in Java zeichnen Java Basics - Anfänger-Themen 14
E Dreieck zeichnen Java Basics - Anfänger-Themen 3
gamebreiti Methoden JPanel nach clearAll() und add neu zeichnen Java Basics - Anfänger-Themen 1
T Baum mit Turtle zeichnen Java Basics - Anfänger-Themen 2
C Hilfe beim Zeichnen Java Basics - Anfänger-Themen 8
D Haus zeichnen Java Basics - Anfänger-Themen 4
K Methoden Objekt auf JFrame zeichnen Java Basics - Anfänger-Themen 16
H 27 Kreise Zeichnen Java Applet Java Basics - Anfänger-Themen 2
S Problem mit "Zeichnen auf Kommando" Java Basics - Anfänger-Themen 2
M Double Punkte Zeichnen Java Basics - Anfänger-Themen 7
S Funktionen zeichnen Java Basics - Anfänger-Themen 2
2 Bild auf JApplet zeichnen Java Basics - Anfänger-Themen 18
R 2D Grafik zeichnen Java Basics - Anfänger-Themen 4
F Line zeichnen und Werte ändern Java Basics - Anfänger-Themen 6
B Grafik zeichnen Java Basics - Anfänger-Themen 25
B Erste Schritte Weihnachtsbaum zeichnen Java Basics - Anfänger-Themen 6
N Per Button Kreis zeichnen Java Basics - Anfänger-Themen 8
T mehrere Punkte zeichnen ohne löschung Java Basics - Anfänger-Themen 4
J Für 3 Sekunden etwas bestimmtes zeichnen Java Basics - Anfänger-Themen 8
C Kreis nach Mausklick zeichnen Java Basics - Anfänger-Themen 5
C Auf Button-Druck zeichnen Java Basics - Anfänger-Themen 2
R Methoden Zeichnen auf Button-Druck durch Paint-Methode Java Basics - Anfänger-Themen 2
D Klassen Zeichnen von Figuren mittels vorgegebener Klasse Java Basics - Anfänger-Themen 3
J Schachbrett zeichnen Java Basics - Anfänger-Themen 9
J Innerhalb der Border zeichnen Java Basics - Anfänger-Themen 9
J Hoher Speicherverbrauch beim Zeichnen von Images aus einer ArrayList Java Basics - Anfänger-Themen 10
A Blitze mit Linien zeichnen Java Basics - Anfänger-Themen 15
U Kreis um Textfelder zeichnen Java Basics - Anfänger-Themen 4
R Balkendiagramm zeichnen Java Basics - Anfänger-Themen 14
J Bild anhand von Koordinaten zeichnen Java Basics - Anfänger-Themen 10
B GUI Parkplatz zeichnen Java Basics - Anfänger-Themen 10
S Mehrere Zeichnungen zeichnen Java Basics - Anfänger-Themen 16
A Linie Zeichnen Applet mit Double Wert Java Basics - Anfänger-Themen 3
F Image übertragen und zeichnen Java Basics - Anfänger-Themen 8
P Funktion zeichnen Java Basics - Anfänger-Themen 6
Q Zeichnen außerhalb der paint-methode Java Basics - Anfänger-Themen 7
F zeichnen in JPanel Java Basics - Anfänger-Themen 7
T Transparente Bilder mit Graphics zeichnen Java Basics - Anfänger-Themen 17
T Sterne zeichnen Java Basics - Anfänger-Themen 4
M Bilder laden und zeichnen Java Basics - Anfänger-Themen 3
G Polygon in Frame zeichnen Java Basics - Anfänger-Themen 3
S X Zeichnen als Muster ausgeben Java Basics - Anfänger-Themen 5
I dauerhaftes zeichnen Java Basics - Anfänger-Themen 3
H Zeichnen in JPanel Java Basics - Anfänger-Themen 8
W Funktions-Graphen "zeichnen" Java Basics - Anfänger-Themen 2
J Bilder auf Bilder zeichnen Java Basics - Anfänger-Themen 8
I Rechteck Zeichnen Java Basics - Anfänger-Themen 9
W Zeichnen in Swing Java Basics - Anfänger-Themen 7
N Linie auf spezielle Area zeichnen Java Basics - Anfänger-Themen 9
K Auf JPanel Zeichnen Java Basics - Anfänger-Themen 8
E Frame neu Zeichnen Java Basics - Anfänger-Themen 3
D Problem beim Zeichnen von "Das Haus vom Nikolaus" Java Basics - Anfänger-Themen 10
M Farbiges Rechteck zeichnen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben