Diskuze: JS - vektory

JavaScript JavaScript JS - vektory

Avatar
matesax
Redaktor
Avatar
matesax:

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
Redaktor
Avatar
Odpovídá na matesax
Kit:

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
Redaktor
Avatar
Odpovídá na Kit
matesax:

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
Redaktor
Avatar
Odpovídá na matesax
Kit:

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
Redaktor
Avatar
Odpovídá na matesax
Kit:

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
Redaktor
Avatar
Odpovídá na Kit
matesax:

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
Redaktor
Avatar
Odpovídá na matesax
Kit:

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
Redaktor
Avatar
Odpovídá na Kit
matesax:

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

 
Nahoru Odpovědět 3.12.2012 19:56
Avatar
Kit
Redaktor
Avatar
Odpovídá na matesax
Kit:

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.