V trojúhelníkový izometrického mřížce, co trojúhelník je daný bod?

hlasů
5

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

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?

Položena 15/02/2010 v 05:20
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
4

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.

  1. Dalo by se něco použít jako bresenhamův algoritmus rastrovat přeponou a když narazí na sloupec, který jste v práci out, pokud jste nad nebo pod touto čarou;
  2. Vzhledem k tomu, máte jen dvě možné mřížky zde (jedním z nich je reverzní straně druhé, takže je to opravdu jen jeden). Ty by mohly uložit matici hodnot řádků s tím, že pro sloupec 3, přepona je na posunu 2, zatímco u 6 je to na 4 a tak dále.

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?

Odpovězeno 15/02/2010 v 05:32
zdroj uživatelem

hlasů
3

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.

Odpovězeno 15/02/2010 v 09:45
zdroj uživatelem

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