CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Obracanie trójkąta

Obracanie trójkąta

problemy z tworzeniem aplikacji graficznych oraz audio i wideo

Obracanie trójkąta

Nowy postprzez Cyfrowy Baron » sobota, 20 października 2012, 09:49

Potrzebuję kodu na obracanie trójkąta, bo szczerze mówiąc nie chce mi się zaczynać tego od początku i pomyślałem, że może ktoś już coś takiego ma.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4727
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 444
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Obracanie trójkąta

Nowy postprzez polymorphism » sobota, 20 października 2012, 16:38

Chodzi Ci o przeliczenie współrzędnych? Jeśli tak, to tu wystarczy przecież prosty wzór na obrót punktu na płaszczyźnie:

TeX: {x}'=x*\cos\beta-y*\sin\beta
TeX: {y}'=x*\sin\beta+y*\cos\beta

p.s. czemu nie działa LaTex?
C++ Reference - opis wszystkich klas STL-a i funkcji C.

Za ten post autor polymorphism otrzymał podziękowanie od:
Cyfrowy Baron
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2187
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 204
System operacyjny: Windows 7 Pro
Windows 8.1
Linux Mint 19
Kompilator: Visual Studio 2015 Community
CodeLite (MinGW)
MSYS2 (MinGW, clang)
g++
Gadu Gadu: 0
    Windows XPFirefox

Re: Obracanie trójkąta

Nowy postprzez Cyfrowy Baron » sobota, 20 października 2012, 20:32

Nic mi to nie mówi. To tylko dwa punkty X i Y a trójkąt ma trzy. Rysując trójkąt muszę przemieszczać 3 punkty zachowując ich wzajemne położenie względem siebie, a wartość każdego punktu musi wyrażać się w dwóch współrzędnych określających ich położenie na płaszczyźnie.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4727
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 444
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Obracanie trójkąta

Nowy postprzez polymorphism » sobota, 20 października 2012, 21:03

Nic mi to nie mówi. To tylko dwa punkty X i Y a trójkąt ma trzy.

To nie są punkty, tylko współrzędne punktu P=(x, y). Te dwa wzory mają Ci posłużyć do wyliczenia współrzędnych punktu po obrocie o dany kąt względem początku układu. Trójkąt ma trzy wierzchołki, więc musisz dla każdego wykonać oddzielne obliczenia. Wszystko jasne?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2187
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 204
System operacyjny: Windows 7 Pro
Windows 8.1
Linux Mint 19
Kompilator: Visual Studio 2015 Community
CodeLite (MinGW)
MSYS2 (MinGW, clang)
g++
Gadu Gadu: 0
    Windows XPFirefox

Re: Obracanie trójkąta

Nowy postprzez Cyfrowy Baron » sobota, 20 października 2012, 22:25

W sumie to okazałeś się jednak pomocny chociaż wzór wymagał drobnej korekty do moich potrzeb. Na razie udało mi się obracać linię tak jak wskazówkę zegara, więc myślę, że pociągnięcie linii między tymi dwoma punktami będzie już proste.

Tak wygląda kod:

KOD cpp:     UKRYJ  
void __fastcall DrawLine(TCanvas *myCanvas, TPoint p1, TPoint p2)
{
 myCanvas->MoveTo( p1.x, p1.y );
 myCanvas->LineTo( p2.x, p2.y );
}
//---------------------------------------------------------------------------
TPoint p2 = TPoint(60, 80);

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 float s = (2.0 * 3.14) / 360.0;

 static float k = 0; //kąt
 k += 5;

 int x = p1.x + 30 * cos(k * s);
 int y = p1.y + 30 * sin(k * s);

 DrawLine(Image1->Canvas, TPoint(x, y), TPoint(p1.x, p1.y) );
}


A tak efekt działania:

angle.png
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4727
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 444
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Obracanie trójkąta

Nowy postprzez Mironas » poniedziałek, 22 października 2012, 10:20

Ja kiedyś zrobiłem to tak:
KOD cpp:     UKRYJ  
void TForm1::PrzesunPunktWgObrotu(int & X, int & Y, int sx, int sy, int obrot)
{
        // Przesuniecie punktow do pozycji 'po obrocie'
        //    X,Y               - pozycja punktu
        //    sx,sy             - srodek obrotu
        // --------------------------------------------
        double AlphaRad = (double)obrot * M_PI / -180.0;
        float px, py;   // zmienne pomocnicze

        double COS = cos(AlphaRad);
        double SIN = sin(AlphaRad);

        float FX = X;
        float FY = Y;

        // przesuniecie srodka obrotu do poczatku ukladu wsp czyli o wektor (-XS,-YS)
        FX = FX - sx;
        FY = FY - sy;

        // obrot o kat Alpha wzgledem srodka obrotu
        px = FX * COS + FY * SIN;
        py = FY * COS - FX * SIN;

        // przesuniecie srodka obrotu z powrotem czyli o wektor (XS,YS)
        FX = px + sx;
        FY = py + sy;

        //
        X = FX;
        Y = FY;
}
 

Oczywiście dla trójkąta trzeba wykonać 3 razy - dla każdego wierzchołka oddzielnie.
Jeśli dobrze pamiętam to trzeba dodać:
#include <Math.hpp>
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 446
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 21
Otrzymał podziękowań: 63
System operacyjny: Windows 10
Kompilator: C++Builder 10.2 Tokyo
TMS Components Pack
Gadu Gadu: 0
    Windows XPChrome


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Aplikacje multimedialne, graficzne

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 1 gość

cron