Fluss Strecken von A-B
Übersicht

Medabots1992Betreff: Fluss Strecken von A-B |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich will einen schönen Fluss machen bzw. Strecke. Diese soll, aber vom Spiel selber generiert werden. Wenn ich es überprüfe wo es ist und es schalten lasse dann kommt nur zick zack raus. Wie kann ich runde Flüsse machen?
Ich habe einen Start Punkt mit x und y und einen End Punkt mit x und y Jetzt will ich das der Fluss von Start zu Ziel geht. Es soll aber weich sein nicht so das es ein Zick Zack ist. Kann mir jemand einen Tipp geben wie ich die Formel mache oder ein kleines Funktionierendes beispiel. Weil es soll nicht der Kürzeste weg sein es soll schon so ein wie ein richtiger Fluss. Blos es soll nicht ein grader Fluss sein sondern mit wellen. Meiner geht immer fast gerade zum anderen Punkt. Mit Line ist der Punkt gerade kann man diese Linien Verziehen oder so? Wäre hilfreich, wenn ich in meinem Editor Flüsse hätte die selbst generiert werden. BlitzBasic: [AUSKLAPPEN]
Wäre sehr dankbar bei einer schnellen antwort. Danke schon im Voraus MfG Medabots1992 |
||
![]() |
Hummelpups |
![]() Antworten mit Zitat ![]() |
---|---|---|
Allgemein erst mal: Keine Formel sondern eine Rouine die
dir den FLuss errechnet. Schritt 1: hold dir den Atan2 der strecke (y2-y1,x2-x1), dann benutzt du sinus um den Fluss rund zu machen so dass es soaussieht: ![]() Schritt 2: Der Wert mit dem du sin(x) multiplizierst, solltest du Flüssig ändern. von 10 runter und wieder rauf lassen. dann sieht es so aus. EDIT: Erzeugt so nicht genaue Sinuswellen da der Abstand zum Urstrich geändert wird durch die FLießvariable die sich in jedem Durchgang ein wenig ändern sollte. ![]() Schritt 3: So, nun müssen alle erstellten Punkte noch einmal durchgegangen werden um dann für diesen Fluss auch noch eine Variable breite zu generieren. Muss man nicht machten(!) Also den Winkel der zwischen den Verbundenen Punkten (ne Art 2D vertex) ausrechnen und einen Abstand generieren wie hier im Bild: ![]() Schritt 4: Nun muss das Rechteck ausgerechnet werden, der WInkel der ja besteht, inklusive der Abstand der zuvor generiert wurde, müssen nun zu einem rechteck gefasst werden das einen Winkel, einen Mittelpunkt(wohl am einfachsten) und eine größe seite1 + seite2 haben. ![]() Schritt 5: So, nun wurden die Bereiche festgelegt, evtl. in einem Type gespeichert und müssen gezeichnet werden. Dafür dreht man das Bild nach dem Winkel wie ihn das Rechteck gespeichert hat und Skaliert evtl. die Grafik oder Tiled sie auf den Rechteck. So könnte man auch noch effekte mit einbauen. ![]() IMurDOOM |
||
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus |
- Zuletzt bearbeitet von Hummelpups am Mi, Nov 16, 2005 15:34, insgesamt 3-mal bearbeitet
Medabots1992 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
*kopfkratz*
blinke nicht durch irgendetwas muss man tun dami ich dahin komme kann mir jemand bsp. code geben oder anderre hilfe. iCh meine die Wellen hab es geschafft zwei striche zu machen etz fehlt nur noch der rest ich glaube ich weis was ich noch machen muss. Antwortet trotzdem noch |
||
![]() |
Hummelpups |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hm, ich finde es eigentlich recht gut beschrieben ![]() WO genau ist nun das Problem? IMurDOOM |
||
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus |
Medabots1992 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Die wellen sind gleich mäßig ich will die, aber ungleichmäßig haben.
Ok ich bekomme nicht mal schön große Wellen. Nur so ganz kleine. |
||
- Zuletzt bearbeitet von Medabots1992 am Mi, Nov 16, 2005 15:20, insgesamt einmal bearbeitet
![]() |
Hummelpups |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn du dir Schritt 2 noch mal anguckst weißt du wie du die ungleichmäßig
bekommst. IMurDOOM |
||
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus |
Medabots1992 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Würde dankbar sein, wenn mir jemand ein bsp. code geben würde blicke nicht durch. Hab etz Atan2 in Sin rein und dann hab ich die richtung gehabt blos wie bekomme ich es jetzt das es in wellen ist? Hab alles so gemacht wie oben ich es verstanden habe. Geht trotzdem net ![]() |
||
![]() |
Hummelpups |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das is recht aufwendig zu programmieren.
Glaube nicht das dir das einer Programmiert. Naja, bis denne IMurDOOM |
||
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus |
Medabots1992 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
oh natoll dann kann ich es selber net schaffen.
Gibt es nicht irgendwo ein tut oder bsp. wie man es macht. Mit dem was ich versucht habe kriege ich es net hin. Naja mach mal pause mit dem vielleicht fällt mir eine andere möglichkeit ein. |
||
Darren |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
versuche es einfach... immer wieder.... du musst doch nicht alles auf einmal machen..... versuche dich stück für stück ranzuarbeiten | ||
MFG Darren |
Medabots1992 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
naja der Fluss wie soll cih es machen. Das geht nicht mal beim ersten Schritt. Muss mir was einfallen lassen. Hoffe immernoch auf ein GeistesBlitz! | ||
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also ich hätte dir zunächst erstmal empfolen das mit kubischen Bezierkurven zu machen, aber IMurDOOMs Lösung ist einfacher und auch besser, zudem auch noch plausibel beschrieben. Must halt Stück für Stück vorgehen, wie hier schon gesagt. | ||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
Medabots1992 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich gehe mit null rein und mi null raus.
Gleiner bsp. code die nur die wege macht wäre net schlecht ![]() Fällt mir nix ein was ich machen soll. |
||
Medabots1992 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Habe es immernoch nicht geschafft. Wäre für einen Sehr kleinen bsp. code dankbar. Darf auch nur wellen sein. Kann mir einer sagen wie ich es rechnen sollte, wenn ich y1=10;y2=30;x1=24;x2=13 habe.
Wie die wellen berechnet werden. Muss nicht bb code sein. Will es nur verstehen. Wo bekomme ich die Informationen her wie man es rechnet. |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Medabots, hier mal eine Beispielhilfe: Eine Sinuskurve ist die zwei dimensionale Darstellung einer Kreisbewegung (Hat mein früherer Mathelehrer gesagt). Wenn du also Plot x,sin(x) machst, und dabei die x-Variable erhöhst, hast du eine Sinuskurve. Mit Plot x,sin(x)*100 kannst du noch die Amplitude erhöhen. cos ist das selbe wie sin nur um 90° verschoben. Jede cos(x)-Erechnung kann man auch mit sin(x+90) durchführen. Das rührt dadurh das eine Kreisbewegung einmal für X und einmal für Y angegeben wird. Einem drehendem Rad von oben beobachtet und einmal von der Seite ergibt das selbe, da die unterschiedlichen Perspektiven ja auch um 90° 'verschoben' sind. Das Problem beliebige x1=24:y1=10:x2=13:y2=30 Positionen mit einer Sinuskurve zu versehen die quer verläuft, richtig darzustellen ist folgendes. Man muß erst den Winkel beider Positionen (x1,y1 und x2,y2) berechnen. Mit diesen Winkel kann man dann die Sinuskurve in jeden beliebigen Winkel fortlaufen lassen. In meinem Beispiel da unten werden die Berechnungen separat also ()+() gemacht. Damit ist es vielleicht etwas übersichtlicher aber nicht grad schneller, da mehr sin und cos Rechnungen durchgeführt werden müssen die recht langsam sind. Falls noch Fragen offen sind, frag. Der Code sollte einigermassen verständlich sein, da ja nicht grad viel drin steht. Mit den beiden Maustasten kannst du die Positionen beider Punkte festlegen.Code: [AUSKLAPPEN] Graphics 400,400,0,2
SetBuffer BackBuffer() q%=0 ; Schleifenvariable x1#=100 ; X-Startposition y1#=100 ; Y-Startposition x2#=300 ; X-Endposition y2#=300 ; Y-Endposition wk#=0 ; Winkel ln#=0 ; Länge While Not KeyHit(1) mx=MouseX() my=MouseY() If MouseDown(1) Then x1=mx:y1=my If MouseDown(2) Then x2=mx:y2=my wk=ATan2(y2-y1,x2-x1) ln=Sqr((x1-x2)^2+(y1-y2)^2) Color 96,96,96 Line x1,y1,x2,y2 Color 255,0,0 For q=1 To ln Step 2 Plot (x1+Cos(wk)*q)+(Sin(wk)*Sin(q/ln*360)*ln/4),(y1+Sin(wk)*q)-(Cos(wk)*Sin(q/ln*360)*ln/4) Next Color 255,255,255 Text x1-4,y1-6,"L" Text x2-4,y2-6,"R" Flip Cls Wend End |
||
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
oder du positionierst die y-koordianete mit nem Random befehl, wenn das dein einziges Problem ist, damit hast du nun wirklich eine ungleichmäige oberfläche | ||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
Medabots1992 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok das sieht nicht mal so schlecht aus wie ich es umgekrempelt habe ![]() Naja wenn ich mehr Wellen rein tuhe passt es nicht mehr. Werde noch irgendwan rum spielen und versuchen. Das ich es hinbekomme ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group