Punkte auf einem Kreis "wandern" lassen

omikron

Neues Mitglied
Hallo Forum!

Ich habe gerade ein Programm geschrieben mit dem man den Verkehr auf einem Kreis simulieren kann. Das funzt alles bestens. Doch ich möchte das ganze noch grafisch darstellen.

Das Programm manipuliert nur ein Array. Im Array sind die Geschwindigkeiten gespeichert (-1: kein Auto in diesem Feld. 0 bis 5: Auto mit dieser Geschwindigkeit an diesem Ort). Die Länge des Arrays repräsentiert also quasi die Strasse. Ich möchte nun die Autos graphisch als Punkte darstellen und sie auf einem Kreis bewegen. Nun wäre ich dankbar wenn mir jemand sagen kann wie ich das am Besten angehe. Ich habe gedacht ich könnte nach jedem Schritt den Punkt zeichnen, danach die neue Position berechnen, dort den neuen Punkt hinsetzten, und den alten Punkt löschen. Aber leider ist mir diese JPanel Sache noch nicht so geläufig. Darum wäre es nett wenn mir jemand Tipps geben könnte.Danke!

Java:
import java.awt.*;
import javax.swing.*;

public class Road extends JPanel{
	//Instance variables
	
	// road length
	private final int LENGTH = 70;
	
	// vehicles max speed 
	private final int MAX_SPEED = 5;
	
	// total amount of cars on the Road
	private int carsRoad;
	
	double TROEDEL = 0.5;
	
	// the road represented by an array of the speed
	private int speed[];
	
           //constructor	habe ich mal mit geposted ...
	public Road(int carsRoad)
	{
		this.carsRoad = carsRoad;
		
		speed = new int[LENGTH];
		
		int countCars = 0;
		
		for(int i=0;i<LENGTH;i++)
		{
			speed[i] = -1;
		}
		
	
		while (countCars < carsRoad)
	    {
			//randomNumber is below implemented
			int p = randomNumber(LENGTH);		
			if (speed[p] == -1)
			{
				speed[p] = 0;
				countCars++;
			}
	      }	
	}
	
	public void upadateRules()
	{
	//hier wird die Zahl die im Array gespeichert (Geschwindigkeit) für jedes Auto nach diversen Regeln angepasst. Durch wiederholtes Ausführen dieser Methode entsteht dann die eigentliche Simulation.
              
	}

	public void drawCar(Graphics page)
	{
		//TODO
		
	}
	
	public void removeCar(Graphics page)
	{
		//TODO
	}
           
           // for checking issues
	public void checkArray()
	{
		for(int k=0;k<LENGTH;k++)
			System.out.print(speed[k]+ " ");
		
		System.out.print("\n");
	}
	
	

}

Java:
public class Run {

	public static void main(String[] args) {
		
		Road road = new Road(10);
		for(int n=0;n<10;n++)
		{
			road.upadateRules();
			road.checkArray();
		}
		
		
	
	}

}

Beispiel für LENGTH = 10 und 2 Autos:
-1 -1 -1 -1 -1 -1 0 0 -1 -1
-1 -1 -1 -1 -1 -1 0 -1 1 -1
2 -1 -1 -1 -1 -1 -1 1 -1 -1
-1 -1 2 -1 -1 -1 -1 -1 -1 2
-1 2 -1 -1 2 -1 -1 -1 -1 -1
-1 -1 1 -1 -1 -1 2 -1 -1 -1
-1 -1 -1 1 -1 -1 -1 -1 2 -1
2 -1 -1 -1 1 -1 -1 -1 -1 -1
-1 -1 -1 3 -1 -1 2 -1 -1 -1
-1 -1 -1 -1 1 -1 -1 -1 2 -1
 

Marco13

Top Contributor
Um sowas anzuzeigen würde man GANZ grob so eine Klasse haben wie
Java:
class RoadPanel extends JPanel
{
    private Road road; // Wird im Konstruktor übergeben

    @Override
    protected void paintComponent(Graphics g)
    {
        super.paintComponent();

        // Hier die zum Zeichnen benötigten Infos
        // aus der Road-Klasse holen und malen
        int x = road.getCarPosition(i);
        g.fillOval(...x...);
    }

}

Das würde man dann erstellen, und diese Schleife aus der main in einem eigenen Thread laufen lassen, und zwischendurch immer roadPanel.repaint() aufrufen.

Aber WAS genau da ablaufen und angezeigt werden soll, hat sich mir noch nicht erschlossen... Wo ist da ein Kreis...?
 
T

triopsfreak

Gast
Also wenn du es grafisch machen willst, musst du mit Sinus und Cosinus rechnen. Wenn du es mit sysouts machen willst, weiss ich auch nicht weiter :noe:
 

omikron

Neues Mitglied
Ok. Ich habe das array, wo sich die Autos sich fortbewegen. Stimmt sie bewegen sich noch nicht auf einem Kreis. Doch ich habe es so eingerichtet, dass ein Auto,das am Ende des Arrays ist, anschliessend wieder am Anfang des Arrays weiterfährt.
Nun wenn ich das als Kreis darstellen will, muss ich mathematisch wie folgt forgehen:

Grad pro Fahrzeug: 2Pi/LENGTH

Winkel phi eines Fahrzeuges: phi=(2PI/LENGTH)*(abstandZweierAutos)

hier ist sonst noch die updateRules Methode der Road Klasse:
Java:
	public void upadateRules()
	{
	
		int gap;
	
		//for counting issues
		int positionPointer = 0;

		// this while loop looks for the first car in the array
		while(positionPointer<LENGTH && speed[positionPointer]==-1)
		{
			positionPointer++;
		}
			
		while(positionPointer<LENGTH)
		{
			gap = positionPointer + 1;
			
			while(speed[gap%LENGTH]==-1)
			{	
				gap++;		
			}
						
			gap = gap - (positionPointer +1);
					
			//2 Slow down take it easy!  
			
			if(speed[positionPointer] > gap)
			{
				speed[positionPointer] = gap;
			}
			
			//1 Car has to slow down if the cap is smaller than its velocity 
			if(speed[positionPointer] < gap)
			{
				speed[positionPointer] = Math.min(speed[positionPointer]+1,MAX_SPEED);
			}
						
			if(speed[positionPointer]>0 && Math.random()<= TROEDEL)
			{
				speed[positionPointer] = Math.max(speed[positionPointer]-1, 0);
			}
			
			
			
			
			positionPointer = positionPointer+gap+1;
		}
		
		positionPointer = 0;
		
		//look again for the first car in the array
		while(positionPointer<LENGTH && speed[positionPointer]==-1)
		{
			positionPointer++;
		}
		
		
		while(positionPointer < LENGTH)
		{
			int nextPosition;
			int m;
			
			nextPosition = (positionPointer + speed[positionPointer]); 
			m = nextPosition%LENGTH;
			
			if(positionPointer != m)
			{
				//Position changed but velocity stays the same
				speed[m] = speed[positionPointer];
				speed[positionPointer]= -1;
			}
			
			//car ahead
			nextPosition = nextPosition+1 ;
			while(speed[nextPosition%LENGTH] == -1)
			{
				nextPosition++;
			}
			positionPointer = nextPosition;
		}
	
	}

Die Autos können also beliebig lange auf der Strecke fahren. Diese Bewegung kann man wie ich oben erwähnt habe als Kreis darstellen.

Ist Kreismittelpunkt: (kmx,kmy)
Koordinaten für die Punkte der Fahrzeuge: (xkm+cos(phi)*radius,ykm+cos(phi)*radius)

Ist es immer noch zu unverständlich?:oops: dann bitte melden ...

mfg omikron
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Algorithmus für Punkte auf einem Kreis Java Basics - Anfänger-Themen 0
M Was bedeuten die Drei Punkte in einem Methodenkopf? Java Basics - Anfänger-Themen 3
G Kann man in einem Dokument alle Kommas in Punkte umwandeln? Java Basics - Anfänger-Themen 10
XWing Random Punkte erstellen mit der Random klasse Java Basics - Anfänger-Themen 15
K Klassen Klasse erstellen, die Punkte eines Koordinatensystems repräsentiert? Java Basics - Anfänger-Themen 3
B Markieren einzelner Punkte in JFreeChart Java Basics - Anfänger-Themen 1
L0MiN Erste Schritte Neue Punkte zu einer Map hinzufügen und dauerhaft speichern? Java Basics - Anfänger-Themen 4
J Punkte im Java-Applet verbinden Java Basics - Anfänger-Themen 4
P Punkte anhand 3. Koordinate vergleichen Java Basics - Anfänger-Themen 3
H Punkte werden falsch verbunden Java Basics - Anfänger-Themen 6
M Double Punkte Zeichnen Java Basics - Anfänger-Themen 7
T mehrere Punkte zeichnen ohne löschung Java Basics - Anfänger-Themen 4
J Punkte hinzufügen Tabelle Java Basics - Anfänger-Themen 5
P Pythagoras Baum - Berechnung der Punkte Java Basics - Anfänger-Themen 9
M Polygon Punkte im Uhrzeigersinn sortieren Java Basics - Anfänger-Themen 2
0 Auf Karte in Planquadrate Punkte zeichnen? Java Basics - Anfänger-Themen 2
B Bitte um Hilfe es geht um Array + Punkte wie Dreieck,Fläche etc. Java Basics - Anfänger-Themen 12
T Punkte nicht löschen Java Basics - Anfänger-Themen 14
K Punkte verschieben Java Basics - Anfänger-Themen 6
M Abstand 2er Punkte (Klassen) Java Basics - Anfänger-Themen 11
J punkte verschwinden beim neuzeichnen neuer punkte Java Basics - Anfänger-Themen 11
P Hilfe für JComboBox, bmp einbinden/bestimmte punkte auf bmp Java Basics - Anfänger-Themen 3
Z Punkte, Koordinanten, Geraden zeichnen lassen Java Basics - Anfänger-Themen 8
V String überprüfen, nur Punkte und Zahlen erlaubt Java Basics - Anfänger-Themen 7
P Anzahl der Punkte in einer IP Adresse zählen? Java Basics - Anfänger-Themen 20
B 2D Punkte erstellen und ihre Länge berechnen/Problem this. Java Basics - Anfänger-Themen 3
J Punkte Noten zuweisen Java Basics - Anfänger-Themen 6
M Datumsausgabe als String ohne Punkte erzeugen! Java Basics - Anfänger-Themen 5
T Matrix - äußerste Punkte pro Zeile Java Basics - Anfänger-Themen 7
A Punkte automatisch verbinden? Java Basics - Anfänger-Themen 3
K Mehrere Werte in einem Switch Case parallel überprüfen Java Basics - Anfänger-Themen 23
Zrebna Fragen zu einem Klassendiagramm Java Basics - Anfänger-Themen 8
S HashMap mehrere Keys zu einem Value Java Basics - Anfänger-Themen 3
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
F 2x 16bit Werte zu einem 32bit und dann splitten mit 0xb Java Basics - Anfänger-Themen 1
J JSON mit einem JPanel Java Basics - Anfänger-Themen 3
F Einem GIT repository ein Projekt hinzufügen Java Basics - Anfänger-Themen 1
J Frage zu einem "Taschenrechner" code Java Basics - Anfänger-Themen 9
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
J Schlüsselworte Prüfen, ob ein bestimmtes, ganzes Wort in einem String enthalten ist. Java Basics - Anfänger-Themen 6
P Probleme mit NetBeans: Wie lässt sich jar. Datei an einem MacBook öffnen Java Basics - Anfänger-Themen 21
J Auf einem JLabel Linien Malen Java Basics - Anfänger-Themen 1
I @Entity Klassen, Service Beans etc. aus einem Share Projekt beziehen? Java Basics - Anfänger-Themen 26
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
XWing Randomizer mit einem String Java Basics - Anfänger-Themen 2
D OOP Array einem Objekt zuweisen Java Basics - Anfänger-Themen 2
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
S Bestimmte werte aus einem Array löschen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
N Einzelne Werte aus einem TreeSet auslesen Java Basics - Anfänger-Themen 2
N Welche Objekte kann man zu einem Set hinzufügen Java Basics - Anfänger-Themen 4
Kumora ArrayIndexOutOfBoundsException bei einem Sortierverfahren Java Basics - Anfänger-Themen 2
I Viereck / Rechteck Prüfung innerhalb einem bestimmten Bereich Java Basics - Anfänger-Themen 2
Distanz zwischen zwei Zeichenfolgen in einem String bestimmen Java Basics - Anfänger-Themen 5
Substring in einem String finden Java Basics - Anfänger-Themen 13
J Fehlerbehandlung an einem Beispiel Java Basics - Anfänger-Themen 8
I ResultSet aus meiner SQL-Abfrage in einem JTextfield ausgeben. Java Basics - Anfänger-Themen 1
I Innerhalb einem Bild ein Teil austauschen Java Basics - Anfänger-Themen 26
I Dateigröße von einem InputStream oder byte[] bekommen Java Basics - Anfänger-Themen 2
H Compiler-Fehler Klasse in einem Package wird nicht gefunden bzw. akzeptiert Java Basics - Anfänger-Themen 12
S Algorithmus entwicklen, der zu einem gegebenen Datum die Jahreszeit ermittelt Java Basics - Anfänger-Themen 13
B In einem Thread Endlosschleife beenden Java Basics - Anfänger-Themen 19
A Elemente in einem Array Java Basics - Anfänger-Themen 5
G Position einer unbekannten 3-stelligen-Zahl in einem String finden Java Basics - Anfänger-Themen 15
S Eine Variable in einem Array speichern Java Basics - Anfänger-Themen 5
T Methode, die prüft ob in einem Int-Array maximal 2 Zahlen enthalten sind, die größer als ihr Vorgänger sind Java Basics - Anfänger-Themen 5
berserkerdq2 Wie gebe ich den Pfad zu einer Datei an, die in einem Ordner in Eclipse ist? Java Basics - Anfänger-Themen 1
M Objekt in einem Objekt speichern Java Basics - Anfänger-Themen 9
J Speichern von zwei Variablen durch Auslesen aus einem Numberfield Java Basics - Anfänger-Themen 2
L Gridmuster in einem Array Java Basics - Anfänger-Themen 2
D spezifische Knoten in einem Baum zählen Java Basics - Anfänger-Themen 9
X Erste Schritte Hilfe bei einem kleinen Spiel. Java Basics - Anfänger-Themen 19
O Array mit einem Zeichen vergleichen Java Basics - Anfänger-Themen 1
B Brauche Hilfe zu einem Code Java Basics - Anfänger-Themen 5
J Zahlen bis zu einem bestimmten Grenzwert ausgeben Java Basics - Anfänger-Themen 11
P9cman Vokale in einem String überprüfen mittels Rekursion Java Basics - Anfänger-Themen 8
M Wie kann ich eine Methode aus einem Interface in eine Klasse implementieren, so dass sie ihre Funktion ausführt? Java Basics - Anfänger-Themen 7
M Wie kann ich in einem Konstruktor die Methode eines anderen Interfaces mit den jeweiligen Parametern aufrufen? Java Basics - Anfänger-Themen 8
Igig1 Wie lasse ich dir Werte in einem Array zusammenrücken? Java Basics - Anfänger-Themen 4
W Methode, die mit einem Datum arbeitet? Java Basics - Anfänger-Themen 22
Igig1 Welche Werte sind als default Werte in einem Array, der als Datentyp eine Klasse hat? Java Basics - Anfänger-Themen 1
Kiki01 Wie würde eine geeignete Schleife aussehen, die die relative Häufigkeit für jeden Charakter in einem Text bestimmt? Java Basics - Anfänger-Themen 3
C Hilfe bei einem Anfängerprojekt Java Basics - Anfänger-Themen 25
U Char zu einem String machen Java Basics - Anfänger-Themen 1
U Kann man bei Java gleich mehrere Bedingungen prüfen in der If, aber in einem "Satz"? Java Basics - Anfänger-Themen 1
Schniffi Nur bestimmte Bilder aus einem Array auf Image Button anzeigen lassen Java Basics - Anfänger-Themen 3
S Längster Pfad zwischen zwei Vertices in einem Graph Java Basics - Anfänger-Themen 3
I Upload File zu einem Webservice Java Basics - Anfänger-Themen 17
Naxon89 Input/Output Ein PDF in einem BLOB umwandeln um ihn dann als PDF wieder anzuzeigen Java Basics - Anfänger-Themen 3
Kotelettklopfer Mehrere Projekte in einem Git verwalten Java Basics - Anfänger-Themen 10
B in einem Array den nächstgelegenen Wert zu einem eingabewert finden Java Basics - Anfänger-Themen 8
E JPanels auf gleicher Höhe (Y-Achse) in einem FlowLayout platzieren Java Basics - Anfänger-Themen 7
N Aus einem String die Anzahl der Vokale auslesen Java Basics - Anfänger-Themen 40
C Programm das feststellen kann, ob eine eingegebene Zahl einem Schaltjahr entspricht, richtig geschrieben? Java Basics - Anfänger-Themen 11
M Von einem Menü Methode aus anderer Klasse ausführen, die errechnete Werte in Datei schreibt. Java Basics - Anfänger-Themen 8
A Zu einem bestimmten Ort im Code springen Java Basics - Anfänger-Themen 11
I Validation, ob String ein Wert aus einem Enum enthält Java Basics - Anfänger-Themen 3
B Häufigkeit einzelner Zahlen in einem Array Java Basics - Anfänger-Themen 6
D Zufällige Auswahl aus einem angelegten Array? Java Basics - Anfänger-Themen 10
A Löschen von Leerzeichen in einem char array ohne methoden Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben