Am o grilă izometrice triangulație, astfel:

Î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?
Am o grilă izometrice triangulație, astfel:

Î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?
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.
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?
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.