Právě je ned bře 16, 2025 3:52 pm

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 7 ] 
Autor Zpráva
 Předmět příspěvku: Prevod orientacie na stupne.
PříspěvekNapsal: úte črc 11, 2006 5:05 pm 
Offline
...........
...........
Uživatelský avatar

Registrován: sob zář 18, 2004 4:13 pm
Příspěvky: 1898
Bydliště: Slovensko, Bratislava
Skusal som spravit AI, ktora vyhodnoti podla miesta nepriatela, a svojej orientacie, podla stupnou(prihliada sa aj na stupen pod ktorym je nepriatel), kam sa ma otocit. ale hned som narazil na problem, ked neslo(slo ale divne) previest orientaciu na stupne. os z som ignoroval pretoze potrebujem len x a y. vysku netreba.
Myslel som si ze orientacia sa udava podla (vidno na obrazku nizsie) suradnic v okoli stredoveho bodu, ale zjavne to tak nieje.

Mohol by mi prosim niekto vysvetlit ako to vlastne je stou orientaciou, pripadne ako ju previest na stupne?

Vypocet uhlu AI vyzeral nejak takto:

Kód:
uhol = math.sin(own.getOrientation()[1][1] / own.getOrientation()[1][0])


je to pre os y, pretoze je identicka so smerom chodu.

ale to za predpokladu ze sa urcuje orintacia tak ako som nakreslil...

Obrázek

Na dalsom obrazku som znazornil "mechanizmus" ako by to malo fungovat.
modre v strede je AI. Najskor sa zisti v ktorom mieste sa nachadza ciel, to je vyznacene zelene miesto predelene zltimi ciarami. potom sa urci uhol otocenia AI k tory sa porovna s uhlom ktory zviera globalna os x AI a nepriatel, ak je vecsia, toci sa do lava, ak nie do prava...Ako sa tak divam, tak asi staci urcovat len tie uhly.

Obrázek[/code]


Nahoru
 Profil  
 
 Předmět příspěvku:
PříspěvekNapsal: úte črc 11, 2006 5:55 pm 
Offline
........
........
Uživatelský avatar

Registrován: stř bře 30, 2005 1:50 pm
Příspěvky: 1316
Bydliště: Praha
Je to maticovej system a pač sme ještě matice nebrali tak do toho moc nevidim ale jednoduše řečeno místo 0-360 je to 0.0-1.0. Ted teda nevim jestli 360 nebo 90. Ash ti snad poradí. Kdyžtak ti pošlu příklad od něj co mi pomoh když sem dělal houpačku, de o dost podobnej princip, jen AI se natáčí a "cíl" je na místě.


Nahoru
 Profil  
 
 Předmět příspěvku:
PříspěvekNapsal: úte črc 11, 2006 7:07 pm 
Offline
...........
...........
Uživatelský avatar

Registrován: sob zář 18, 2004 4:13 pm
Příspěvky: 1898
Bydliště: Slovensko, Bratislava
Vdak, to by mi pomohlo.

"0-360 je to 0.0-1.0"

mozno hej, ale stretavam sa aj s cislami ako napriklad -8 ...
to by ma sice ani neprekvapilo, keby sa otocim 8 krat okolo osi, ale otocil som sa len o par stupnou...


Nahoru
 Profil  
 
 Předmět příspěvku:
PříspěvekNapsal: úte črc 11, 2006 9:24 pm 
Offline
....
....
Uživatelský avatar

Registrován: pon črc 12, 2004 7:35 pm
Příspěvky: 348
Bydliště: Brno
Pekný článok k maticiam: http://nehe.ceskehry.cz/cl_gl_matice2.php


Nahoru
 Profil  
 
 Předmět příspěvku:
PříspěvekNapsal: úte črc 11, 2006 10:11 pm 
Offline
...........
...........
Uživatelský avatar

Registrován: sob zář 18, 2004 4:13 pm
Příspěvky: 1898
Bydliště: Slovensko, Bratislava
Good Vdak. Hadam to pochopim, ked si to precitam 10 krat :lol:


Nahoru
 Profil  
 
 Předmět příspěvku:
PříspěvekNapsal: stř črc 12, 2006 11:46 am 
Offline
....
....

Registrován: pon črc 12, 2004 1:15 pm
Příspěvky: 382
Bydliště: Bratislava
zgerbiak,

na orčenie smeru, či sa máš otáčať za cieľom doprava alebo doľava, vôbec nepotrebuješ počítať uhly. Stačí ti určiť, či je cieľ naľavo alebo napravo. To zistíš vektorovým súčinom vektora tvojej orientácie a relatívneho vektora cieľa (keďže potrebuješ rotáciu len v osi Z, budem rátať len dvojrozmerne v osiach X a Y):

vektor tvojej orientácie naplníš z matice orientácie o získanej metódou getOrientation() takto:
Kód:
o = obj.getOrientation()
myOrient = [o[0][0], o[1][0]]

vektor relatívnej pozície získaš zo svojej pozície a z pozície cieľa:
Kód:
mojPos = obj.getPosition()
cielPos = ciel.getPosition()
relPos = [cielPos[0] - mojPos[0], cielPos[1] - mojPos[1]]

vektorovým súčinom zistíš, či je cieľ napravo alebo naľavo od teba, ak napravo, je súčin záporný, ak naľavo, je kladný, ak je pred tebou (alebo za tebou), je nulový. Odlíšenie vpredu a vzadu sa dá určiť skalárnym súčinom vektorov (kladný vpredu, záporný vzadu):
Kód:
vectSuc = myOrient[0] * relPos[1] - myOrient[1] * relPos[0]
skalSuc = myOrient[0] * relPos[0] + myOrient[1] * relPos[1]

Hodnoty týchto súčinov ti zároveň dajú informáciu o veľkosti odchýlky od cieľa.

Ak by si to chcel robiť cez uhly, ani tak to nie je problém - v module math existuje funkcia atan2(y, x), kde dáš priamo súradnice z myOrient a relPos (pozor, poradie parametrov je obrátené - teda math.atan2(myOrient[1], myOrient[0]) ) a získaš ich uhly v radiánoch.


Nahoru
 Profil  
 
 Předmět příspěvku:
PříspěvekNapsal: stř črc 12, 2006 4:42 pm 
Offline
...........
...........
Uživatelský avatar

Registrován: sob zář 18, 2004 4:13 pm
Příspěvky: 1898
Bydliště: Slovensko, Bratislava
Vdaka. Pokusim sa to pochopit :D


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 7 ] 

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat 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 přikládat soubory v tomto fóru

Hledat:
Přejít na:  
cron
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz