Egy Triangulated izometrikus rács, mi háromszög adott pontján?

szavazat
5

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

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?

A kérdést 15/02/2010 05:20
a forrás felhasználó
Más nyelveken...                            


2 válasz

szavazat
4

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.

  1. Jól jönne valami hasonló Bresenham sort algoritmus raszterizálni az átfogó és ha bejön az oszlop te munkát ki, ha felett vagy alatt, hogy a vonal;
  2. Mivel már csak két lehetséges rácsok itt (az egyik a fordítottja a másik, így ez tényleg csak egy). Lehet tárolni tömb sor értékek, mondván, hogy a 3. oszlopban a átfogója a offset 2, míg a 6 ez 4 és így tovább.

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?

Válaszolt 15/02/2010 05:32
a forrás felhasználó

szavazat
3

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.

Válaszolt 15/02/2010 09:45
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more