Obrót

0

Jak obrócić TBitmap o zadany kąt?---------------------------
Delphi 6

Pozdrówka

0

własnie? Obecnie robie sobie tetrisa w delphix i potrzebuje kawałek kodu jak obracać klocki--DELPHIRULEZ

0

Jak obracać Bitmapą sam jestem ciekaw. Kiedyś próbowałem zrobić to za pomocą zapisania Pixseli do tablicy a potem ustawienia ich w innej kolejności ale za dużo było z tym zabawy.

A co do klocków to chyba jest prostsze

Wystarczy stworzyć Tabele np. tab : array [1..4, 1..4] of boolean;
Przypisać danym komórką wartości true czyli ustawienie klocka a potem przy obrocie zmieniać te wartości tak żeby wyglądało to tak jakby dany klocek się obracał

Odwiedź stronę http://www.algorytm.cad.pl/
Tam jest przykład tworzenia gry Tetris--Delphi 6; Pozdrawiam eSka :-)

0

Ludzie co wy tacy ciemni jestescie...

Do obrotu bitmapy w DelphiX sluzy procedura
DrawRotate(Dest:TDirectDrawSurface;X,Y,Width, Height,PatternIndex:integer;CenterX,CenterY:double; Angle:Integer) - powoduje ona narysowanie bitmapki obracając ją o kąt. Jak widać squadnia jest trochę skomplikowana, ale zaraz to wyjaśnie, No więc : X i Y to są współrzędne miejsca, gdzie znajdzie się lewy górny róg bitmapy, a Dest to jest powierzchnia obiektu DirectDraw, na której ma być narysowana bitmapa, Width i Height to długość i szerokość bitmapki; PatternIndex to jest 0; CenterX i CenterY to są ułamki dziesiętne. Określają one, w którym miejscu bitmapki jest punkt, wokół którego obracamy bitmapkę. Na przykład jeśli chcemy obrócić bitmapkę wokół jej środka (czyli punktu w połowie wysokości i połowie szerokości), to ustawiamy obie zmienne na 0.5. Natomiast Angle jest to kąt, o jaki chcemy bitmapkę obrócić. No więc całość może wyglądać na przyquad tak (dla bitmapki o wymiarach 50x50 pixeli) : dximagelist.items[0]. drawrotate(dxdraw.surface, 100,100, 50,50,0, 0.5,0.5,200);. Ta metoda narysuje nam bitmapkę obracając ją wokół jej środka o kąt ok. 281 stopni. Teraz pytanie : dlaczego nie o kąt 200 stopni, skoro kąt ustawiliśmy na 200 ?! Otóż dlatego, że tego kąta nie podajemy w stopniach (ile się męczyłem, żeby to odkryć !!!). Kąt 360 stopni to jest wartość 255 (zatem kąty mogą przyjmować wartości pomiędzy 0 -255). Wbrew pozorom bardzo to nie przeszkadza... :-)
--Delphi 6, Pascal

----====Pozdrawiam @LL====----
------====== RFL ======------
--==[ [email protected] ]==--

0

No i co pomoglo??--Delphi 6, Pascal

----====Pozdrawiam @LL====----
------====== RFL ======------
--==[ [email protected] ]==--

0

Jest jeden mały problem. Nie używam DelphiX :(
Chodziło mi o zwykłą bitmapkę w TBitmpa, albo coś w tym rodzaju. Ew jak obrócić komponent?---------------------------
Delphi 6

Pozdrówka

0

Jezeli nie uzywasz DelphiX, jestes skazany na napisanie procedury obracajacej obrazek. Musisz obrocic kazdy piksel w obrazku, o taki kat jaki chcesz. Wzor na obrot punktu:

xr = x0 + (x-x0) * cos(kąt) + (y-y0) * sin(kąt);
yr = y0 + (y-y0) * cos(kąt) - (x-x0) * sin(kąt);

 gdzie:
    x0, y0 - środek obrotu
    x,  y  - współrzędne obracanego punktu
    kąt    - kąt o jaki obracamy :-)
    xr, yr - współrzędne punktu po obrocie

Przy obrotach o kąty inne niż 90, 180 i 270 stopni mogą pojawić się czarnie lub biale (tzn. pominięte przy rysowaniu) punkty w środku obrazka. Dlatego podobnie jak przy skalowaniu można ten wzór obrócić, tak żeby dla każdego punktu (x,y) na ekranie wyliczyć współrzędne punktu (p,q) z obrazka. Dla każdego punktu (x,y) trzeba więc obliczyć:
x = round( (xrsin(kąt)-yrcos(kąt)+x0*(-sin(kąt)cos(kąt)-sin(kąt)
-sin2(kąt))+y0
(sin2(kąt)+cos(kąt)-sin(kąt)*cos(kąt))
/ (sin2(kąt)-sin(kąt)*cos(kąt) );
y = round( / ); // dokończyć w wolnej chwili !!!

 gdzie:
    x0, y0 - środek obrotu
    x,  y  - współrzędne obracanego punktu
    kąt    - kąt o jaki obracamy :-)
    xr, yr - współrzędne punktu po obrocie

Mam nadzieje ze cos rozumiesz... :-)
--Delphi 6, Pascal

----====Pozdrawiam @LL====----
------====== RFL ======------
--==[ [email protected] ]==--

1 użytkowników online, w tym zalogowanych: 0, gości: 1