szybki
2.01.2015, 21:21:21
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
2.01.2015, 22:21:47
Hex - masz na myśli plaster?
Którą konkretnie współrzędna wielokąta chcesz odnaleźć?
szybki
3.01.2015, 11:46:38
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
3.01.2015, 11:54:25
Czyli to ma być najbliższy nieprzykryty przez obszar plaster?
szybki
3.01.2015, 11:57:16
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
3.01.2015, 12:09:20
http://www.redblobgames.com/grids/hexagons/Sekcja: Coordinate conversion
Może Ci pomoże.
szybki
3.01.2015, 12:42:39
Dzięki, widziałem już to i na tej podstawie powstał powyższy kod

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
3.01.2015, 13:20:50
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
3.01.2015, 13:31:08
Tak to już mam...
if(true == isEven(x) && true == isEven(y))
{
var top = y * 12;
var left = x * 32 - 16;
}
Jednak tu pojawia sie problem właśnie z tymi parzystymi, bo wartości się zmieniają co 2
trueblue
3.01.2015, 13:38:49
Wystarczy chyba sprawdzanie współrzędnej Y (czy jest to wiersz przesunięty).
szybki
3.01.2015, 15:21:15
Hmm czyli powinno być tak:
var top = y * 12;
if(isEven(y))
{
var left = x * 32;
}
else
{
var left = x * 32 - 16;
}
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
3.01.2015, 15:25:57
Jesteś w stanie pokazać tu cały kod?
szybki
3.01.2015, 15:42:26
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/
szybki
3.01.2015, 15:53:52
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.
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/