Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[allegro] obliczanie wspolrzednych pola

Ostatnio zmodyfikowano 2009-06-08 20:35
Autor Wiadomość
szulcseban
Temat założony przez niniejszego użytkownika
[allegro] obliczanie wspolrzednych pola
» 2009-06-08 13:13:42
Mam plansze gry np 15 x 15, złożoną z pól w rzucie izometrycznym (plansza przesuwa się po ekranie, ale to mozna pominac).
Podstawowy widok planszy jak na tym obrazku
brak opisu
brak opisu
I teraz potrzebuje obliczyć współrzędne wciśniętego pola gry na podstawie współrzędnych myszki.
Początek planszy to najbardziej wysunięty wierzchołek do góry (punkt 0, 0),
koniec pierwszego WIERSZA to wierzchołek na prawo (0,14),
zaś koniec planszy to wierzchołek na dole (14,14).
Jak to najprościej zrobić (trzeba pamiętać o rogach, które już należą do innego pola).
P-7505
WunM
» 2009-06-08 13:45:19
Najprostszy sposób jaki widzę to na podstawie przekątnych obliczyć położenie na osi x i osi y. Potem policzyć który to kafel w kolejności na osi x i y. Poniżej obrazek który może trochę rozjaśni sprawę (sorki ale niedokładnie narysowałem).

rys. pomocniczy

//edit

Oczywiście trzeba wszystko skonfrontować z położeniem myszki. Wystarczy x_myszki / przekatna oraz y_myszki / przekatna.
P-7506
DejaVu
» 2009-06-08 13:53:58
Z tego co zrozumiałem znasz punkty:
[li](x1,y1) => górny narożnik planszy[/li]
[li](x2,y2) => lewy narożnik planszy[/li]
Znasz też wymiary planszy (tj. 15x15). W związku z tym pozostaje Ci obliczyć:
1) kąt nachylenia prostej {(x1,y1),(x2,y2)}
Jeśli będziesz miał już obliczony kąt prostej możesz dokonać 'transformacji' punktu, który postawisz na scenie (kliknięcie) i w ten sposób dostaniesz ładne współrzędne, które będą wskazywały konkretne położenie.

Tak mniejwięcej próbowałbym podejść do zagadnienia. Warto tutaj zaznaczyć, że są to de'facto czysto matematyczne operacje :)
P-7507
WunM
» 2009-06-08 14:03:33
W sumie gdyby kafel podzielić na cztery równe części(na trójkąty) i połączyć dwa kafle sąsiadującymi sobie częściami to wyszedłby ładny kwadrat (prostokąt) w którym znajdowałaby się prosta będąca przekątną tego kwadratu (prostokąta) na podstawie której można określić do którego kafla należy ta część.
P-7509
DejaVu
» 2009-06-08 14:50:30
Nie wiem czy dobrze myślę, ale wydaje mi się, że wystarczy:
1) źnaleźć kąt (który wcześniej wspomniałem)
2) źnaleźć środek planszy (łatwe do stwierdzenia)
3) mieć punkt, który kliknięto
4) Zastosować wzór do punktu kliknięcia:
C/C++
double dx = srodek_x - pozycja_x;
double dy = srodek_y - pozycja_y;
5) Przekształcić punkt:
C/C++
double klikniety_x = dx * cos( - kat ) + srodek_x;
double klikniety_y = dy * sin( - kat ) + srodek_y;
6) zaokrąglić wartość, podzielić przez rozmiar jednej kratki (osobno dla każdej osi)
7) ptk 6. da kliknięte pole.

Oczywiście to jest takie 'na oko' i mozno nieprzemyślane, więc być może są tu jakieś niedociągnięcia lub co gorsza złe rozumowanie :)
P-7514
szulcseban
Temat założony przez niniejszego użytkownika
» 2009-06-08 16:08:20
jakoś nie potrafie tego zaimplementować, mam środek,
rozumiem że pozycja_x i pozycja_y to współrzędne kliknięcia tak ?
w takim razie coś nadal będzie nie tak bo przy obliczaniu pola nie ma zależności pomiędzy x i y, wg tego co napisałes x obliczasz osobno i y osobno
P-7518
DejaVu
» 2009-06-08 16:52:27
Kąt jest częścią wspólną. Poczytaj o obracaniu obiektu wokół osi Z jeśli nie wierzysz mi, że to co napisałem opiera się o ten wzór :)
P-7520
szulcseban
Temat założony przez niniejszego użytkownika
» 2009-06-08 17:02:30
tak, masz racje, ale nadal wg Twojego rozwiązania to nie działa ;(
P-7522
« 1 » 2
  Strona 1 z 2 Następna strona