Mám triangulovaný izometrické mřížku, jako je tento:

V mém kódu, trojúhelníky jsou seskupeny podle sloupců.
Jak jsem najeďte myší, chci spočítat, co trojúhelník souřadnice myši jsou v. Existuje jednoduchý algoritmus k tomu, že?
Mám triangulovaný izometrické mřížku, jako je tento:

V mém kódu, trojúhelníky jsou seskupeny podle sloupců.
Jak jsem najeďte myší, chci spočítat, co trojúhelník souřadnice myši jsou v. Existuje jednoduchý algoritmus k tomu, že?
Co chcete udělat, je proměnit tuto mřížku co nejvíce, protože sítě jsou mnohem jednodušší pracovat.
První věc, kterou udělat, je zjistit, co je to sloupec dovnitř. Říkáš, že ukládat, takže by to mělo být jednodušší, tím, že dělá jednoduché celočíselné dělení na souřadnici x šířkou sloupce kompenzováno začátku boxu. Snadný.
Po tom, že chcete zjistit, co to je trojúhelník v bodě (samozřejmě). Jak jste částečně proměnit tuto mřížku je budete předstírat, že máte hromadu pravý úhel trojúhelníky namísto stoh izometrické trojúhelníků.
Trojúhelníky mají délku podél osy y (strana sloupce). Rozdělit toto číslo na dvě části a vymyslet, kolik kroků dolů jste. o počtu kroků, založené dolů a pokud je sloupec sudé nebo liché vám řeknou, jestli se díváte:
+--------+
|-_ |
| -_ |
| -_ |
| -_|
+--------+
nebo naopak. Na tomto místě je třeba pouze určit, na které straně linky je to na určit, které pravoúhlý trojúhelník je to in, který vám také řekne, které izometrické trojúhelník je to v.
Máte několik možností pro toto.
Dalo by se dokonce použít (1) pro generování (2) jako rychlý vyhledávání.
Jedinou další věc ke zvážení je to, co se stane, když je kurzor myši na okraj?
To je podobné tomu, co řekl Cletus, ale jiný způsob, jak se dívat na to myslím.
Jsem za předpokladu, že strana trojúhelníku je 1.
Předpokládejme, že máte na mřížku jak je uvedeno níže:
y'
/
/__/__/__/__/__/__/
/__/__/__/__/__/__/
/__/__/__/__/__/__/____ x'
(0,0)
Pokud se v úvahu mřížky v souřadnicovém systému, ve kterém x a osy y jsou v úhlu 60 stupňů, k bodu, jehož souřadnice v šikmém systému (x ‚y‘) bude odpovídat souřadnic v ortogonální systém (s stejného původu obecný směr os) až (x, y).
Ve vašem problému, dostanete (x, y), musíme najít (X ‚y‘) a pak přijít na trojúhelník.
Pokud i je jednotkový vektor podél x a j ortogonální podél y, pak máme, že
x'* i + y'( i/2 + sqrt(3) * j /2) = xi + yj.
(V podstatě jednotkový vektor podél ‚ohnutý‘ ose y je i / 2 + sqrt (3) / 2 * j. Jednotkový vektor podél osy x je stejný jako normální osa x, tedy i).
Tím pádem
x' + y'/2 = x
y' * sqrt(3)/2 = y
Řešení poskytuje:
y' = 2*y/sqrt(3)
x' = x - y/sqrt(3)
Předpokládejme nyní, že X ‚a Y‘ jsou pozitivní.
Nyní, pokud c = [x '], celá část x'
a r = [y '], je celá část y'
pak v (úhlové) sítě, bod leží ve sloupci CTH a RTH řádku. (Počítání doprava a nahoru a začne počítat od 0 ° C).
Tak jsme se zúžil svůj bod rovnoběžníku
____
/\ * /
/___\/
(c,r)
Nyní s cílem zjistit, které trojúhelník je v můžete zvážit zlomkové části x ‚a y‘.
{x} = x' - [x'] = x' - c.
{y} = y' - [y'] = y' - r.
Nyní,
v případě {x} + {y} > 1, pak bod leží v trojúhelníku označené *. -li {x} + {y} < 1, pak bod leží ve druhém trojúhelníku. v případě {x} + {y} = 1, pak bod leží na lince společných pro dva trojúhelníky.
Naděje, která pomáhá taky.