Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] Współrzędne hexów
Forum PHP.pl > Forum > Przedszkole
szybki
Mam taki kod http://jsfiddle.net/7ybrpv6c/

Problem polega na tym że nie wiem jak napisać funkcję która obliczy współrzędne danego hexa np. 7,7. Napisałem funkcje która sprawdza czy liczba jest parzysta czy nie, jednak coś nie działa jak powinno. Chodzi o zwrócenie wartości w PX od lewego górnego rogu, może źle się do tego zabieram i całość powinna być napisana inaczej?
trueblue
Hex - masz na myśli plaster?
Którą konkretnie współrzędna wielokąta chcesz odnaleźć?
szybki
Tak, chodzi o plaster. Zakładając że chce przykładowo nałożyć na niego czerwony kwadrat, to powinienem otrzymać takie współrzędne http://s7.postimg.org/540ankv57/grid.png czyli left: 111px i top: 83px dla plastra 7,7.
trueblue
Czyli to ma być najbliższy nieprzykryty przez obszar plaster?
szybki
Nie. To nie ma znaczenia. Po prostu potrzebne są mi tylko współrzędne, gdy podam id plastra np. 7,7 czy 2,7 lub 3,1 itp. Nie wiem jak ugryźć temat, pierw sprawdzałem czy liczby są parzyste, jednak plątałem się z tym później...
trueblue
http://www.redblobgames.com/grids/hexagons/
Sekcja: Coordinate conversion
Może Ci pomoże.
szybki
Dzięki, widziałem już to i na tej podstawie powstał powyższy kod biggrin.gif Niestety poległem. O ile np. 3,0 zaznacza się dobrze o tyle problem jest przy zmianie parzystych i nieparzystych sektorów... Może trzeba to przepuścić w pętli?
trueblue
A gdybyś od współrzędnej X odjął połowę szerokości plastra i wtedy sprawdził (tak jakby ten plaster nie był przesunięty)?
szybki
Tak to już mam...

[JAVASCRIPT] pobierz, plaintext
  1. if(true == isEven(x) && true == isEven(y))
  2. {
  3. var top = y * 12;
  4. var left = x * 32 - 16;
  5. }
[JAVASCRIPT] pobierz, plaintext


Jednak tu pojawia sie problem właśnie z tymi parzystymi, bo wartości się zmieniają co 2
trueblue
Wystarczy chyba sprawdzanie współrzędnej Y (czy jest to wiersz przesunięty).
szybki
Hmm czyli powinno być tak:

[JAVASCRIPT] pobierz, plaintext
  1. var top = y * 12;
  2.  
  3. if(isEven(y))
  4. {
  5. var left = x * 32;
  6. }
  7. else
  8. {
  9. var left = x * 32 - 16;
  10. }
[JAVASCRIPT] pobierz, plaintext


Ale to też nie działa.

Heh, wychodzi na to że im większe liczny w X tym złe współrzędne. Ma ktoś jakiś pomysł jak to rozwiązać? Problem zapewne jest banalny.
trueblue
Jesteś w stanie pokazać tu cały kod?
szybki
http://jsfiddle.net/7ybrpv6c/1/ tu jeśli wpiszemy 7,7 to zadziała, na innych wartościach nie. Próbowałem też tak jak pisałeś http://jsfiddle.net/7ybrpv6c/2/
trueblue
http://jsfiddle.net/7ybrpv6c/4/
szybki
Cytat(trueblue @ 3.01.2015, 15:51:28 ) *


Jak wpiszę 4,2 zaznaczy się 5,2 a jak 5,6 to 8,6 itd. czyli ten sam efekt jak wyżej.
r4xz
Masz dziwne współrzędne 'x' ponumerowane (wraz z 'y' rośnie 'x')... zobacz jak to powinno być ponumerowane http://www.redblobgames.com/grids/hexagons/#coordinates

-- edit --
a tu działająca wersja dla poprawnie skonstruowanej mapy (tak jak w załączonym linku): http://jsfiddle.net/7ybrpv6c/7/
trueblue
http://jsfiddle.net/7ybrpv6c/6/
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.