Fluss Strecken von A-B

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Medabots1992

Betreff: Fluss Strecken von A-B

BeitragMi, Nov 16, 2005 12:08
Antworten mit Zitat
Benutzer-Profile anzeigen
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]

Function flusskoordinaten(Punkt_x_start,Punkt_y_start,Punkt_x_end,Punkt_y_end)
End Function


Wäre sehr dankbar bei einer schnellen antwort.

Danke schon im Voraus

MfG
Medabots1992

Hummelpups

BeitragMi, Nov 16, 2005 13:08
Antworten mit Zitat
Benutzer-Profile anzeigen
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:
user posted image

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.
user posted image

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:
user posted image

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.
user posted image

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.
user posted image

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

BeitragMi, Nov 16, 2005 14:30
Antworten mit Zitat
Benutzer-Profile anzeigen
*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

BeitragMi, Nov 16, 2005 14:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, ich finde es eigentlich recht gut beschrieben Laughing

WO genau ist nun das Problem?

IMurDOOM
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus
 

Medabots1992

BeitragMi, Nov 16, 2005 15:12
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Nov 16, 2005 15:18
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Nov 16, 2005 16:02
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Sad

Hummelpups

BeitragMi, Nov 16, 2005 16:05
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Nov 16, 2005 16:11
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Nov 16, 2005 19:52
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Nov 16, 2005 20:27
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Nov 16, 2005 20:51
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Nov 24, 2005 23:07
Antworten mit Zitat
Benutzer-Profile anzeigen
ich gehe mit null rein und mi null raus.
Gleiner bsp. code die nur die wege macht wäre net schlecht Razz
Fällt mir nix ein was ich machen soll.
 

Medabots1992

BeitragFr, Dez 09, 2005 17:40
Antworten mit Zitat
Benutzer-Profile anzeigen
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.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Dez 09, 2005 23:08
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Dez 10, 2005 1:51
Antworten mit Zitat
Benutzer-Profile anzeigen
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
Twitter
 

Medabots1992

BeitragSa, Dez 10, 2005 23:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok das sieht nicht mal so schlecht aus wie ich es umgekrempelt habe Smile
Naja wenn ich mehr Wellen rein tuhe passt es nicht mehr.
Werde noch irgendwan rum spielen und versuchen.
Das ich es hinbekomme Very Happy

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group