blender3d.cz
http://blender3d.cz/forum/

Prevod orientacie na stupne.
http://blender3d.cz/forum/viewtopic.php?f=11&t=3178
Stránka 11

Autor:  zgerbiak [ úte črc 11, 2006 5:05 pm ]
Předmět příspěvku:  Prevod orientacie na stupne.

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]

Autor:  xixixao [ úte črc 11, 2006 5:55 pm ]
Předmět příspěvku: 

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ě.

Autor:  zgerbiak [ úte črc 11, 2006 7:07 pm ]
Předmět příspěvku: 

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...

Autor:  iIN [ úte črc 11, 2006 9:24 pm ]
Předmět příspěvku: 

Pekný článok k maticiam: http://nehe.ceskehry.cz/cl_gl_matice2.php

Autor:  zgerbiak [ úte črc 11, 2006 10:11 pm ]
Předmět příspěvku: 

Good Vdak. Hadam to pochopim, ked si to precitam 10 krat :lol:

Autor:  Ash [ stř črc 12, 2006 11:46 am ]
Předmět příspěvku: 

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.

Autor:  zgerbiak [ stř črc 12, 2006 4:42 pm ]
Předmět příspěvku: 

Vdaka. Pokusim sa to pochopit :D

Stránka 11 Všechny časy jsou v UTC + 1 hodina [ Letní čas ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/