Ahojte riešim jeden problém, z kolíziou dvoch kruhov v 2D priestore. Ako som už povedal mám dva kruhy, poznám ich smerové vektory, ale netuším ako vypočítať ich smerové vektory po ich vzájomnej kolízii. Viem že tam treba použiť niečo z analytickej geometrie, tak som to dal do tejto sekcie. Budem vďačný za každú radu.
Fórum › Matematika
Kolizia kruhov
no letmym odhadem bych to resil pres vzdalenost stredu obou kruznic a od te vzdalenosti by se odecetly oba polomery... jakmile je vzdalenost 0 nebo mensi tak doslo ke kolizi..
Pokud potřebuješ pouze vědět, zda-li nasatla kolize, můžeš to řešit pomocí vzdálenosti středů, jak bylo uvedeno výše.
Pokud ale potřebuješ znát i body dotyku/průniku, můžeš použít obecnou rovnici kružice, viz http://www.aristoteles.cz/matematika/analyticka_geometrie/kruznice/kruznice.php. Poté už enom vyřešíš soustavu 2 kvadratických rovnic.
Tak normálně laickej nástin - udělej součet všech tří vektorů pro každou jednotlivou kouli-kruh.
První vektor je pohybovej té koule. Druhej je převrácený vektor na místě dotyku. Tozn. že když padá kulička rovně dolů a je tam něco šikmo 45 stupňů zhora doleva dolu- bral bých výsledný úhel šikmo nahoru doleva. Vznikne ti vektor po tomhle součtu - změněnej z dolů na čistý doleva.
Pak přičteš třetí vektor což je pohybovej vektor druhého objektu jen jeho velikost a počítaná směrem pro místo střetu mínus střed. Zase když do kruhu něco ťukne vpravo dole, začne se pohybovat určitou rychlostí doleva nahoru. Velikost síly bude odchylka (klasickej vzorec pro úhel dvou úseček) směru pohybového vektoru druhého objektu - ku místu střetu objektů. Ta nabyde od 0 do 1, nemůžou do sebe narazit v jinym než max. 90 stupňovym úhlu svého pohybu prostorem vůči bodu střetu! Pro různý velikostní kruhy pak můžeš ještě násobit velikost vektoru.
ËDIT:
Ty hrátky s druhým vektorem (dotyku) jsem řešil poměrně úspěšně takhle:
uh1-dotyk, uh2-pohybovej vektor * v podstatě odečtenej úhel směru je potřeba vynásobit dvakrát
uh1:=arctan(zy/zx);
If zx<0 then uh1:=uh1+Pi;
end;
If vx=0 then begin If vy>0 then uh2:=Pi/2 else uh2:=3*Pi/2; end
else begin
uh2:=arctan(vy/vx);
If vx<0 then uh2:=uh2+Pi;
end;
If (uh1>=3*Pi/2)and(uh2<Pi/2) then
uh1:=uh1-2*Pi else
If (uh2>=3*Pi/2)and(uh1<Pi/2) then
uh2:=uh2-2*Pi;
If abs(uh1-uh2)<=Pi/2 then begin
uh:=uh1-uh2;
pomer:=(Pi+2*uh);
uh2:=uh2+pomer;
If (sila<>0)and(rych<10) then begin
sila:=sila*120;
vx:=round(sila*cos(uh2));
vy:=round(sila*sin(uh2));
To illioner : zbytocne komplikovane.
Prerob si to do taziskovej sustavy, a tam vyries priamu zrazku 2 kruhov, co ako hovoris uz vyriesit vies. Potom k novym vektorom pricitaj rychlost taziska. Hotovo.
(rychlost taziska ziskas ako (m1*v1+m2*v2)/(m1+m2) v1, v2 su vektory a m1, m2 su nejake ekvivalenty hmotnosti)
Ďakujem, to z tým sčítaním vektorov mi veľmi pomohlo, len mám ešte jednu otázku. Ak mám daný bod, jeho smerový vektor a vzdialenosť ktorú má prekonať, ako sa dopočítajú jeho súradnice po prekonaní tej vzdialenosti? Zdá sa že som z tej analytiky toho už moc zabudol.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Kolízia so stenou — založil Dead Boss
Kolízia (XNA) — založil Andrej
Kruhový seznam — založil Redby
Pohyb těles po obvodu kruhové dráhy — založil Veronika
Kruhový spojový seznam - přečetní na určitém indexu — založil dryXXX