/ Forside / Karriere / Uddannelse / Højere uddannelser / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Højere uddannelser
#NavnPoint
Nordsted1 1588
erling_l 1224
ans 1150
dova 895
gert_h 800
molokyle 661
berpox 610
creamygirl 610
3773 570
10  jomfruane 570
numerisk integration og bånd
Fra : Jayhawk


Dato : 14-06-02 19:16

Jeg prøver at få en blanding af verlet og "bånd" til at fungere sammen.
Det er som sådan heller ikke videre svært, men jeg har dog lige et enkelt
spørgsmål.

Hvis jeg har et objekt som bevæger sig i ad lige linie mod en mur og rammer
muren skævt
O--------------/--- som her hvor / er muren og -- er banen.
Skal jeg så for at opflyde et evt. bånd, der siger at passage af muren ikke
er tilladt, flytte mit objekt tilbage langs den bane det bevægede sig ad før
det ramte muren, eller skal jeg flytte det væk fra muren i en vinkel der
modsvarer indfaldsvinklen?
enten O---------/-----O rettet til O--------O/

eller O
|
O---------/-----O rettet til O----------/

Håber min ascii kunst fungerer

Faktisk alle steder hvor jeg læser om det siger de at man skal flytte det
tilbage til hvor det rammer muren, men det virker bestemt mere logisk at man
bøjer bevægelsen af istedet.
Det kan potentielt blive et problem hvis ens timestep har været så stort at
den tilrettede bane OGSÅ rammer forbi en mur, og man så skal bøje den bane
også... så...?

Har i her nogen tips til en korrekt måde at klare det på?





 
 
Jeppe Stig Nielsen (15-06-2002)
Kommentar
Fra : Jeppe Stig Nielsen


Dato : 15-06-02 14:58

Jayhawk wrote:
>
> Håber min ascii kunst fungerer

Det går, men det ville være bedre hvis du indstillede Outlook til at
bruge en skrifttype (fx »fixedsys«) hvor alle tegn har samme bredde.

Hvis en partikel (en bold) rammer en mur og reflekteres (kastes til-
bage), gælder loven »indfaldsvinkel er lig udfaldsvinkel«. Det vil
sige at partiklen løber tilbage ad en anden bane end den kom ind ad,
men vinklen mellem muren og hver af de to retninger er den samme.
Og udfaldsretningen ligger i samme plan som den der udspændes af
murens normalretning og indfaldsretningen.

Skitse (brug fastbredde-skrifttype):

\
\ ##
\ ## M
\## U
/## R
/ ##
/ ##
o


Man kan udtrykke det på den måde at bolden fortsætter langs spejl-
billedet (mht. murens plan) af den bane den ville have fulgt hvis
muren ikke havde været der.

--
Jeppe Stig Nielsen <URL:http://jeppesn.dk/>. «

"Je n'ai pas eu besoin de cette hypothèse (I had no need of that
hypothesis)" --- Laplace (1749-1827)

Jeppe Stig Nielsen (15-06-2002)
Kommentar
Fra : Jeppe Stig Nielsen


Dato : 15-06-02 15:25

Jeppe Stig Nielsen wrote:
>
> > Håber min ascii kunst fungerer
>
> Det går, men det ville være bedre hvis du indstillede Outlook til at
> bruge en skrifttype (fx »fixedsys«) hvor alle tegn har samme bredde.

I stedet for »fixedsys« kan man bruge »Courier New« som foreslået på
http://www.blakjak.demon.co.uk/out_exp.htm

Nu bruger jeg ikke selv Outlook, så det er på eget ansvar. Når man
bruger en fastbredde-skrifttype, vil følgende linjer være lige lange:

iiiiiiiiii
WWWWWWWWWW

--
Jeppe Stig Nielsen <URL:http://jeppesn.dk/>. «

"Je n'ai pas eu besoin de cette hypothèse (I had no need of that
hypothesis)" --- Laplace (1749-1827)

Jayhawk (15-06-2002)
Kommentar
Fra : Jayhawk


Dato : 15-06-02 19:51

> Hvis en partikel (en bold) rammer en mur og reflekteres (kastes til-
> bage), gælder loven »indfaldsvinkel er lig udfaldsvinkel«. Det vil
> sige at partiklen løber tilbage ad en anden bane end den kom ind ad,
> men vinklen mellem muren og hver af de to retninger er den samme.
> Og udfaldsretningen ligger i samme plan som den der udspændes af
> murens normalretning og indfaldsretningen.

Takker for svaret, men det var jeg nu godt klar over
Problemet var mere at de eksempler på brug af bånd, til fysiske
simulationer, som jeg har set, alle løser en "constraint violation" ved at
flytte objektet tilbage langs dets bane til det er på den rigtige side af
muren....også hvis indfaldsvinklen er forskellig fra 90 grader... uden en
alm. reflektion med vinkel ud=vinkel ind, spejlet omkring fladens normal.
Det undrede mig en del. Jeg er ikke klar over om grunden er at teksterne var
forsimplede, eller... noget andet.



Thomas Jakobsen (17-06-2002)
Kommentar
Fra : Thomas Jakobsen


Dato : 17-06-02 09:28


"Jayhawk" <spamaway@here.and.now> wrote in message
news:aedbsq$qk2$1@news.cybercity.dk...

> Hvis jeg har et objekt som bevæger sig i ad lige linie mod en mur og
rammer
> muren skævt
> O--------------/--- som her hvor / er muren og -- er banen.
> Skal jeg så for at opflyde et evt. bånd, der siger at passage af muren
ikke
> er tilladt, flytte mit objekt tilbage langs den bane det bevægede sig ad
før
> det ramte muren, eller skal jeg flytte det væk fra muren i en vinkel der
> modsvarer indfaldsvinklen?

Den "rigtige" måde er jo at stoppe tiden ved kollisionen og så ændre
hastigheden til den nye værdi og fortsætte tiden til slutningen af
tidsskridtet.

Men den hurtige måde er at flytte/projicere objektet ud af muren og så ændre
tilsvarende på den gamle position i Verlet-integrationen. Hvis tidsskridtene
er små nok betyder det intet for det visuelle og vil være stabilt.

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).

Thomas




Jayhawk (17-06-2002)
Kommentar
Fra : Jayhawk


Dato : 17-06-02 13:45

> Den "rigtige" måde er jo at stoppe tiden ved kollisionen og så ændre
> hastigheden til den nye værdi og fortsætte tiden til slutningen af
> tidsskridtet.

Det er også en metode jeg har prøvet mig frem med, og den er, som du siger
rigtig, og virkede fint. Det var dog en smule besværligt når man efter at
have afbøjet banen løb ind i endnu en kollision. Med store
timesteps/hastigheder og komplekse scener kunne det ske ret ofte.

> Men den hurtige måde er at flytte/projicere objektet ud af muren og så
ændre
> tilsvarende på den gamle position i Verlet-integrationen. Hvis
tidsskridtene
> er små nok betyder det intet for det visuelle og vil være stabilt.

Jeg troede egentlig det var en slem nono at gå tilbage og beregne en falsk
gammel position for verlet, da det elegante normalt er at den er i stand til
at klare den slags selv?

For eksemplet med skrå kollision med en flade, skal jeg altså spejle både
den gamle og den nye position over fladen? Det ser ud til at give løsningen
(her på min sjuskede tegning). Retningsvektoren bliver ændret til den
korrekte, og ved evt at skalere den (flytte den gamle position tættere på
den nye), kan man simulere ikke-total energibevarelse.

Efter sammenstød, før bånd-rettelsen

B |
\ |
\ |
\|
|
|\
| \
| \
| A

Efter sammenstød. Både nye og gamle position
flyttet modsat muren langs murens normalvektor.

B------>B
\ | /
\ | /
\|/
|
/|\
/ | \
/ | \
A<------A


Hm. Ja nu læser jeg lige hvad du skriver en ekstra gang og forstår dig nok
lidt bedre nu. Det er vel egentlig præcis det du mener med at "projectere
positionen ud af muren" og "ændre den gamle tilsvarende". Projectere den
nye position _ud_ af muren og den gamle _ind_ i muren.


> 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?



Thomas Jakobsen (17-06-2002)
Kommentar
Fra : Thomas Jakobsen


Dato : 17-06-02 14:28


"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




Thomas Jakobsen (17-06-2002)
Kommentar
Fra : Thomas Jakobsen


Dato : 17-06-02 14:32

"Thomas Jakobsen" <tj@ioi.dk> wrote in message
news:3d0de3fa$0$78786$edfadb0f@dspool01.news.tele.dk...

> 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.

Jeg kan i øvrigt ikke huske, hvad der viste sig at være bedst: Om
positionerne skal fikses først, og så hastighederne eller vice versa.
Eksperimenter burde give svar her Det kunne godt give mening at ordne
hastighederne før positionerne, men måske overser jeg et eller andet.

Thomas





Thomas Jakobsen (17-06-2002)
Kommentar
Fra : Thomas Jakobsen


Dato : 17-06-02 14:36


"Thomas Jakobsen" <tj@ioi.dk> wrote in message
news:3d0de3fa$0$78786$edfadb0f@dspool01.news.tele.dk...

Glemte lige restitutionskoefficienten, e, i udtrykkene:

> Eksterne bånd: Den nederste partikel, B, har hastighed ned i gulvet. B'
> hastighed vendes rundt og multipliceres med restitutionskoefficienten.
> Hastigheder: v og -ev.
Her.

> 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: -ev og
v.
Her.

> 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: -ev og -ev.
Og her.

Vupti. Stangen hopper op som forudsagt med en fart på fraktionen e af den
oprindelige.

Thomas




Jayhawk (18-06-2002)
Kommentar
Fra : Jayhawk


Dato : 18-06-02 14:14

> 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

Forståligt nok. I har vel travlt med "rammemand to" ;-]
Tak for svaret, og jeg tror nok jeg forstår det denne gang. Skal lige have
testet det af i praksis.
Det er nu forbløffende hvad man kan slippe afsted med når man bruger
verlet+constraints vs. euler og alm. fjedre.





Carsten Svaneborg (17-06-2002)
Kommentar
Fra : Carsten Svaneborg


Dato : 17-06-02 16:46

Jayhawk wrote:
> Jeg prøver at få en blanding af verlet og "bånd" til at
> fungere sammen.
Ahh. Nu forstår jeg.

> Har i her nogen tips til en korrekt måde at klare det på?

Har du spekuleret på at løse problemet ved at simulere
Euler-Lagrange/Hamilton ligningerne istedet for Newton's
anden lov med eksplicitte constraints?

Fx. hvis du har en stiv pind, så kan du simulere bevægelsen
af de to endepunkter (6 tal) plus constraint ligningen at
afstanden mellem enderne skal være fast. Men du kunne også
bruge koordinater hvor du beskriver centrum af pinden +2
vinkler til dens orientering (5 tal) du har så ikke brug
for nogen constraint ligning fordi den er indbygget i dit
valg af koordinater.

Problemer ligger så i at udtrykke bevægelsesligningen i
disse koordinater istedet for Newtons anden lov, og det
er hvad Euler-Lagrange ligningen gør for dig, hvis du
kan formulere Lagrangianen L = K-V hvor K er den kinetiske
energi og V er den potentielle energi, udtrykt i dit valg
af koordinater og deres tidsaflede.

Hver koordinat q er så beskrevet ved en Euler-lagrange ligning
dL/dq - d/dt[dL/d(dq/dt)] = F hvor F er en ydre (generaliseret) kraft.

Du vil dog normalt kunne formulere de ydre krafter i
definitionen af potentialet V, hvorfor F=0.

se
http://mathworld.wolfram.com/Euler-LagrangeDifferentialEquation.html
http://www.plmsc.psu.edu/~www/matsc597c-1997/phases/Lecture5/node4.html
http://www.uwm.edu/~norbury/gr/node36.html

--
Mvh. Carsten Svaneborg
Where do you not want to go tomorrow:
http://www.softwarepatenter.dk

Jayhawk (18-06-2002)
Kommentar
Fra : Jayhawk


Dato : 18-06-02 14:16

> Ahh. Nu forstår jeg.

Ah, nu forstår jeg ikke
Jeg er i den uheldige situation at jeg nok kan lave software og nok kender
en vis del til matematik (gym niveau), men jeg har sjældent den store succes
med at nærlæse en stak formeler og derfra komme til en algoritme.

Tak for linksne dog. Ofte kan de i det mindste føre videre hen i verden, til
noget jeg arme mand forstår.



Carsten Svaneborg (20-06-2002)
Kommentar
Fra : Carsten Svaneborg


Dato : 20-06-02 15:24

Jayhawk wrote:
> Ah, nu forstår jeg ikke

Det kommer fra analytisk mekanik, der nok er den mest
smukke, og forfinede form for mekanik der findes. ;*)

Normalt kan man klare sig med kartesiske koordinater og
Newtons anden lov. Men hvis der er constraints, så skal
skaber disse forskellige krafter, der så skal inkluderes
i Newtons anden lov, således at fx. en pind beholder sin
længde selvom forskellige krafter angriber i top og bund.

Dette er uhyrligt besværligt og ikke ret sjovt at have
med at gøre. Fx. er det jo dumt at løse bevægelsen for
et pendul med kartesiske koordinater fordi der er en
koblet x og y bevægelse, samt normalkrafter således at
længen af pendulet er konstant, mens bevægelsen af
pendulet jo er endimensional!.

I formuleringen af Euler-Lagrange ligningen tager man det
udgangspunkt at vi bør vælge et sæt fornuftige koordinater
og beskrive bevægelsen i de koordinater.

For et pendul er det klare valg af koordinater længden af
pendulet og vinklen, længen af pendulet er altid konstant,
så det er en rimelig let bevægelsesligning at løse ;*),
mens det er mere problematisk med vinklen, men stadig
langt lettere end i kartesiske koordinater.

Istedet for at fokusere på krafter bruger man istedet
kinetisk energi og potentiel energi.

For et pendul hvor phi er vinklen og l er længen af armen
er K= 0.5*m*(l dphi/dt)² fordi hastigheden i enden af
armen er v= l dphi/dt .

Den potentielle energi V(phi)= mg h(phi) = mg l*(1-cos(phi))

Lagrange funktionen L = K - V er altså blot en funktion af
phi og dphi/dt. Dette er ganske normalt.

Lagrange ligningen er
dL/d(phi) - d/dt[dL/d(dphi/dt)] = 0

dvs.
- dV/d(phi) - d/dt [dK/d(dphi/dt)] = 0

mgl sin(phi) + d/dt [ ml² d(phi/dt)] = 0

d²(phi)/dt² = - g sin(phi)/l

Der er bevægelsesligningen for et pendul. (er fortegn korrekt?)

Dvs. istedet for at løse to koblede differential ligninger
med et constraint, så giver Euler-Lagrange ligningen
bevægelsesligningen direkte uden de store problemer.

Det ville være langt mere problematisk at skulle
transformere Newtons anden lov og krafter til det
samme koordinat repræsentation som i EL ligningen.




Bare som test eksempel hvad sker der hvis man har en
Lagrange funktion givet som L=K-V = 0.5*mv² - V(x) for en
en dimensionel bevægelse hvor x er en kartesisk koordinat
og v=dx/dt er hastigheden.

Euler-Lagrange ligningen er da
dL/dx - d/dt[dL/dv] = 0

-dV(x)/dx - d/dt [m v ] = 0

F = -dV(x)/dx = m dv/dt = ma

dvs. F = ma

Newtons anden lov følger fra Euler-Lagrange ligningen når
man bruger kartesiske koordinater. Men EL ligningen gælder
uafh. hvilke koordinater man vælger at beskrive systemet med,
hvorimod Newtons anden lov KUN gælder hvis det er kartesiske
koordinater.

Problemet med at formulere krafterne der skal bruges i
Newtons anden lov erstattes dog af problemet med at
formulere den kinetiske og potentielle energi i de
generaliserede koordinater, men det er dog til at have
med at gøre.

--
Mvh. Carsten Svaneborg
Where do you not want to go tomorrow:
http://www.softwarepatenter.dk

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste