# Wie ein viereck eine Kurve fahren lassen?



## NatroN (19. Apr 2005)

Hallo!

In nem anderen Thread hab ich erwähnt, dass ich eine Autobahnauffaht simulieren muss.

Ein wichtiges Problem hierbei ist, dass ich das auto ja in einer Kurve fahren lassen muss.

Hier ein bild

http://www.grojer.at/natron/Schule/Auffahrt.jpg

dachte ich mach es mit den 4 punkten und einem polygon aber wie ermittle ich die 4 punkte am besten ständig?

mfg


----------



## AlArenal (19. Apr 2005)

Was für 4 Punkte?


----------



## NatroN (19. Apr 2005)

die 4 eckpunkte des Autos (das durch ein rotes viereck dargestellt wird)


----------



## AlArenal (19. Apr 2005)

Verstehe nicht, warum die Position des Autos ermitteln willst. Ich denke es geht darum das Auto zu steuern, also setzt du doch die Position.


----------



## NatroN (19. Apr 2005)

ich steuere nur die geschwindigkeit, auf der spur sollte das auto selbst fahren.


----------



## AlArenal (19. Apr 2005)

Und hat das Auto keine Methode getPosition() o.ä.?


----------



## NatroN (19. Apr 2005)

das Auto ist nur ein Viereck das in der paint Methode gezeichnet wird. und ich brauch nur eine art formel o.ä. damit ich mir die jeweiligen Eckpunkte errechnen kann.


mfg


----------



## AlArenal (19. Apr 2005)

Verstehe ich nicht. Vielleicht bin ich dumm.

Erstellst du nun das komplette Programm oder nicht? 

Wenn ja:
Was hält dich davon ab ein Auto-Objekt zu haben, das selber weiß, wohin es sich gezeichnet hat (am besten zeichnet es sich selbst) und das du entsprechend abfragen kannst?

Wenn nein:
Wie war doch genau die Aufgabe?


----------



## NatroN (19. Apr 2005)

ja ich muss das gesamte programm erstellen.

Die aufgabe lautet (in etwa):
Ein Spiel ist zu programmieren. Bei diesem Spiel gibt es eine Autobahn, auf welcher Autos fahren (dargestellt durch vierecke) 
Auf diese Autos hat der Spieler keinen Einfluss (sie kommen zufällig, aber immer mit der selben geschwindigkeit (wie auf der AB ja meist üblich)

Desweiteren gibt es ein Auto (dargestellt durch ein viereck) dass die AB Auffahr auffährt. Es hält die richtige spur von alleine. Der Spieler hat die Aufgabe die geschwindigkeit des auffahrenden Autos so zu beeinflussen (mittels slider aber das funkt schon) dass es keinen crash gibt.


Kurz: Ein viereck fährt eine kurve entlang.  Die Geschwindigkeit des viereckes muss geregelt werden. Sonst nichts.


----------



## AlArenal (19. Apr 2005)

Ok.. und jedes Auto ist eine Instanz einer Automobil-Klasse und kann sich selbst zeichnen und seine Position zurückliefern.

Wenn du doch alles selbst coden kannst / muss, verstehe ich das Problem noch weniger. Über einen Timer gesteurt bewegen sich die Wagen. Wenn ich das richtig verstehe, hast du das bereits umgesetzt. Die Laufbahn des Wagens ist fest vorgegeben (Hast du die schon implementiert?), die Steuerung hast du schon fertig.

Wieso musst du nun die Position des Wagens ermitteln? Wenn du das Teil an die richtige Stelle zeichnen kannst, wirste dir doch wohl auch merken lassen können, WO du es hingezeichnet hast, oder?

Die Kollisionsabfrage ist auch nicht weiter wild, weils ja alles Rechtecke sind...


----------



## NatroN (19. Apr 2005)

Naja, leider hab ich net soo viel Ahnung von der Sache..

Was man derzeit am Bildschirm sieht:
eine Straße (einfach in der PaintComponent gezeichnet)
ein Auto dass von links nach rechts fährt (daweil nur gerade)
einen Start/Stop ToggleButton
einen Slider, über den ich die Geschw. des Autos einstellen kann.

Was mir fehlt ich aber schaffen könnte:
Autos, welche sich nicht in der geschw. einstellen lassen, und zufällig kommen - also Abstand zw. autos verschieden .. von ca. 5 px bis 200px oder mehr)

Was mir fehlt und wo mir im Moment auch der Plan fehlt:
Die Laufbahn des verstellbaren Autos 
Wie ich den Crash rausfinden kann.

Wenn du willst kann ich dir auch mal den Quellcode zukommen lassen...

echt super dass du mir helfen willst, obwohl ich mich so ungeschickt anstelle


----------



## Wildcard (19. Apr 2005)

Ich würd auch eher dazu pledieren das du eine eigene Auto Klasse machst (steuerbares Auto erweitert Auto) die
sich selbst zeichnen kann.
Die Kollision kannst du einfach mit einem Rectangle Objekt prüfen, das sollte weiter kein problem sein...


----------



## NatroN (19. Apr 2005)

wow.. ich hab aber keine ahnung wie ich das anstellen soll? Willst ma da helfen?!


----------



## Wildcard (19. Apr 2005)

Du hast ein Panel. Auf dem Panel liegen Autos.
Autos haben mindestens eine getBounds(), eine draw() Methode und eine setLocation Methode.
Der drawMethode übergibst du das Graphics Object des Panels. Die Autos zeichnen dann sich selbst in ihren Bounds.
SteuerbaresAuto erweitert Auto um getSpeed() setSpeed() und intersects(Auto) (um einen Crash festzustellen).
kA wie bei dir die Fahrbahn gespeichert ist, und was das Auto dann genau machen soll, also sag ich dazu mal nichts.
Versuch mal wie weit du damit kommst, bei Problemen kannst du ja fragen...  :wink:


----------



## NatroN (19. Apr 2005)

ok.. 

also eine class Datei Autos, sollte soweit noch kein Problem sein.

Der Rest aber schon ich verstehe gar nichts davon.....


Fahrban ist einfach nur:

 		screen.setColor(new Color(155,155,155));
  	screen.fillRect(0,150,800,60);
  	screen.fillArc(400,150,600,540,90,90);
  	screen.setColor(new Color(255,255,255));
  	screen.fillArc(460,210,540,480,90,90);
		screen.setColor(new Color(0,0,0));

sonst nix!


----------



## Wildcard (19. Apr 2005)

NatroN hat gesagt.:
			
		

> Fahrban ist einfach nur:
> 
> screen.setColor(new Color(155,155,155));
> screen.fillRect(0,150,800,60);
> ...


Das musst du schon irgendwie abstrahieren und in eine Datenmodel packen(allein schon wegen flexibilität usw.), sonst kommst du glaub ich nicht weit


----------



## NatroN (19. Apr 2005)

öhm.. wie gesagt.. bin anfänger und weiß schon wieder nicht was du damit meinst 

wie ich das in ein datenmodell packen soll usw.


----------



## Wildcard (19. Apr 2005)

Überleg dir eine sinnvolle form wie du diese Daten festhalten willst.
Schließlich könntest du ja mal auf die Idee kommen eine andere Strecke zu machen, oder sogar einen
Leveleditor. Wenn du eine form gefunden hast kannst du dir überlegen wie sich das auto verhalten soll.


----------



## NatroN (19. Apr 2005)

lol!

Nein soweit will ich mich nicht aus dem Fenster lehnen! Es bleibt immer Gleich (ca. wie aufn Bild auf der ersten Seite) . Hätte ja auch net viel sinn, weil man ja eh nur den Speed verändern kann. Also ist ja egal ob es eine Kurve mehr oder weniger ist.

Es geht Nur darum, beim Auffahren keinen Kontakt mir einem andern auto zu haben.


----------



## Wildcard (19. Apr 2005)

Die Kollision mit anderen Autos ist nicht schwierig.
Das problem ist eher wie das Auto die Strecke fahren soll. Kennt es die Strecke und fähr eine perfekte Kurve,
oder versucht es nicht anzustoßen, oder...


----------



## NatroN (19. Apr 2005)

es fährt einfach nur die Kurve.. wie auf schienen..

verhindern kann es nur der benutzer durch die einstellung der richtigen geschw. 

mfg


----------



## Wildcard (19. Apr 2005)

Wenn es auf der Kurve fährt muss es doch aber die Kurve kennen, also sind das Informationen die du ihm
irgendwie bereitsellen musst. Mit dem was du zeichnest kann das Auto nämlich nichts anfangen...


----------



## NatroN (19. Apr 2005)

und genau damit sind wir bei der grundfrage 

Bin mit jeder Lösung einverstanden,  auch wenn ich die Kurve irgendwie anders darstellen oder speicher muss.. 

Solang du mir sagst was genau ich machen muss 

Aber eine kleine beifügung hab ich noch. Straßen sind breiter als autos.. Straße sollte also etwas breiter sein als die Autos


----------



## Wildcard (19. Apr 2005)

Ich würd vorschlagen das du dir eine Methode machst die zum Programmstart ein Point[] erstellt.
Die Methode errechnet alle Werte ganzzahligen Werte die auf einer 'imaginären' Schiene in der Strassenmitte liegen.
Dem Auto übergibst du diese Werte und läufst sie der Reihe nach durch. Geht bestimmt auch einfach, ist aber schon
spät und mir fällt gerade nichts besseres ein


----------



## NatroN (20. Apr 2005)

jo, ein Ponit Array ist klar, aber wie soll ich da die Punkte ermitteln. 

Habe ja keine Kurvengleichung o.ä. mit dem ich das ermitteln kann.

Außerdem brauche ich ja eigentlich 2 Kurven oder? Eine auf der die linken Punkte liegen und eine auf der die rechten Punkte liegen... weil sich das Auto ja auch je nach Straßenstellung anders neigen muss.

Mfg
 NatroN


----------



## Gast (20. Apr 2005)

Hi!
@wildcard...
das mit der imaginären strasse, find ich eine gute idee, nur denk ich, dass sich das auto(reckteck) ebenfalls mitdrehen sollte bzw. die kurve fahren soll.

@natron...
du denkst dir einen imaginären bewegungspfad beispielsweise in der mitte der fahrbahn. dann rechnest du auf das zu zeichnende rechteck zurück. bei jedem takt deines timers rechnest du neu (repaint() o.ä)

dass es dann so richtig fein wird, muss dein rechteck dieselbe steigung, wie deine kurve haben. 

mir fällt hier lediglich die variante des differenzierens ein, um die steigung einer funktion in einem punkt zu berechnen. als funktion nimmst du die imaginäre kurve (halbe parabel o.ä)

wenns noch fragen gibt... bitte melden *g*

mfg


----------



## NatroN (20. Apr 2005)

richtig! Mit der steigung kann ich arbeiten!

Also jetzt eine Kurvengleichung finden die gut aussieht, und dann daran die Fahrbahn anpassen...


----------



## Gast (20. Apr 2005)

das wär jetzt mal eine idee... 

ich würd sagen, du nimmst irgendeine quadratische gleichung, wirst eh sicher was zum simulieren haben...

mfg


----------



## NatroN (20. Apr 2005)

hab das gleich mal zu papier gebracht.

Am einfachsten wär es mit einem Kreis! Einfach ein vierteil eines Kreises, nur weiß ich die Kurvengleichung eines Kreises nicht


----------



## NatroN (20. Apr 2005)

ok 

r^2=^2+y^2 

Kennt wer vielleicht ein Applet dass mir die Koordinaten anzeigt? Dann brauch i net immer so viel überlegen . ... also nur  was wo ein Mouselistener die Koordinaten des Klicks oder der Mausposition anzeigt... 

hatte sowas mal aber hab i nimma..


----------



## AlArenal (20. Apr 2005)

Wieso überlegen? Du musst den Kram im Programm berechnen lassen. Wie willst du bei variabler Geschwindigkeit deines Vehikels sonst die korrekte Position setzen?


----------



## NatroN (20. Apr 2005)

schon klar das das berechnet wird, aber dazu brauch ich ja dir kurvengleichung.

in diese werden dann die X-Werte (die vom Zähler kommen) eingesetzt und man bekommt die y - Werte

dann hat man nen Punkt. 

Dann wird die Steigung in diesem Punkt ausgerechnet und das Auto dargestellt.

Mal schaun ob das was wird 

Nur um die Kurvengleichung und auch die Straße einfach darstellen zu können hätt ich gern so ein Applet, damit ich die Koordinaten ziemlich genau bstimmen kann um dann mit diesen die Kurvengleichung ausrechhnen zu können


----------



## Guest (20. Apr 2005)

Es geht ja nicht darum, dass du ein Applet hast was dir die Punkte vorgibt aus denen du DANACH den Pfad berechnest, sondern DAS du den Pfad berechnest. Wenn du um es dir besser vorstellen zu können, das ganze sichtbar machen willst, muss du doch nur ein Programm schreiben, dass die Punkte berechnet und entsprechend darstellt. Dass es zu dem Problem irgendwo hier eine fertige Lösung gibt, erscheint mir eher unwahrscheinlich.


----------



## NatroN (24. Apr 2005)

Hallo!

Ich hab nun mit Hilfe des Forums und einiger netten leute über IRC schon einiges geschafft.

Jetzt habe ich noch das Problem, dass ich will, dass die Kurve nur vom letzten Punkt der einen gerade bis zum ersten Punkt der 2ten Gerade läuft, aber nicht im Kreis. 

Außerdem sollte der Punkt auf der Kurve nicht merkbar schneller oder langsamer unterwegs sein.

also passt anfangspunkt net, endpunkt net und der Speed net.

Hier kann man sich das Applet mal anschaun

http://mitglied.lycos.de/natron2e/Java/Test.html

und der Code ist hier zu finden:

http://mitglied.lycos.de/natron2e/Java/



Wär echt super wenn ihr mir helfen könntet... mir fällt echt net ein wie i das am besten lösen könnte.

mfg


----------



## Roar (24. Apr 2005)

öh java.lang.NoClassDefFoundError: JStraßen
kommt beim applet ausführen


----------



## NatroN (24. Apr 2005)

wer den code laden will und bei sich ausführen, muss natürlich sowohl jstraßen als auch verkehr.java laden, in den gleichen ordner spielen und verkehr.java ausführen.

das applet auf webspace funktioniert (zumindest bei mir) ohne probleme


----------



## Roar (24. Apr 2005)

bei mir eben nicht


----------



## NatroN (24. Apr 2005)

liegt wohl an der version.

geschrieben und funken tuts mit 1.3 und 1.4.2

mit 1.5 anscheinend nimma? 

Woran kann das liegen? hmm..


----------



## NatroN (25. Apr 2005)

OK es lag am ß dass unter 1.5 wohl Probleme macht. 
Jetzt gehts mit 


HIER DAS APPLET

und 

HIER DER CODE

Wär super wenn ihr mir bei meinem Problem helfen könntet.

mfg


----------

