Într-o grilă izometrice triangular, ce triunghi este un anumit punct în?

voturi
5

Am o grilă izometrice triangulație, astfel: alt

În codul meu, triunghiuri sunt grupate pe coloane.

Așa cum am hover mouse-ul, vreau să calculeze ce triunghi coordonatele mouse-ului sunt în. Există un simplu algoritm pentru a face asta?

Întrebat 15/02/2010 la 05:20
sursa de către utilizator
În alte limbi...                            


2 răspunsuri

voturi
4

Ce doriți să faceți este să transforme acest lucru într-o rețea cât mai mult posibil, deoarece grilele sunt mult mai ușor de a lucra cu.

Primul lucru pe care îl faci este munca ce coloana este. Tu spui magazin că așa trebuie să fie mai ușor de a face o diviziune simplă pe întreg x coordonate de lățimea coloanei compensate de start cutie. Uşor.

După aceea doriți să lucrați ce triunghi este în (evident). Cum te transforma parțial acest lucru într-o grilă este pretinzi că ai un teanc de triunghiuri unghi drept în loc de un teanc de triunghiuri izometrice.

Triunghiurile au o lungime de-a lungul axei y (partea a coloanei). Împărțiți acest număr în două și cam câte pași în jos sunteți. Pe baza numărului de pași în jos și în cazul în care coloana este par sau impar vă va spune dacă sunteți în căutarea la:

+--------+
|-_      |
|  -_    |
|    -_  |
|      -_|
+--------+

sau invers. În acest moment trebuie doar pentru a determina care parte a liniei este pe pentru a determina care triunghi dreptunghic este în, care vă spune, de asemenea, care triunghiul izometric este în.

Ai două opțiuni pentru acest lucru.

  1. Ai putea folosi ceva de genul algoritm de linie Bresenham la rasterize ipotenuzei și când te-a lovit coloana esti in munca daca esti deasupra sau sub această linie;
  2. Pentru că aveți doar două grile posibile aici (una fiind inversul celuilalt, astfel că este într-adevăr doar unul). Ai putea stoca o serie de valori rând, spunând că pentru coloana 3, ipotenuzei este decalat 2, în timp ce pentru 6 este la 4 și așa mai departe.

Ai putea folosi chiar (1) pentru a genera (2), ca o căutare rapidă.

Singurul lucru pe care să ia în considerare este ceea ce se întâmplă în cazul în care cursorul mouse-ului este pe o muchie?

Publicat 15/02/2010 la 05:32
sursa de către utilizator

voturi
3

Acest lucru este similar cu ceea ce a spus Cletus, dar un mod diferit de a privi la ea presupun.

Sunt presupunând partea triunghiului este 1.

Să presupunem că aveți grila de mai jos:

       y'
      /
     /__/__/__/__/__/__/
    /__/__/__/__/__/__/
   /__/__/__/__/__/__/____ x'
(0,0)

Dacă ia în considerare grila într-un sistem de coordonate în care x și y sunt axele la un unghi de 60 de grade, un punct a cărui coordonate în sistemul unghiular (x „y“) va corespunde coordonata sistem ortogonal (cu aceeași origine o direcție generală axelor) până la (x, y).

În problema ta, vi se (x, y), trebuie să găsim (x „y“) și apoi dau seama triunghiul.

Dacă i este vectorul unitate de-a lungul x și j ortogonală a lungul y, atunci avem acel

x'* i + y'( i/2 + sqrt(3) * j /2) = xi + yj.

(Practic versorul de-a lungul „înclinat“ pe axa y este i / 2 + sqrt (3) / 2 * j. Versorul de-a lungul axei x este aceeași ca axa x normală, adică i).

Prin urmare

x' + y'/2 = x
y' * sqrt(3)/2 = y

Rezolvarea dă:

y' = 2*y/sqrt(3)
x' = x - y/sqrt(3)

Să presupunem acum că x „și y“ sunt pozitive.

Acum, dacă c = [x '], partea întreagă a lui x'

și r = [y '], partea întreagă y'

apoi în grila (unghiular), punctul se află în coloana Cth și rândul rth. (Numărarea dreapta și în sus și începe numărarea de la 0).

Astfel, am redus in jos punctul de la un paralelogram

       ____
      /\ * /   
     /___\/
   (c,r)

Acum, pentru a afla ce triunghi este în voi puteți lua în considerare părțile fracționară x „și y“.

{x} = x' - [x'] = x' - c.
{y} = y' - [y'] = y' - r.

Acum,

în cazul în care {x} + {y} > 1, atunci punctul se află în triunghiul marcat cu *. în cazul în care {x} + {y} < 1, atunci punctul se află în celălalt triunghi. în cazul în care {x} + {y} = 1, atunci punctul se află pe linia comună a celor două triunghiuri.

Sper că vă ajută prea.

Publicat 15/02/2010 la 09:45
sursa de către utilizator

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