Weiche Rotation von Partikeln berechnen. Wie?



  • Hallo!
    Ich bin grad am überlegen wie ich zum beispiel 300 partikel um die Maus rotieren lassen kann. Ich weis, das das nicht das Problem ist. Das Problem ist, wenn ich die Maus bewege, sollen die Partikel "weich" hinterherfliegen und dann wieder langsam in Rotation übergehen, wenn die Maus still steht.

    Die Rotation hab ich, aber wie mach ich das mit dem Hinterherfliegen?, da ja der Rotationsvorgang unterbrochen wird.
    Hat einer eine Idee?

    lg Micha



  • goggle doch mal Steering Behaviour.



  • Das bringt mich irgendwie nicht weiter...



  • Du koenntest einen Flocking-Algorithmus verwenden, und den Mauszeiger als Flockingzentrum nutzen. In AI for Game Programming sind nette Beispiele angegeben. Du kannst dir die Beispielprogramme auch ansehen und schauen, ob es sowas in der Art fuer dich ist.



  • CaPGeti schrieb:

    Hallo!
    Ich bin grad am überlegen wie ich zum beispiel 300 partikel um die Maus rotieren lassen kann. Ich weis, das das nicht das Problem ist. Das Problem ist, wenn ich die Maus bewege, sollen die Partikel "weich" hinterherfliegen und dann wieder langsam in Rotation übergehen, wenn die Maus still steht.

    Die Rotation hab ich, aber wie mach ich das mit dem Hinterherfliegen?, da ja der Rotationsvorgang unterbrochen wird.
    Hat einer eine Idee?

    lg Micha

    hallo,

    eine "weiche" funktion kann man so definieren, dass die ersten n ableitungen stetig sind. in deinem fall würde z.b. n=1 reichen. du könntest also eine art physikalischer simulation machen, in der auf die partikel kräfte wirken, die sie zu ihrer "richtigen" position hinziehen. die beschleunigung hängt damit von der mausposition ab. geschwindigkeit und position kannst du dann aus der beschleunigung und der letzten position/geschwindigkeit berechnen.



  • die geschwindigkeiten der teilchen einfach nicht sofort ändern, sondern frei nach der gleichung

    v(t) = a*t + v0

    v(t) ist dein neuer geschwindigkeitsvector
    a dein beschleunigungsvektor (wenn die maus sich nach rechts bewegt also einfach [geschwindigkeit_x,0] mit irgendwelchen variationen)
    t deine zeit seit beschleunigungsanfang
    v0 dein anfangsgeschwindigkeitsvektor

    durch verwendung von vorfaktoren oder ähnlichem kannst du das ganze beschleunigen / verlangsamen



  • Hallo.

    @knivil:

    Du koenntest einen Flocking-Algorithmus verwenden[...]

    Hast du zufällig ein Tutorial link? ich hab keinen deutschen bzw überhaupt einen gefunden....Bei Wikipedia stand was von Schwarmintelligenz, aber das war nicht auf Computer bezogen.

    @cCc:

    Das hab ich schon so. Aber wenn ich die Maus bewege, dann kommen die einzelnen Partikel hinterher. Das Problem ist, das die Partikel links oder rechtsrum in einem Radius von 0 bis 50 zufällig rotieren. Ich weis gar nicht wie das überhaupt aussehen soll, wenn ich die Maus linksrum rotier und einige Partikel dann dennoch rechtsrum rotieren (Um ihr massezentrum). Das sieht halt nicht realistisch aus.

    @TravisG:

    Ich hab versucht die Formel einzubauen, aber da ich keine Vektoren habe, und schon die weiche Bewegungsgeschwindigkeit durch die Abhängigkeit der Maus bestimm, brauch ich das nicht mehr. Oder meinst du die Formel für die Bewegung der Partikel wenn ich die Maus beweg? tja ^^, aber was ist dann mit der Rotation dessen? Wenn ich bei Maus entfernung zum Partikel bestimm, und daraus die Rotationsgeschwindigkeit bestimm, könnte man das irgendwie lösen. Das würde trotzdem doof aussehen, wenn ein Partikel auf einmal wieder schneller in die Fasche richtung rotiert, nur weil die Maus näher dran ist. Oder ich bin einfach zu dumm, für das was du meinst.

    @All:

    Das die Partikel sachte hinterherschwüren hab ich irgendwie aufgegeben...Da ich das ni hinbekomm in den Zusammenhang, das die Partikel sich auch noch um ihr Zentrum rotieren.
    Von daher versuch ich, damits nicht ganz so langweilig aussieht, die Partikel unterschiedlich zu rotieren. Ich benutz bisher folgende einfache Rotierformel:

    Px = r * cos( i );
    Py = r * sin( i );

    Wenn ich jetzt bei Px den Winkel i durch 2 Teil, dann wird die Rotation auf der x-Achse "skaliert" (50%).
    Das selbe kann ich ja mit der y-Achse machen. Aber wie bekomm ich das jetzt hin, das auch sowas wie auf meinem schnell gezeichneten aussehen kann?:
    http://www.michaelw.hn.vc/Sonstige_Bilder/Rotierfunktion.jpg
    Also, das sich die Rotation nochmal rotiert.

    vg und thx for help.
    Michael



  • Also, ich würd als erstes mal versuchen, den Partikeln eine anständige Dynamik zu geben.

    Eine Drehbewegung um den Nullpunkt sieht ja irgendwie so aus (mit x' = dx/dt):
    x'=k1 y
    y'=k2 x

    Kannst Du dir natürlich an deinen Mauszeigerpunkt durch Koordinatentransformation hinschieben. Und eine Folgebewegung, wobei (x0, y0) gefolgt wird, sieht im Trivialfall so aus:
    x'=k3 (x0-x)
    y'=k4 (y0-y)

    Muss natürlich nicht linear sein, f(x0-x) tut es prinzipiell auch, wenn f(a)<0 für a<0 und >0 für a>0 ist.

    Ok, wenn Du nur die beiden Bewegungen überlagerst, also addierst, dann landen die Partikel also über kurz oder lang irgendwann am Mauszeiger. Jetzt kannst Du f entweder für kleine x0-x abschalten (also gleich 0 setzen, dann bleibt nur die Rotation übrig) oder Du baust noch ein abstoßendes Feld der Art x'=k5 g(x-x0) ein, das nur eine recht kurze Reichweite hat. So kannst Du mit dem abstoßenden und anziehenden Feld deinen Abstand regulieren und mit dem ersten Term eine Kreisbahn erzeugen. Und dann spielst Du ein bißchen mit den Parametern, bis das ordentlich aussieht.

    Dein Problem mit der Rotiererei hab ich nicht verstanden. "Normale" Rotationen mit Achsen senkrecht zum Bildschirmrand bekommst Du hin? Dann nimm doch einfach diese Werte, schieb sie in den Nullpunkt, multipliziere deine Rotationsmatrix drauf und schieb sie zurück. Im R^2 kannste dir das auch auf dem Papier ausrechnen und direkt "als Formel" ins Programm tippen.



  • Hi Daniel E.
    danke für deine Antwort.
    Allerdings hab ich bin auf den letzten Abschnitt nichts verstanden. ^^
    Irgendwie bin ich in Mathe ein totaler versager, wenn ich nicht grad die Formel in meinem Kopf hab. Was ist zum beispiel k1...4 ?
    Ich versteh das so, das das Irgendwelche Variablen sind, aber was für einen Inhalt haben die?
    Bei...

    wenn f(a)<0 für a<0 und >0 für a>0 ist.

    ...versteh ich nur Bahnhof ^^
    Naja.... ich denke da reicht mein Realschulabschluss nicht aus um hier Vorschläge umsetzen zu können.

    mhm...Deine letzten Sätze haben mich allerdings auf eine Idee gebracht.
    Gleich mal probieren.

    EDIT::
    Juhu ^^
    Ich habs gelöst.
    Sry, ich hatte mich falsch ausgedrückt. Ich meinte eigentlich, wie man eine ellipse um den mittelpunkt rotiert.

    naja. Und als ich diese gif-Animation sah, war alles klar, auch wie ich diese Rotieren kann (die Ellipse)
    http://geometrie.diefenbach.at/Rad/rad3.gif

    lg Michael



  • http://www.red3d.com/cwr/steer/

    Naja, das mit den Links auf deutsch ist schwierig.


Anmelden zum Antworten