Teilchenanziehung von 2 oder mehr Teilen...

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Teilchenanziehung von 2 oder mehr Teilen...

    Ich versuche mal so gut es geht, mein Problem zu schildern:

    Also ich bin dabei, eine physikalische Simulation für den Computer zu machen.
    Dabei habe ich einen kleinen Ladungsträger und (zur Zeit noch) ein anderes Teilchen.
    Dem Ladungsträger kann ich eine Geschwindigkeit in eine beliebige Richtung geben.
    Dann bewegt sich dieser in die Richtung und wird gleichzeitig vom anderen Teilchen angezogen.
    Mein Ladungsträger bewegt sich also in Elipsenform bzw. Kreisform. Man kann sich das ähnlich wie beim Mond vorstellen.

    Ich berechne also in jedem Step den Abstand der beiden Teile, die daraus folgende Anziehungskraft und die daraus folgende Beschleunigung. Diese wird zur aktuellen Geschwindigkeit hinzugefügt und es geht wieder von vorne los.
    Dies klappt alles wunderbar.

    Jetzt möchte ich aber ein zweites (drittes, viertes...) anderes Teilchen im Raum platzieren (selbes Objekt).
    Doch mein Ladungsträger interessiert sich nur für mein erstes Teilchen.
    Wie kann ich das ändern, dass er auf beide reagiert?

    Ich hoffe, ihr könnt mir helfen!
    Vielen Dank!
  • RE: Teilchenanziehung von 2 oder mehr Teilen...

    Basti schrieb:

    Ich hoffe, ihr könnt mir helfen!
    Vielen Dank!
    Insofern du deine Antwort nicht aus dem Kaffeesatz gelesen haben möchtest,
    würde es schon sehr helfen einen Einblick in die bisherige Engine zu erlangen.
    Hier werden sie geholfen:
    [Regeln] [GML] [Hilfe] [Suche] [Posten] [Duden.de]
    [Wenn das alles nicht mehr hilft] [Dunning-Kruger]


    "Die Vernunft sollte Autorität definieren; nicht umgekehrt!"
    "Selber denken regt das Gehirn an."
    - Niffel f.k.a. Kilik
  • Achso, sorry! :S

    Also folgendes steht im Step-Event meines Ladungsträgers:

    GML-Quellcode

    1. // t = Zeit
    2. // r = Radius bzw. Abstand
    3. // F = Kraft
    4. // a = Beschleunigung
    5. // m = Masse
    6. // v = Geschwindigkeit
    7. if(fps != 0)
    8. {t = 1/(fps);}
    9. dx = obj_kreis1.x - obj_teil.x;
    10. dy = obj_kreis1.y - obj_teil.y;
    11. r = sqrt(sqr(dx)+sqr(dy))*0.0004;
    12. F = 0.01 / (r*r);
    13. a = F / m;
    14. ax = a / r * dx;
    15. ay = a / r * dy;
    16. vx = vx + ax * t;
    17. vy = vy + ay * t;
    18. x = x + vx*t;
    19. y = y + vy*t;
    Alles anzeigen
  • GML-Quellcode

    1. with(obj_teil)
    2. {
    3. dx = obj_kreis1.x - obj_teil.x;
    4. dy = obj_kreis1.y - obj_teil.y;
    5. r = sqrt(sqr(dx)+sqr(dy))*0.0004;
    6. F = 0.01 / (r*r);
    7. a = F / m;
    8. ax = a / r * dx;
    9. ay = a / r * dy;
    10. vx = vx + ax * t;
    11. vy = vy + ay * t;
    12. x = x + vx*t;
    13. y = y + vy*t;
    14. }
    Alles anzeigen

    ich benutz die with konstruktion nicht oft kann also auch falschliegen aber im gröbsten fall könnteste den code auch in die anziehenden teilchen packen weil diese den code ja alle seperat ausführen würden


    mfg
  • ja ich denke auch, dass es daran liegt. denn wenn man das andersrum verwendet, und mehrere objekte des gleichen typs vorhanden sind, nimmt er nur dass am frühesten erstellte. ich habe das problem mal bei waypoints für meine ki gehabt. alternativ könntest du das über die instance_number, instance_count usw funktionen regeln.

    © 2008 by Teamgrill Productions
  • ich denke das müsste dann wohl so aussehen (step-event):

    GML-Quellcode

    1. numb=instance_number(obj_teilchen)
    2. for (i=0; i<=numb; i+=1)
    3. {
    4. inst=instance_find(obj_teilchen,i)
    5. // den code nur statt deinem objekt inst einsetzen
    6. }

    © 2008 by Teamgrill Productions
  • Hab doch noch eine Frage, und zwar sollen sich jetzt teilchen gleichen objektes gegenseitig anziehen...
    Da würde ich das dann ungefähr so machen:

    MasterXY schrieb:

    ich denke das müsste dann wohl so aussehen (step-event):

    GML-Quellcode

    1. numb=instance_number(obj_teilchen)
    2. for (i=0; i<=numb; i+=1)
    3. {
    4. inst=instance_find(obj_teilchen,i)
    5. // den code nur statt deinem objekt inst einsetzen
    6. }

    Nur wenn ich dann inst.x oder inst.y mache, geht das nicht, weil der ja dadrin die objekt_id speichert (richtig?)
    Wie kann ich das dann umsetzen? Weil ich brauche ja die x und y Koordinaten von dem Objekt.
  • Mmhh...
    Geht aber nicht.

    Ich habe folgenden Code:

    GML-Quellcode

    1. numb = instance_number(obj_teil)
    2. for(i=0; i<=numb; i+=1)
    3. {
    4. if(i != n)
    5. {
    6. obj = instance_find(obj_teil,i);
    7. dx = x - obj.x;
    8. dy = y - obj.y;
    9. r = sqrt(sqr(dx)+sqr(dy))*0.0004;
    10. F = 0.01 / (r*r);
    11. a = F / m;
    12. ax = a / r * dx;
    13. ay = a / r * dy;
    14. vx = vx + ax * t;
    15. vy = vy + ay * t;
    16. x = x + vx*t;
    17. y = y + vy*t;
    18. }
    19. }
    Alles anzeigen


    Und bekomme diesen Error:

    Quellcode

    1. ___________________________________________
    2. ERROR in
    3. action number 1
    4. of Step Event
    5. for object obj_teil:
    6. Error in code at line 12:
    7. dx = x - obj.x;
    8. at position 19: Unknown variable x