Seite 2 von 2

Verfasst: 27.08.2007 10:51
von SimonSimCity
Bei dem Original-Code (von NicTheQuick) sind bei Vista (wenn F1 gedrückt) bei der Maus links und rechts vertauscht :lol: :lol:

Ich hab erlich gesagt ka warum :)

EDIT:

Bei der Verbesserung (siehe vorheriger Post) ist dieser "Fehler" wieder raus und das ganze läuft unter Vista einfach flüssiger...

p.s. Das mit Vista is nur in der Schule...
Also nur manchmal Vormittags...

Verfasst: 27.08.2007 12:13
von NicTheQuick
@PureLust:
Erstmal Danke für die Info! :allright:
Ich hätte nicht gedacht, dass sich wirklich jemand mit dem Code
auseinandersetzt.
Das mit dem doppelten Berechnen ist mir bisher nicht aufgefallen und
irgendwie finde ich es auch merkwürdig, dass es überhaupt passiert, weil ich
mir bei der Verlinkung sehr sicher war.

...rumbastel...

Hab den Verlinkungsfehler gefunden und bin ihn grad am Beseitigen. Hab
dadurch allerdings noch andere Fehler hervorgerufen. Dauert also noch ein
bisschen. <)

Verfasst: 27.08.2007 15:24
von NicTheQuick
Hab den Code jetzt ein wenig aufgeräumt und deine L-Taste umfunktioniert.
Mit ihr kann man ab jetzt die Linien an oder ausschalten. Sie werden jetzt
nämlich garantiert nur einmal gemalt. Außerdem wird jetzt nicht mehr jeder
Node einzeln berechnet, was bei verbundenen Nodes eine unnötige doppelte
Berechnung bedeuten würde, sondern es wird sozusagen nur noch jede Feder
berechnet, die zwei Nodes verbindet.

Den neuen Code findet ihr hier: Feder-Simulation.pb

Ich habe außerdem noch einen Fehler festgestellt, der auftritt, seitdem ich
das Macro Test3() in eine Procedure umgewandelt habe. Dazu einfach mal
Zeile 393 ein Semikolon verpassen und es in Zeile 394 wegmachen.
Womöglich tritt der Fehler nur bei PB V4.02 auf.

Verfasst: 27.08.2007 16:50
von PureLust
NicTheQuick hat geschrieben:Hab den Code jetzt ein wenig aufgeräumt ...
Obergeil flüssig !!! :allright:

[PS:] Was jetzt noch cool wäre: Wenn Du bei einer Überlastung nur die überlastete Feder entfernen würdest und sich nicht darauf hin das ganze Netz auslösen würde.
Bin leider noch nicht tief genug in Deinen Code vorgedrungen um das lösen zu können.

Verfasst: 27.08.2007 21:01
von NicTheQuick
Bei Überlastung reist auch immer nur die jeweils überlastete Feder.

Du meinst sicherlich die Überlastung der Simulation. Es kann passieren, dass
die Punkte sich zu schnell bewegen und dadurch "Fehler" verursacht werden.
Aus diesem Grund kann man die 'deltatime.d'-Variable kleiner stellen.
Dadurch wird die Simulation zwar langsamer, aber die Berechnungen
genauer und somit wird die Simulation weniger schnel überlastet, weil die
Berechnungsschritte kleiner werden.
Das ist wie wenn du ein Integral berechnen willst, indem du die Funktion in
lauter kleine Stücke zersägst und die daraus resultierenden Flächen
aufaddierst. Je kleiner die Stücke, desto genauer das Endergebnis.

Verfasst: 27.08.2007 21:21
von PureLust
NicTheQuick hat geschrieben:Bei Überlastung reist auch immer nur die jeweils überlastete Feder.
Gerade dass ist ja leider nicht der Fall.
Wenn Du einfach mal den Mittelpunkt so weit nach oben rechts rausziehst bis die linken Federn überlastet sind und reissen, dann bricht das gesamte Netz zusammen.
Wie gesagt, laut Deinem Code hätte ich auch vermutet das nur die überlastete Feder reisst.
Warum daraufhin aber dann das ganze Netz zusammenbricht ist mir nicht klar geworden. :roll:

Verfasst: 27.08.2007 22:21
von SimonSimCity
Stimmt...
Jetzt reißt das ganze Netz...

Aber in der 1. Version ist das Netz auch (fast) ganz gerissen (abzusehen von so ganz unbelasteten Ecken &so).


Jetzt reißt es auch schon, wenn ich die Fäden (F3) nur ganz schnell hoch und runter ziehe.. Dann fliegt auch das ganze Netz außeinander...

Werde es morgen mal wieder in der Schule testen...

-> auf meinem DualCore läuft es wie beim 1. Mal... (WinXP)

Verfasst: 28.08.2007 14:56
von NicTheQuick
Ich hab ein neue Version unter dem selben Link hochgeladen. Dort kann man
jetzt während der Simulation die Federkonstante D aller Federn, die Masse m
aller Nodes, die maximale Länge aller Federn in Prozent und die deltatime.d
ändern.
Probierts aus: Je höher deltatime, desto eher reißen alle Federn.

Wenn die maximale Länge bei 200% steht, bedeutet das, dass die Federn bei
doppelter Normallänge reißen.
Die Federkonstante D gibt an, wieviel Kraft eine Feder aufbringt, wenn man
sie dehnt oder zusammendrückt: F = D * delta_länge