Kleine Feder-Simulation

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
SimonSimCity
Beiträge: 132
Registriert: 14.01.2007 00:49

Beitrag 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...
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8812
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag 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. <)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8812
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag 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.
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag 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.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8812
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag 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.
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag 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:
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
SimonSimCity
Beiträge: 132
Registriert: 14.01.2007 00:49

Beitrag 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)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8812
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag 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
Antworten