na wiki masz równanie różniczkowe sprężyny: http://pl.wikipedia.org/wiki/Ruch_harmoniczny#Ruch_harmoniczny_t.C5.82umiony
czyli:
jak to zasymulować? przyjmujesz sobie 3 stałe:
k - współczynnik sprężystości
m - masa obiektu przyczepionego do sprężyny
b - współczynnik tłumienia
to jest przyspieszenie punktu x (będę oznaczał a)
to jest prędkość punktu x (oznaczam v):
x to położenie końca sprężyny
położenie 0 to początek sprężyny (położenie neutralne sprężyny to x=0, czyli jak sprężyna jest w 100% złożona, jeśli chcesz, żeby sprężyna miała jakąś długość to przyjmij sobie położenie początka sprężyny w dowolnym innym punkcie - sztywno ustalonym), położenie x to koniec sprężyny (to jak to narysujesz na formie to Twoja sprawa)
warunki początkowe, czyli takie jakie koniec sprężyny posiada na starcie:
a = 0;
v = 0;
x = dowolna_wartosc; // jesli dowonlna_wartosc = 0 to sprezyna nic nie bedzie robic. to jest po prostu wartosc ktora mowi Ci o tym o ile rozciagneles sprezyne, a symulacja to jest moment puszczenia tej sprezyny
co jakiś czas (np. 100ms albo mniej) wykonuj operacje:
dt = czas_miedzy_poprzednimi_obliczeniami_a_aktualnymi_w_sekundach; // czyli dla 100ms: 0.1
a += dt*(-k/mx-b/mv);
v += dta;
x += dtv;
w zasadzie cała symulacja zależy od warunków początkowych. jeśli chcesz możesz rozwiązać równanie różniczkowe albo znaleźć rozwiązanie w internecie i po prost skorzystac z wzoru, podstawiajac za czas aktualny czas w sekundach. takie rozwiązanie jak Ci podałem nie potrzebuje rozwiązywania równania różniczkowego i łatwo można te równanie różniczkowe zmienić (w razie gdybyś chciał dodać np. drugą sprężynę dołączoną do pierwszej albo jakiś zupełnie nowy element)
to, źe wszystkie elementy powinny być typu zmiennoprzecinkowego jest oczywiste, ale nie zapomnij o tym. jeśli dasz masę punktu przyczepionego do sprężyny = 0 to jak wynika z wzoru wszystko sie rozp***li