Ergebnis 1 bis 13 von 13

Thema: Dev-Comm braucht EUCH! - Most wanted articles!

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1

    [gesucht] Tutorial Partikel - Fluidsimulation

    Hallo, ich bin's mal wieder! ^^°
    Ich wollte mich gerne mal über Partikel informieren, besonders die benutzung der Partikel in Fluidsimulationen. Das sind Simulationen von Flüssigkeiten und Gasen (Rauch, Feuer etc.). Leider hab ich im Netz noch nix passendes gefunden. Ideal wären Tutorials, die in Richtung von dem hier gehen: http://kotsoft.googlepages.com/physicsdemos
    Weitere Idealen wären:
    -deutschsprachig
    -für FB ausgelegt
    -Edit: Achja! 2D, wenn möglich

    Aber das muss auch nicht unbedingt sein! xD

    Ich hoffe, ihr könnt mir weiterhelfen!

    Edit by DFYX:
    Ich hab das mal in den Requestthread geschoben.
    Edit by Lloyd64:
    Ah, gut. Dacht' erst, der wär verschwunden!

    Geändert von Teflo (10.06.2008 um 14:22 Uhr)

  2. #2
    Ich konnte in den letzten Tagen einige Informationen sammeln.
    Hier sind zwei Pdfs die mir schon ganz gut weitergeholfen haben. Sind zwar recht ähnlich, jedoch ergänzen sich beide auch.
    1. Link
    2. Link
    Es wird sich auch hauptsächlich auf die Simultaion von Gasen, Rauch, Feuer etc. konzentriert, aber das sind ja auch Fluide!

    Naja, ich bin grad dabei es in Code umzuwandeln, jedoch scheitere ich schon bei der Diffusion...

    Code:
    Dichte2(i, j)=((Dichte(i, j)+a*(Dichte(i-1, j)+Dichte(i+1, j)+_
                Dichte(i, j-1)+Dichte(i, j+1)-4*Dichte(i, j)))/(1+4*a))
    Wobei Dichte2 Der neue Dichtewert ist, und Dichte der alte.

    Code:
    a=20*600
    600 weil meine Bildschirmlänge/breite 600 ist, und 20 weil's im 1. Link so steht! xD
    Komischerweise ist dann nur ein Feld des Gitters weiß (Dichte wird bei Mausklick auf 1 gesetzt [1=Volle Dichte, 0=Keine Dichte/Nicht vorhanden])
    Dieses klingt dann auch (sehr langsam) ab, jedoch passiert mit den Umliegenden nichts...

    Naja, das ist so das aktuelle Prob...

  3. #3
    Zitat Zitat von Lloyd64 Beitrag anzeigen
    Dieses klingt dann auch (sehr langsam) ab, jedoch passiert mit den Umliegenden nichts...
    Dann solltest du eher die Schleife posten, laut dem Code sollte es ja eindeutig klappen. o_O Auch wenn ich ihn jetzt nicht ganz genau angeschaut/durchdacht habe.

  4. #4
    Ah, hab's schon rausbekommen!

    Ich hab mein Fenster ja in H-große Felder eingeteilt. In der Rechnung geht er aber immer statt H nur um 1, also einen POixel in die gewünschte Richtung...
    Maln Beispiel:
    Ich hab meinen Bildschirm in 5x5 große Kacheln geteilt. Also H=5.
    Da ich aber immernoch auf Pixelebene arbeite, muss ich statt
    Code:
    Dichte(i+1,j)
    einfach
    Code:
    Dichte(i+H,j)
    schreiben, damit ich nicht einen, sonder H*Pixel (Also 5 Pixel) weiterspringe! >_>
    Einfach ein kleiner Denkfehler.
    Trotzdem danke!

    Edit: Achja, die Schleife, einfach mal zum anschauen.
    Code:
    a=20*Nx*Ny*0.1 'Für einen Zeitschritt von 0.1
    For i = H to Nx-H Step H
            For j = H to Ny-H Step H
                
                'Diffusion
                If Maustaste=1 And i-MausX<H And      
                i-MausX>-H And j-MausY<H And 
                j-MausY>-H  Then
                    Dichte(i, j)=1
                Endif
                '1. Möglichkeit
                'Dichte2(i, j)=((Dichte(i, j)+a*(Dichte(i-H, j)+Dichte(i+H, j)+_
                'Dichte(i, j-H)+Dichte(i, j+H)-4*Dichte(i, j)))/(1+4*a))
                '2. Möglichkeit
                'Dichte2(i, j)=Dichte(i, j)+Kappa*(Dichte(i-H, j)+Dichte(i+H, j)+_
                'Dichte(i, j-H)+Dichte(i, j+H)-4*Dichte(i, j))/H^2
            Next
        Next
    Ja, ich hab im Internet 2 Lösungen gefunden, wobei ich die zweite benutze, weil die erste irgendwie nicht ganz funzt. Hab erstmal auch keine Lust das zu ändern, denn es geht ja auch so
    Achja, Kappa ist einfach ein beliebiger Faktor. Je größer desto schneller die Diffusion. Bei mir gibts ab 7 Fehler, aber auch ohne den sieht's gut aus.


    Edit^2: Zack! Schon das nächste Problem, was ich nicht lösen konnte.

    Die Bewegung der Dichte nach dem Vektorfeld.
    Aber erstmal noch ein Link zu einer Pdf, die Jos Stam, der Entwickler dieser Vorgehensweise etc., selbstgeschrieben hat 3. Link
    Dort auf Seitte 7/8 ist ein Code. Ich hab den mMn richtig umgesetzt, aber irgendwas muss wohl schiefgelaufen sein:
    Code:
    Dim As Single x, y, s0, s1, t0, t1, dt0
    Dim As Integer i0, j0, i1, j1
    
    For i = H to Nx-H Step H
            For j = H to Ny-H Step H
                dt0=Nx*Ny
                x=i-dt0*Vx(i, j)
                y=j-dt0*Vy(i, j)
                If x<H/2 Then x=H/2
                If x>Nx+H/2 Then x=Nx+H/2
                If y<H/2 Then x=0.5
                If y>Ny+H/2 Then y=Ny+H/2
                i0=x
                i1=i0+H
                
                j0=y
                j1=j0+H
                
                s1=x-i0 
                s0=H-s1
                t1=y-j0 
                t0=H-t1
                Dichte3(i, j)=s0*(t0*Dichte2(i0, j0)+t1*Dichte2(i0, j1))+_
                                  s1*(t0*Dichte2(i1, j0)+t1*Dichte2(i1, j1))
            Next
        Next
    Ich hab diesmal statt 1 H und statt 0.5 H/2 eingesetzt. Natürlich hab ichs schon andersrum probiert, aber immer mit dem gleichen Ergebnis. Das Program stürzt ab: :/
    Hoffe, jemand kann mir helfen. Bye!

    Edit: Konnte einen kleinen Fortschritt machen, hab die Sachen oben korrigiert. Geht zwar kurz, stürzt dann jedoch ab...

    Geändert von Teflo (26.06.2008 um 16:13 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •