Współrzędne Heksagonalne (mapa)

Współrzędne Heksagonalne (mapa)
tBane
  • Rejestracja:ponad rok
  • Ostatnio:około godziny
  • Lokalizacja:Poznań
  • Postów:312
0

Aby konwertować współrzędne heksagonalne na globalne należy:

Kopiuj
float outerRadius = 10.0f;
float innerRadius = outerRadius * 0.866025404f;

vector2f hexToGlobal(float x, float z)
{
	vector2f pos;
	pos.X = x * 2.0f * innerRadius + (int(z) % 2) * innerRadius;
	pos.Y = y * 1.5f * outerRadius;
	return  pos;
}

W jaki sposób dokonać odwrotnych obliczeń - to znaczy jak konwertować współrzędne globalne na heksagonalne ?


W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.6.
edytowany 2x, ostatnio: flowCRANE
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około godziny
  • Lokalizacja:Tuchów
  • Postów:12171
9

https://www.redblobgames.com/grids/hexagons/#hex-to-pixel — tutaj masz całkiem niezły opis. Ten artykuł to w ogóle giga-chad w temacie mapy zbudowanej z sześciokątów.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 3x, ostatnio: flowCRANE
tBane
  • Rejestracja:ponad rok
  • Ostatnio:około godziny
  • Lokalizacja:Poznań
  • Postów:312
4

Rozwiązanie

Kopiuj
vector2di globalToHex(float x, float y)
{
	vector2di hex;
	
	float xx = (x / (2.0f * innerRadius)) - ((int(y / (1.5f * outerRadius))) % 2)/2.f;
	float yy = y / (1.5f * outerRadius);

	hex.X = (xx + 0.5f);
	hex.Y = (yy + 0.5f);

	return hex;
}

W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.6.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.