Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript] Współrzędne hexów
szybki
post
Post #1





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 18.06.2014

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Hex - masz na myśli plaster?
Którą konkretnie współrzędna wielokąta chcesz odnaleźć?
Go to the top of the page
+Quote Post
szybki
post
Post #3





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 18.06.2014

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
trueblue
post
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Czyli to ma być najbliższy nieprzykryty przez obszar plaster?
Go to the top of the page
+Quote Post
szybki
post
Post #5





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 18.06.2014

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
trueblue
post
Post #6





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


http://www.redblobgames.com/grids/hexagons/
Sekcja: Coordinate conversion
Może Ci pomoże.
Go to the top of the page
+Quote Post
szybki
post
Post #7





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 18.06.2014

Ostrzeżenie: (0%)
-----


Dzięki, widziałem już to i na tej podstawie powstał powyższy kod (IMG:style_emoticons/default/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?
Go to the top of the page
+Quote Post
trueblue
post
Post #8





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


A gdybyś od współrzędnej X odjął połowę szerokości plastra i wtedy sprawdził (tak jakby ten plaster nie był przesunięty)?
Go to the top of the page
+Quote Post
szybki
post
Post #9





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 18.06.2014

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
trueblue
post
Post #10





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Wystarczy chyba sprawdzanie współrzędnej Y (czy jest to wiersz przesunięty).
Go to the top of the page
+Quote Post
szybki
post
Post #11





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 18.06.2014

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
trueblue
post
Post #12





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Jesteś w stanie pokazać tu cały kod?
Go to the top of the page
+Quote Post
szybki
post
Post #13





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 18.06.2014

Ostrzeżenie: (0%)
-----


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/
Go to the top of the page
+Quote Post
trueblue
post
Post #14





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


http://jsfiddle.net/7ybrpv6c/4/
Go to the top of the page
+Quote Post
szybki
post
Post #15





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 18.06.2014

Ostrzeżenie: (0%)
-----


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.

Ten post edytował szybki 3.01.2015, 16:03:08
Go to the top of the page
+Quote Post
r4xz
post
Post #16





Grupa: Zarejestrowani
Postów: 673
Pomógł: 106
Dołączył: 31.12.2008

Ostrzeżenie: (0%)
-----


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/

Ten post edytował r4xz 3.01.2015, 16:15:25
Go to the top of the page
+Quote Post
trueblue
post
Post #17





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


http://jsfiddle.net/7ybrpv6c/6/

Ten post edytował trueblue 3.01.2015, 16:14:24
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.08.2025 - 16:03