Van egy háromszög izometrikus rács, mint ez:

Az én kódot, háromszögek vannak csoportosítva oszlopok.
Amint azt lebeg az egeret, azt akarjuk számítani, amit háromszög az egér koordinátái. Van egy egyszerű algoritmus, hogy?
Van egy háromszög izometrikus rács, mint ez:

Az én kódot, háromszögek vannak csoportosítva oszlopok.
Amint azt lebeg az egeret, azt akarjuk számítani, amit háromszög az egér koordinátái. Van egy egyszerű algoritmus, hogy?
Mit kíván tenni az viszont ez egy rács, amennyire csak lehetséges, mert rácsok sokkal könnyebb dolgozni.
Az első dolog, amit teszel, kitalálni, mit oszlop benne van. Azt mondja, hogy tárolja, így könnyebben lehet csinál egy egyszerű osztás az x koordináta szerint az oszlop szélességét ellensúlyozta a doboz kezdet. Könnyen.
Ezután szeretne dolgozni, hogy mi háromszög benne van (természetesen). Hogy részben viszont ez egy rács úgy, mintha, hogy van egy halom derékszögű háromszög helyett egy köteg izometrikus háromszögek.
A háromszögek hossza az Y tengely mentén (a oszlop oldalán). Osszuk el ezt a számot két és dolgozzanak ki hány lépést lefelé van. Ennek alapján a lépések számát le, és ha az oszlop páros vagy páratlan megmondja, ha keres itt:
+--------+
|-_ |
| -_ |
| -_ |
| -_|
+--------+
vagy fordítva. Ezen a ponton már csak be kell meghatározni, hogy melyik oldalon a vonal rajta van, hogy melyik derékszögű háromszög ez a, ami szintén jelzi, hogy melyik izometrikus háromszög bent van.
Van egy pár lehetőség erre.
Még arra is használhatja (1) generál (2), a gyors keresést.
Az egyetlen dolog, hogy fontolja meg, hogy mi történik, ha az egér kurzor egy él?
Ez hasonló ahhoz, amit Cletus mondta, de egy másik módja annak, hogy nézd meg azt hiszem.
Én feltételezve, hogy a háromszög oldala 1.
Tegyük fel, hogy a rács az alábbiak szerint:
y'
/
/__/__/__/__/__/__/
/__/__/__/__/__/__/
/__/__/__/__/__/__/____ x'
(0,0)
Ha figyelembe vesszük a rács egy koordináta-rendszerben, amelyben az x és y tengelyek egy 60 fokos szögben, egy pont, amelynek koordináta a szögben álló rendszer (x „y”) fog megfelelni a koordináta a ortogonális rendszer (azonos eredetű az általános iránya a tengelyek) az (x, y).
Az Ön problémája van, akkor az adott (x, y), meg kell találnunk (x „y”), majd kitaláljuk, a háromszög.
Ha i az az egység vektor x és j az ortogonális mentén y, akkor van, hogy
x'* i + y'( i/2 + sqrt(3) * j /2) = xi + yj.
(Alapvetően az egység vektor mentén „szögben” y tengelyen az I / 2 + sqrt (3) / 2 * j. Az egység vektor az x tengely mentén megegyezik a normál X-tengely, azaz i).
És így
x' + y'/2 = x
y' * sqrt(3)/2 = y
Megoldása adja:
y' = 2*y/sqrt(3)
x' = x - y/sqrt(3)
Feltételezzük, hogy az x „és y” pozitívak.
Most, ha c = [x '], az egész része x'
és r = [y '], az egész része y'
majd a (szögletes) rács, a lényeg abban rejlik, CTH oszlopra, és az r-ik sorban. (Counting jobbra és fel, és elkezd számolni 0).
Így szűkült le a pontot egy paralelogramma
____
/\ * /
/___\/
(c,r)
Most annak érdekében, hogy megtudja, melyik háromszög ez a akkor úgy tört részeit x „és y”.
{x} = x' - [x'] = x' - c.
{y} = y' - [y'] = y' - r.
Most,
ha {x} + {y} > 1, akkor a pont abban rejlik, hogy a háromszög * -gal jelölt. ha {x} + {y} < 1, akkor a pont abban rejlik, hogy a másik háromszög. ha {x} + {y} = 1, akkor a pont rajta van az egyenesen közös a két háromszög.
Remélem, hogy segít is.