IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
matesax
Tvůrce
Avatar
matesax:26.11.2012 6:26

Dobrý den,
mám 8 směrů lodi:

(0;-1)
(1;-1)
(1;0)
(1;1)
(0;1)
(-1;1)
(-1;0)
(-1;-1)

No a ptořebuji jeden z nich vybrat po výpočtu vektoru z uživatelem kliklého místa a aktuální pozice. Děkuji.

 
Odpovědět
26.11.2012 6:26
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:26.11.2012 8:42

Z rozdílu souřadnic si spočítej úhel, vynásob 8 a vyděl 2*pi. Výsledek 0..8 použij jako index.

Index je dobré zaokrouhlit.

Editováno 26.11.2012 8:44
Nahoru Odpovědět
26.11.2012 8:42
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:26.11.2012 9:16

Chci se ujistit, že je to dobře:

Math.atan2(nextX - actualX, nextY - actualY) * 8 / (2 * Math.PI)

Protože to hází i záporné hodnoty - tak se ujišťuji před tím, než to strčím do absolutní hodnoty...

Děkuji.

 
Nahoru Odpovědět
26.11.2012 9:16
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:26.11.2012 9:52

Absolutní hodnotu tam určitě nedávej. Raději ten výsledek uprav:

(round(vysledek) + 8) % 8

Vyjde ti z toho 0..7.

Nahoru Odpovědět
26.11.2012 9:52
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:26.11.2012 10:01

A ještě něco: Máš chybně pořadí. Ve funkci atan2 je nejprve y, pak teprve x.

Nahoru Odpovědět
26.11.2012 10:01
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:3.12.2012 19:35

Ono mi to jaksi nejde. :) Nahoru mi dává stejný výsledek jako severozápadně.

(Math.round(Math.atan2(nextY - this.y, nextX - this.x)) + 8) % 8

Děkuji.

Editováno 3.12.2012 19:37
 
Nahoru Odpovědět
3.12.2012 19:35
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:3.12.2012 19:44

No jo, chybička se vloudila.

(round(Math.atan2(y, x) * 8 / (2 * Math.PI)) + 8) % 8

Zapomněl jsi za proměnnou "vysledek" dosadit ten svůj vzoreček.

Nahoru Odpovědět
3.12.2012 19:44
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:3.12.2012 19:56

Jede to děkuji. :) (Jen je to musím posunout o 180 stupňů.)

 
Nahoru Odpovědět
3.12.2012 19:56
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:3.12.2012 20:02

Tak tam nebude "+ 8", ale jen "+ 4". Velmi prosté.

Nahoru Odpovědět
3.12.2012 20:02
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.