"Jayhawk" <spamaway@here.and.now> wrote in message
news:aeklir$l9d$1@news.cybercity.dk...
> > M.h.t. restitutionskoefficienter forskellig fra nul, så kan et
> > relakseringsalgoritme også benyttes til at simulere dette, hvis man
f.eks.
> > modellerer stive legemer v.h.a. tetraedre (4 partikler, 6 bånd).
> > Opdateringsreglen er bare en anden (udfør parvis kollision af de
> sammensatte
> > partikler, med den givne restitutionskoefficient og iterer over alle
bånd,
> > interne+eksterne, evt. flere gange).
>
> Det forstår jeg ikke helt. Mener du at man istedet for at flytte
partiklerne
> 100% ud af hinanden, så beregner man graden af tilbagekastning baseret på
> hvilke partiker der er i kollisionen, og opfylder derefter båndene?
Det var også lidt hurtigt skrevet. Det fortjener en længere forklaring, men
jeg har desværre ikke tid til at gøre det i detaljer
Det er ikke en "anden" opdateringsregel, som jeg skrev, men en _ekstra_
opdateringsregel - det er egentlig et ekstra skridt man skal køre.
Partiklerne skal stadig flyttes som før så båndene er opretholdt, men der
kommer et ekstra trin efterfølgende, hvor deres hastigheder (d.v.s. de gamle
positioner) bliver opdateret v.h.a. relaksering.
Det illustreres måske hurtigst ved et eksempel. Forestil dig en stang lavet
af to partikler med et bånd mellem dem. Stangen rammer gulvet lodret ned,
øverste partikel kaldes A, nederste B. Afstandsbåndet vedligeholdes som
normalt ved Verlet, men nu er der også en slags hastighedsbånd (det er måske
ikke rigtigt at omtale det som et "bånd"). Anyway, hastigheds-"båndet"
kigger på de to partiklers hastigheder i stangens retning og bytter i
relakseringstrinnet faktisk om på de to partiklers hastighed projiceret ind
på stangen. Håndteringen af dette interne bånd svarer lidt til at sætte de
to partikler sammen med en udæmpet fjeder som får lov at foretage en halv
periode af sin svingning momentant.
I hastigheds-relakseringsskridtene itereres over eksterne+interne bånd. I
dette tilfælde bliver det:
Hastigheder for de to partikler: v og v (nedad er positivt).
Eksterne bånd: Den nederste partikel, B, har hastighed ned i gulvet. B'
hastighed vendes rundt og multipliceres med restitutionskoefficienten.
Hastigheder: v og -v.
Interne bånd: Nu har de to partikler kurs mod hinanden. P.g.a. båndet mellem
dem kolliderer vi dem nu som om de ramte sammen i en elastisk kollision.
D.v.s. vi vender fortegn på både A og B's hastigheder. Hastigheder: -v og v.
Eksterne bånd (igen, relakseringsiteration 2): Den nederste partikel, B, har
nu hastighed ned mod gulvet igen (dog langsommere end før). Hastigheden
vendes igen, denne gang uden at benytte restitutionskoefficienten.
Hastigheder: -v og -v.
Alle er glade, de interne og eksterne hastighedsbånd er opfyldt, stangen
hopper opad som forudsagt. Som sagt virker dette approach også fint med
tetraedre i 3D til stive legemer. Husk det er de projicerede hastigheder
langs stangen der skal byttes om, egentlig ikke de to partiklers hastigheder
som i eksemplet for oven (her var det det samme fordi stangen var lodret).
Manipulationerne af hastigheder foregår naturligvis ved at ændre på de
"gamle positioner", jvf. Verlet-metoden.
Atter skrevet lidt i hast, så det er med garanti ikke så pædagogisk som det
kunne være. Men jeg håber det hjælper.
Det virkede i sin tid fint da jeg lavede det på denne måde, og er også
'pænt' og passer ind i det klassiske Verlet-approach på en eller anden måd.
I Hitman: Codename 47 havde vi bare ikke brug for restitutionskoefficenter
ulig 0 ("døde mennesker hopper ikke") så den overflødige kode blev pillet
ud, derfor skriver jeg ikke noget om det i artiklen.
Thomas