Výpočet gravitácie

Programovacie jazyky, rady, poradňa...
kubaj
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 241
Registrovaný: 10 mar 2013, 20:16
Bydlisko: Brno

Výpočet gravitácie

Príspevok od používateľa kubaj »

Ahojte, pracujem na jednej hre, avšak mám problém s výpočtom gravitácie. Snažím sa dosiahnuť pohyb podobný tomuto - objekt, ktorým pohybujem ja priťahuje ostatné objekty na obrazovke. K dispozícií mám aktuálnu pozíciu môjho objektu a pozíciu ostatných objektov, novú pozíciu teraz počítam nasledovne:

Kód: Vybrať všetko

enemies[i] = new Vector2(enemies[i].X + ((hra.battleship.getX() - enemies[i].X) / 50), enemies[i].Y + ((hra.battleship.getY() - enemies[i].Y) / 50));

kde enemies je list vektorov - tam sú uložené všetky pozície ostatných objektov, battleship.getX()/battleship.getY() - pozícia môjho objektu
Čím sú ostatné objekty bližšie k tomu môjmu, tým idú pomalšie, ale po chvíli pohybu za mojím objektom sa mi začnú zoskupovať do jedného - takže majú rovnaké pozície a pri ďalšom prepočte pozície budú mať zase rovnakú pozíciu. Čo by ste navrhli, ako by sa dala rýchlosť tých ostatných objektov vypočítať?
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Výpočet gravitácie

Príspevok od používateľa BX »

Tak chceš to, čo je na tom videu (nemenná rýchlosť), alebo chceš tú rýchlosť prispôsobovať? Ako prispôsobovať? Podľa toho, ako som to pochopil, sa ti to chová správne. Či?
Ak chceš rýchlosť nemennú, vypočítaj si smerový vektor, znormalizuj ho a tak pričítaj (príp. nejaký jeho násobok, podľa rýchlosti)
jorg22
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1087
Registrovaný: 12 aug 2006, 20:39
Kontaktovať používateľa:

Re: Výpočet gravitácie

Príspevok od používateľa jorg22 »

Neviem ci som to dobre pochopil ale ty nechces aby sa zoskupovali tie objekty? Tam je problem? Ostatne je vporiadku?
kubaj
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 241
Registrovaný: 10 mar 2013, 20:16
Bydlisko: Brno

Re: Výpočet gravitácie

Príspevok od používateľa kubaj »

No, rýchlosť môže byť aj nemenná, ale viac ma štve to zoskupovanie objektov, ono keď pridám na obrazovku tento objekt, tak vyberá náhodné súradnice ale po chvíľke sa dostanú všetky objekty na jednu - rovnakú pozíciu
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Výpočet gravitácie

Príspevok od používateľa BX »

No áno, pretože ťa doženú a potom idú stále za tebou. To by sa dialo aj v tej hre, keby to hráča nezabilo.
jorg22
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1087
Registrovaný: 12 aug 2006, 20:39
Kontaktovať používateľa:

Re: Výpočet gravitácie

Príspevok od používateľa jorg22 »

Ked nechces aby sa zoskupovali, tak im sprav vzajomnu koliziu, aby nemohli cez seba prechadzat.
kubaj
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 241
Registrovaný: 10 mar 2013, 20:16
Bydlisko: Brno

Re: Výpočet gravitácie

Príspevok od používateľa kubaj »

Oni sa zoskupia aj keď sa hýbem, ak chcete môžem dať video čo to robí
A tá vzájomná kolízia, skúšal som pre každý objekt vytvoriť obdĺžnik - rectangle, a kontroloval som či sa neprekrývajú, ale keď tam bolo viac ako 4 objekty tak FPS padlo na 2-4, takže kolízia asi moc do úvahy nepripadá

//Edit: tu je to video, akurát tuto už niesú na jednom mieste všetky, lebo som skúsil nastaviť každému objektu inú rýchlosť, ale stále sa podľa tej rýchlosti zoskupujú - tie čo majú rovnakú rýchlosť budú tiež na rovnakom mieste
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Výpočet gravitácie

Príspevok od používateľa BX »

Ale to sa chová úplne správne. Akého efektu chceš dosiahnuť? Možno na to bude treba ísť inak.
jorg22
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1087
Registrovaný: 12 aug 2006, 20:39
Kontaktovať používateľa:

Re: Výpočet gravitácie

Príspevok od používateľa jorg22 »

Mozno keby si pri vypocte pouzil nejake nahodne cislo a vynasobil to s rychlostou. Napr interval <0.9, 1> . A nahodne cislu budes generovat pri kazdom vypocte.
kubaj
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 241
Registrovaný: 10 mar 2013, 20:16
Bydlisko: Brno

Re: Výpočet gravitácie

Príspevok od používateľa kubaj »

Tak skúsil som nastaviť že každý objekt bude mať nejakú rýchlosť, ktorá bude nemenná a bude náhodne vygenerovaná pri vytvorení objektu, podľa toho či sa bude nachádzať nad/pod hlavným objektom tak bude táto rýchlosť plusová alebo mínusová, to isté aj keď je naľavo alebo napravo od hlavného objektu - rýchlosť bude plusová alebo mínusová, ale zas som narazil na problém, že sa pohybuje iba do ôsmych smerov - viď obrázok - červenou je znázornené ako sa dostane k hlavnému objektu teraz a zelenou farbou - ako by som to potreboval. Táto rýchlosť keby mala byť nemenná a zároveň chcem aby išiel objekt priamo k hlavnému objektu - nedalo by sa to nejako vypočítať cez goniometriu?
Prílohy
Untitled-1.jpg
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Výpočet gravitácie

Príspevok od používateľa BX »

BX napísal:Ak chceš rýchlosť nemennú, vypočítaj si smerový vektor, znormalizuj ho a tak pričítaj (príp. nejaký jeho násobok, podľa rýchlosti)
kubaj
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 241
Registrovaný: 10 mar 2013, 20:16
Bydlisko: Brno

Re: Výpočet gravitácie

Príspevok od používateľa kubaj »

Mohol by si bližšie popísať tú normalizáciu, resp. ako sa normalizuje ten vektor?
//Edit: no spravil som to tak ako si mi písal

Kód: Vybrať všetko

enemiesDirection[i] = (bsPosition - enemies[i]);
         enemiesDirection[i].Normalize();
         enemies[i] = enemies[i] + enemiesDirection[i] * enemiesSpeed[i];
Neuveríš ale stále sa zoskupujú, ale nejdú stále rovnakou rýchlosťou, čím bližšie sú, tým idú pomalšie :D , takže asi bude treba poriešiť tie kolízie
PS: Robím v C# s XNA frameworkom
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Výpočet gravitácie

Príspevok od používateľa BX »

Zoskupovať sa budú vždy. Aj keď tam dáš kolízie, jediné, čo sa zmení je, že sa neprekryjú, ale stále bude kopa gúl pri sebe. Neviem čo chceš dosiahnuť, keď ti toto vadí. Čo chceš, aby k tebe prišli, potom sa odstrelili preč a zase ťa naháňali?

A to, že nejdú rovnakou rýchlosťou je čudné, asi tam máš niekde chybu.
kubaj
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 241
Registrovaný: 10 mar 2013, 20:16
Bydlisko: Brno

Re: Výpočet gravitácie

Príspevok od používateľa kubaj »

No to aby sa neprekryli by bolo ideálne riešenie, ale ako to poriešiť keď tam bude napr. 100 tých malých objektov? Tak aby sa FPS držalo tak nad 50?
kubaj napísal:A tá vzájomná kolízia, skúšal som pre každý objekt vytvoriť obdĺžnik - rectangle, a kontroloval som či sa neprekrývajú, ale keď tam bolo viac ako 4 objekty tak FPS padlo na 2-4
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Výpočet gravitácie

Príspevok od používateľa BX »

Detekcia kolízií je veda sama o sebe a keď to spravíš zle (a to si spravil), tak to narobí galibu (a že ti aj narobilo)
Ideálne by bolo, keby si tam vedel použiť nejaký hotový fyzikálny engine. Inak hľadaj cez google, ako v xna čo najjednoduchšie urobiť kolíziu kruhov (hľadaj niečo ako billiard effect) Nebude to ale nič jednoduché, ak tam chceš tých objektov veľa.
Napísať odpoveď