Partikelenginge -> Bewegung
Übersicht

![]() |
M0rgensternBetreff: Partikelenginge -> Bewegung |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey Leute.
Ich bin gerade aus Spaß und wegen dem Lerneffekt dabei eine Partikelengine zu schreiben. Ich möchte dazu nen kleinen Editor schreiben um Emitter zu setzen und diesen bestimmte Werte zuzuteilen. Das ganze sollte von den Werten etc schon ein wenig komplexer werden (Farben stufenlos einstellen, Austrittswinkel etc.) Ich habe die Klasse für die Partikel auch schon fertig. Die Bewegung wird momentan aber folgendermaßen berechnet: BlitzMax: [AUSKLAPPEN] Method Move() Ich habe aber auch ein Attribut "fAngle". Vorher habe ich die Bewegung mit Sinus und Cosinus berechnet, habe aber die Gravitation nicht einberechnen können. Meine Frage wäre jetzt: Wie stelle ich eben dieses am besten an? Also die Bewegung durch Winkel zu errechnen aber die Gravitation mit einzubeziehen. Ich habe mir sowas gedacht: BlitzMax: [AUSKLAPPEN] fx = fx + Sin(fangle) * fxspeed Aber ich finde das ist irgendwie blöd, weil dann die YKoordinate zweimal neu berechnet wird. Das sieht mit Sicherheit auch nicht unbedingt sehr gut aus, je nach Partikel Geschwindigkeit. Vielleicht kann mir ja jemand nen Ansatz geben. Lg, M0rgenstern |
||
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn sich die Bewegungsrichtung nicht im Verlauf des Partikellebens drehen soll, berechnest du die Teilgeschwindigkeiten beim Erstellen des Partikels.
Dann kannst du darauf die Gravitation wirken lassen; die Bewegungsrichtung an sich gibt es nicht mehr. (->Sinus- und Cosinusberechnungen gespart!) mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja, soweit war ich ja im Code oben schon.
Aber das Problem ist: Ich will das so programmieren, dass man den Austrittswinkel der Teilchen ändern kann. Und da dachte ich müsste ich schon noch mit Sinus und Cosinus rechnen. Oder habe ich grade einen Denkfehler drin? Lg, M0rgenstern. |
||
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, du hast einen Gedankenfehler, denkst aber richtig:
Beim Erstellen des Partikels nutzt du noch Sinus und Cosinus, um die Geschwindigkeitskomponenten zu berechnen. (Der Winkel ist der von dir angesprochene Austrittswinkel.) Danach nutzt du aber diese und brauchst weder die Richtung noch Sinus oder Cosinus. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, die Frage ist jetzt vielleicht dämlich, aber: wie berechne ich die Geschwindigkeit abhängig von dem Winkel?
Oben die Formel umstellen wäre eher kompliziert. Lg, M0rgenstern |
||
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich nehme an so:
BlitzMax: [AUSKLAPPEN] fspeed=20 fspeed stellt dabei die Gesamtgeschwindigkeit dar. Ich glaube mpmxyz hat das so gemeint. Und diese Berechnung sollst du eben nur machen, wenn du einen neuen Partikel erstellst. mfg Thunder |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hm...
Also das funktioniert ganz gut, aber ich habe noch ein Problem: Die Partikel sind immer symmetrisch. Das heißt, wenn ich den Winkel auf 90 stelle, dann fliegen die Partikel nach links und rechts. Es sollte aber so sein, dass sie nur nach rechts bzw links fliegen. Hier der Code: BlitzMax: [AUSKLAPPEN] Particle.fAngle = Rand(-90, -90) Und die Bewegung: BlitzMax: [AUSKLAPPEN] Method Move() Lg, M0rgenstern |
||
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzMax: [AUSKLAPPEN] Particle.fAngle = Rand(-90, -90) Steht das wirklich so im Code? |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja.
Wahlweise auch mit 90, 90 Warum? Lg, M0rgenstern |
||
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja, wenn du Rand(-90,-90) verwendest, kannst du gleich -90 schreiben, oder? | ||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, ist mir schon bewusst.
Aber eigentlich sollen da zwei verschiedene Zahlen hin, um einen bestimmten Bereich zu nutzen. Aber ich wollte erstmal ausprobieren bei welchen Zahlen etwa welche Richtungen entstehen und hab den Code halt nicht umgeschrieben. Es geht ja auch nur um das Problem mit der Symmetrie. Lg, M0rgenstern |
||
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja und dieses Problem resultiert doch aus diesem 90° Winkel nicht?
Wenn du sie nur nach rechts/links fliegen lassen willst, musst du den Winkel einschränken. ]-90;+90[ = rechts ]+90;270[ = links Oder verstehe ich das Problem falsch? |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nein, eben nicht.
Wenn ich als Winkel +90° bzw. -90° habe, dann passiert folgendes: Links und rechts von der Maus treten Partikel aus, die sich dann auch entsprechend nach links/rechts bewegen. Also als würde eine Symmetrieachse durch die Maus verlaufen (Momentan werden die Partikel halt an der Masu erstellt). Und ich möchte es so, dass die Partikel nur nach links oder rechts bewegt werden, also nur in eine Richtung udn nicht nochmal symmetrisch gleichzeitig in die andere Richtung. Lg, M0rgenstern |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Negative Winkel decken den selben Bereich mit negativen Vorzeichen ab... soll heißen: Nimm nur Positive Winkel.
-90° = +270° = Unten |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Xeres: kann ich so nicht bestätigen.
@M0rgenstern: Deine Überlegungen (deine geposteten Codes) funktionieren theoretisch: BlitzMax: [AUSKLAPPEN] Strict Das ist jetzt nur eine kleine Implementation (die uA auch zeigt, dass -90° bis +90° den rechten Abschnitt darstellt). Bei mir werden NUR Partikel erzeugt, die nach rechts fliegen. |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, das ist mir im Prinzip schon bewusst. Das Gespräch kam grade ja auch nur auf, weil ich halt im Code -90 stehen hatte.
Aber da liegt auch nicht das Problem. Ich glaube ich erklärs mal an nem Beispiel, also: Meine Partikel werden momentan an der Maus erstellt. Die anfänglichen Koordinaten der Partikel sind also die der Maus in diesem Moment. Der Winkel, in dem die Partikel austreten beträgt 90°. Damit will ich erreichen, dass die Partikel sich von der Maus nach rechts bewegen. Das tun sie auch. Aber gleichzeitig bewegen sich andere Partikel, mit der gleichen Voraussetzung nach links. Und genau das soll halt nicht sein. Ich weiß aber auch nicht, wie ich das genau berechnen muss, dass der gewünschte Effekt eintritt. Hoffe, dass das ein wenig mehr Licht in die Sache bringt. Lg, M0rgenstern |
||
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Genau das ist der Punkt, den ich nicht ganz verstehe. Wie können sich die Partikel bei einem Winkel von -90° (=Oben) nach links bzw rechts bewegen? Bei einem solchen Winkel sollten sie doch eine Gerade beschreiben.
Lässt du irgendwelche Zusatzparameter in die Bewegung einwirken? Edit: aha, verstehe. Die 90° waren schon umgerechnet. |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
- Zuletzt bearbeitet von Thunder am Mo, Apr 05, 2010 23:57, insgesamt einmal bearbeitet
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Thunder: richtig, -90 bis +90 deckt ja auch den ganzen rechten Bereich ab - es sollte trotzdem
a) -Sin heißen, sonst spiegelst du die Achse. und b) darf die Geschwindigkeit nicht Negativ sein können Der Fehler ist: Code: [AUSKLAPPEN] Rnd(-5, 5) das Spiegelt nämlich ebenfalls die Achse...
|
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
- Zuletzt bearbeitet von Xeres am Mo, Apr 05, 2010 23:56, insgesamt einmal bearbeitet
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab das Problem gerade gelöst, als ich mir deinen Code angeschaut habe.
Die Zeile in der du die Startgeschwindigkeit setzt unterscheidet sich essentiell von meiner: Ich beziehe einen negativen Bereich mit ein. Meine Startgeschwindigkeit kann auch -5 betragen. Und genau dann tritt der beschriebene Effekt auf. Habs also jetzt gelöst. Vielen Dank für eure Hilfe bei diesem (dämlichen) Fehler. Lg, M0rgenstern |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group