View previous topic :: View next topic |
Author |
Message |
Kamazs Guru
Joined: 17 Jan 2003 Posts: 829 Location: The glorious ancient city of Loja
|
Posted: Tue Aug 07, 2007 11:20 am Post subject: Hipotenūzas rēķināšana baigi noslogo proci? |
|
A?
(Runa, protams, par spēli un spēles galveno ciklu, kurā hiopotenūza tiktu rēķināta ļoti bieži, pie jebkuras kolīzijas. Šobrīd man ir "kastes" veida kolīziju detekcija, bet man vajag mazliet citu.)
Es protams veiktu testus, bet tagad esmu darbā un vnk radās dažas domas. Kā tur īsti ir? Es zinu, ka dalīšana un reizināšana ir "smagas"darbības, tādēļ kvadratēšana un kvadrātsaknes vilkšana varētu būt "ļoti smaga" figņa...no otras puses, kolīzijas ar lodi 3D spēlēs, imo, ir diezgan populāras. So, kā tad īsti ir, cik bīstama ir hipotenūza? _________________ ...un es uzskatu, ka Fallout ir etalons |
|
Back to top |
|
|
DeRatizators
Joined: 27 Apr 2006 Posts: 492
|
Posted: Tue Aug 07, 2007 12:26 pm Post subject: |
|
Testus neesmu veicis, bet zinu ka saknes vilkšana noslogo.
Ateceries, ka salīdzināšanai gandrīz nekad nevajag vilkt to kvadrātsakni. ja ir iespējams, labāk otru salīdzinamo paņemt kvadrātā.
Protams, ja vajag precīzu garumu, tad neko... :]
EDIT: Paskatījos un izrādās ka googlee var atrast čupu ar dažādām kvadrātsaknes aproksimācijām. _________________ Any PANCAKE has to be long and thin and short and fat. Not to mention being an excellent insulator and a superb conductor. |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Tue Aug 07, 2007 2:06 pm Post subject: |
|
A par profileri esam dzirdējuši?
Tas, ka kautkāda kvadrātsakne "noslogo" procesoru tas neko nenozīmē. Ja spēlē būs kautkāda citai nesaistītasmaga darība, ko piemēram AI, tad lai kā tu optimizētu savu vadrātskanes vilkšanu, programmu ātrāku nepadarīsi (jo lēnais AI joprojām paliks lēns). Tāpēc vispirms pārliecinies, ka kvadrātsakne ir viens no lielākajiem bremzes cēloņiem un tikai tad optimizē.
90/10 likums - 90% laika izpildes laika, tiks izpildīts tikai 10% koda - optimizējot atlikušos 90% koda tu neko vairāk par 10% ātrdarbību neiegūsi. |
|
Back to top |
|
|
elvman Indago Uzvarētājs
Joined: 09 Apr 2003 Posts: 1278 Location: Kuldiga
|
Posted: Tue Aug 07, 2007 9:42 pm Post subject: |
|
Kāpēc tev vajag rēķināt kvadrātsakni?
Slikta kolīzijas testēšanas metode:
DX=distance x
DY=distance y
Hipotenūzu rēķinātu tā - distance=sqrt(DX*DX+DY*DY)
Pēc tam tu šo hipotenūzu salīdzinātu ar minimālo attālumu un noteiktu, vai objekti ir sadūrušies:
if(distance<min_distance)
notika_sadursme;
bet lai taupītu resursus, kāpēc jāvelk kvadrātsakni, ja var kāpināt minimālo distanci kvadrātā?
distance_kvadrātā=DX*DX+DY*DY;
if (distance_kvadrātā<min_distance*min_distance)
notika_sadursme;
un no hipotenūzas rēķināšanas esam tikuši vaļā. _________________ long time; /* know C */ |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Tue Aug 07, 2007 11:15 pm Post subject: |
|
A ja nu viņam attālumu vajag dabūt, lai rēķinātu tur kautkādus krustošanās koordinātes vai vēl sazin ko? |
|
Back to top |
|
|
elvman Indago Uzvarētājs
Joined: 09 Apr 2003 Posts: 1278 Location: Kuldiga
|
Posted: Tue Aug 07, 2007 11:24 pm Post subject: |
|
Kamazs wrote: | no otras puses, kolīzijas ar lodi 3D spēlēs, imo, ir diezgan populāras |
Es runāju par lodēm. Ja vajag krustošanās utt. tad vajag meklēt, kā tās optimizēt. _________________ long time; /* know C */ |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Tue Aug 07, 2007 11:36 pm Post subject: |
|
Ok, nu jā, ja vajag tika notika/nenotika sadursme veida atbildi, tad kā jau pat DeRatizators augstāk teica - nevajag vilkt kvadrātsakni, pietiek tikai otru salīdzināmo lielumu pakāpināt kvadrātā. |
|
Back to top |
|
|
Kamazs Guru
Joined: 17 Jan 2003 Posts: 829 Location: The glorious ancient city of Loja
|
Posted: Wed Aug 08, 2007 9:28 am Post subject: |
|
Thnx! Par kvadrātu salīdzināšanu nebiju iedomājies, heh. Sanāk, ka kvadrātsakne ir ļaunāka par reizināšanu..a dalīšana ir tikpat ātra kā reizināšana? (8/2=4 un 8*0.5=4)?
Bet nu, man vajag arī attālumu vairākās vietās, tā ka būs vien jāhipotenuzē laikam. _________________ ...un es uzskatu, ka Fallout ir etalons |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Wed Aug 08, 2007 10:09 am Post subject: |
|
Nē, floatu dalīšana ir ļaunāka par floatu reizināšanu. Tb lēnāka. Ja vien tik tu nedali ar konstanti un kompilators izdomā, ka konstantes apgrieztā vērtība ir precīzi izsakāma un šis to dalīšanu aizvieto ar reizināšanu.
Integeriem gan laikam nav īsti atšķirības (uz mūsdienu procesoriem). |
|
Back to top |
|
|
|