.[ ČeskéHry.cz ].
Kolize se třením
Jdi na stránku Předchozí  1, 2
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Fyzikální modely
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
]semo[



Založen: 29. 07. 2007
Příspěvky: 1525
Bydliště: Telč

PříspěvekZaslal: 27. srpen 2007, 17:18:35    Předmět: Odpovědět s citátem

možná už píšu pozdě, ale i tak to zkusím:

Pokud ti de jen o to, aby se objekty při kolizi trochu zpomalily, nebo třeba nějaký autíčko zabrzdilo o terén, tak stačí tohle jednoduchý řešení:
Při kolizi vypočteš ještě kromě směru odrazu Nc (normála kolize) i tangentu Tc

Tc := VectorCrossProduct(Nc, VectorCrossProduct(Nc, VectorNormalize(VRel)));

VRel je vektor relativní rychosti

a pak nějak tak:

AddVector(ImpulseResponse, VectorScale(Tc, Fric * Impulse));

ImpulseResponse je reakce na kolizi (odraz) velikosti Impulse. Fric je něco < 1

...jinými slovy, drhneš s tim při kolizi nějakou silou odvozenou od kolizní odezvy. Neni to asi zrovna ideální, ale funguje to parádně.
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
frca



Založen: 28. 07. 2007
Příspěvky: 1554

PříspěvekZaslal: 27. srpen 2007, 21:48:17    Předmět: Odpovědět s citátem

Rád bych dosáhl i nějakých rotačních efektů (drhnutím se roztočí objekt apod.). Spíš než že bych měl představu o tom, co by se mělo dít, chtěl bych to naimplementovat odpovídající fyzice, a pak pozorovat, co se bude dít. Pokud to pak bude dávat smysl, je to správně Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
]semo[



Založen: 29. 07. 2007
Příspěvky: 1525
Bydliště: Telč

PříspěvekZaslal: 28. srpen 2007, 07:03:13    Předmět: Odpovědět s citátem

To co sem popsal ti objekt taky roztočí; teda ne žádný kolo-kolo mlýnský za 4 rýnský :), ale rotaci to udá, protože působíš mimo těžiště (v místě kolize).

Když sem naimplementoval kolizní systém, taky sem chtěl hnedka tření, pak sem našel tenhle způsob, byl hotovej za 10 minut a doteď to úspěšně používám.
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Sinuhet



Založen: 25. 08. 2007
Příspěvky: 5

PříspěvekZaslal: 28. srpen 2007, 12:15:21    Předmět: Odpovědět s citátem

dobře ale radši si to přečti z učebnice fyziky...Takže dáš tělesu hmotnost m, moment setrvačnosti J, který můžeš zhruba určit, rozměry atd. V jednodušším případě kdy ta třecí síla působí kolmo vzhledem ke spojnici těžiště a místa dotyku je působící moment síly M = F.r (velikost třecí síly krát vzdálenost působiště od těžiště) ten způsobí rotaci tj. M = J.epsilon, kde epsilon je uhlove zrychleni takze tam musis mit casovac. Protoze srazky jsou moc kratke tak nevim jestli by to takhle slo. Anebo das tomu telesu rotacni impuls...moment sily krat doba M.t a ten soucin bude konstantni a rovna se J. omega, omega je uhlova rychlost, po srazce vlastne. A jeste se mi zda ze to je tak ze kdyz pusobi ta treci sila (libovolna sila) tak das jeste jednu silu do teziste telesa se stejnym smerem jako ta sila. No nevim je to asi chaoticky napsano.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Fila



Založen: 31. 07. 2007
Příspěvky: 853

PříspěvekZaslal: 28. srpen 2007, 13:15:36    Předmět: Odpovědět s citátem

Sinuhet napsal:
A jeste se mi zda ze to je tak ze kdyz pusobi ta treci sila (libovolna sila) tak das jeste jednu silu do teziste telesa se stejnym smerem jako ta sila. No nevim je to asi chaoticky napsano.

Nemuzes tu treci silu jen tak prenest na teziste -- to ze pusobi na nejaky bod mimo teziste ovlivni jak linearni silu v tezisti, tak rotacni moment -- zkus pohledat "tenzor setrvacnosti" a "rotacni moment" -- ja si s timto hral uz par let dozadu a fakt si skoro nic nepamatuju Sad.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Exolon



Založen: 30. 07. 2007
Příspěvky: 4

PříspěvekZaslal: 28. srpen 2007, 22:03:47    Předmět: Odpovědět s citátem

Je to psany naslepo, ale tusim by melo stacit toto (mozna prehodit nejaky vektory v Cross) :

MODERATOR: mame tu tag CODE!!!
kód:
float contactImpulse = blabla // velikost impulsu v kontaktnim bode
float frictionCoeff= blabla // treci koeficient mezi materialy

C_Vector distToContact = contactPos - rigidCentreOfMass; // vektor od teziste rigidu ke kontaktnimu bodu

C_Vector contactPointVel = rigidLinearVelocity - (rigidAngularVelocity.Cross(distToContact));  // aktualni rychlost kontaktniho bodu na rigidu

float normalCorrection =  1.0f - fabs(contactPointVel.Dot(contactNormal)); // decentni korekce pro vypocet sily (zajima nas jen rychlost kolma na normalu)

contactPointVel.Normalize(); // normalizace te rychlosti (zajima nas jen smer)

C_Vector contactForce = (contactPointVel.Cross(contactNormal)).Cross(contactNormal); // sila bude pusobit kolmo na normalu, ale v opacnem smeru nez rychlost kontaktniho bodu na rigidu

contactForce.Normalize(); // normalizace (zajima nas jen smer)

contactForce *= (contactImpulse * frictionCoeff * normalCorrection) / timeStep; // vypocet treci sily

rigid->ApplyForce(contactForce, contactPos); // aplikace sily v kontaktnim bode

_________________
Exolon
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Sinuhet



Založen: 25. 08. 2007
Příspěvky: 5

PříspěvekZaslal: 29. srpen 2007, 13:03:03    Předmět: Odpovědět s citátem

Fila: No tak jsem to myslel, libovolnou působící sílu přeneseš do těžiště a ta způsobí jen posuvný pohyb. A ta libovolná síla bez posunutí zase udělá čistou rotaci.

Obecné principy ze serveru Aldebaran:

...
Nejspíš všechno, co napíšu už tu porůznu zaznělo, ale přišlo mi, že bych to mohl trochu shrnout.

Výsledku se lze dobrat pomocí několika jednoduchých pravidel, je však potřeba si je zapamatovat. Ani já sám nevím, odkud se všechna vzala.

1) Pokud na těleso působí nějaká síla F, můžeme její působiště (bod, ve kterém působí) posouvat libovolně ve směru působení síly ("dopředu" a "dozadu").

2) Síly se sčítají jako vektory, ale musíme je umístit do stejného působiště (bodu)

3) Kamkoliv můžeme přidat dvě síly, stejně velké, opačného směru, se stejným působištěm. Jejich účinek se neprojeví.

4) Pokud síla působí v těžišti, nevyvolává rotační pohyb tělesa.

5) Pokud na těleso působí "dvojce sil", což jsou dvě stejně velké síly opačného směru, které nemají stejné působiště, potom vyvolávají pouze rotační pohyb tělesa, okolo jeho těžiště. Vůbec nezávisí na tom, do kterého bodu tělesa tyto síly umístíme, záleží jen na velikosti sil a jejich "kolmé" vzdálenosti. Tento součin
M = F * d nazýváme moment síly. Je to takový polovektor.

Tohle nám stačí, abychom vyřešili jakoukoliv úhohu. Síly porovnáme a sečteme tak, aby nám zbyla jen jedna síla působící v těžišti tělesa a jedna silová dvojce - moment síly.

PS: Síly musíme vždy určovat vzhledem k inerciální souřadné soustavě. V jiných soustavách totiž neplatí Newtonův zákon F = m*a
...

A teď je třeba se podívat na ten kód od Exolona jestli je správně. Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Sinuhet



Založen: 25. 08. 2007
Příspěvky: 5

PříspěvekZaslal: 29. srpen 2007, 20:33:20    Předmět: Odpovědět s citátem

Exolon: Malý dotaz - kam míří vektor contactNormal ?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Sinuhet



Založen: 25. 08. 2007
Příspěvky: 5

PříspěvekZaslal: 29. srpen 2007, 20:40:49    Předmět: Odpovědět s citátem

Nebo taky proč nás zajímá jen rychlost kolmá na normálu?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Exolon



Založen: 30. 07. 2007
Příspěvky: 4

PříspěvekZaslal: 30. srpen 2007, 00:47:45    Předmět: Odpovědět s citátem

Protoze nas zajima jen a pouze treni, o odraz se uz postaral kontaktni impuls. contactNormal je normala povrchu v bode dotyku (napr: normala v bode dotyku s plochou, do ktere rigid narazil). Cili odraz, ci zastaveni pohybu rigidu smerem k plose je zajisteno impulzem v miste dotyku. Tento impuls je generovan podel smeru kontaktni normaly a zajisti, aby rigid v bode dotyku neproniknul do terenu. Takze dalsi slozka celkoveho pohybu rigidu muze byt uz jen kolma na tuto normalu. Cili je potreba jeste spocitat treni kolme na normalu, coz dela ten mnou uvedeny kod. Zaroven je v nem pocitano s rotaci onoho rigidu. Napr. kulecnikova koule jiz, cerstve uvedes tagem do pohybu tak, ze po konci dotyku taga se sune bez rotace, se snazi
1. v kazdem timeStepu gravitacnim zrychlenim konat pohyb dolu a tento pohyb zastavi impulz od podlozky.
2. kona pohyb rovnobezny s podlozkou, jenz je kolmy na normalu podlozky.
A prave ten nas zajima a ten resi muj kod, ktery podle velikosti impulzu od podlozky a vektoru rychlosti v bode dotyku spocita silu, jenz se uplatni na kouli v miste dotyku a zpusobi zmenu jeji linearni i angularni rychlosti (treni). V uvedenem pripade kouli brzdi v lineranim pohybu a zaroven ji roztaci, aby neprokluzovala, ale aby se kutalela (odvalovala bez prokluzu).
Pokud se koule po stouchu rotuje, tak zalezi na rychlosti a smeru rotace v bode dotyku. Jestlize koule v bode dotyku rotuje proti smeru linearniho pohybu koule, tak kod zpusobi, ze rotaci bude tlumit, cimz vznikne treni proti smeru rotace, ale toto treni kouli bude linearne zrychlovat v jejim smeru pohybu (neboli to co se deje pri nabezniku, kdy koule svou nadmernou doprednou rotaci vuci linearnimu pohybu zpusobi sve dalsi linearni zrychleni, dokud se rychlost rotace nesrovna s bezprokluzovym odvalovanim).
Opacne pokud ma koule v bode dotyku vektor rychlosti vetsi nez vektor rychlosti v tezisti a maji-li stejny smer, tak ten kod zpusobi, ze se linerni pohyb i rotace koule bude zpomalovat, ovsem dostatecny nadbytek rotace nakonec zpusobi, ze koule po nejake dobe zmeni svuj linealni smer a zacne se pohybovat zpet k tagu (neboli to co se deje pri tahaku a jeste lepe pri sbodci).

Upozornuji, ze jsem neoveril funkcnost, psal jsem to z hlavy Rolling Eyes
_________________
Exolon
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Fyzikální modely Časy uváděny v GMT + 1 hodina
Jdi na stránku Předchozí  1, 2
Strana 2 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna