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

Narysuj dwa kwadraty, tak by mniejszy z nich był obrócony o dowolny kąt oraz wierzchołki były zawarte w obwodzie większego

Ostatnio zmodyfikowano 2012-12-23 14:18
Autor Wiadomość
Trix
Temat założony przez niniejszego użytkownika
Narysuj dwa kwadraty, tak by mniejszy z nich był obrócony o dowolny kąt oraz wierzchołki były zawarte w obwodzie większego
» 2012-12-21 13:41:21
Zad. Narysuj dwa kwadraty, tak by mniejszy z nich był obrócony o dowolny kąt oraz wierzchołki były zawarte w obwodzie większego., czyli muszę obliczyć wysokość mniejszego kwadratu(wynika to z funkcji).
 (kod w OpenGL)
Funkcja rysująca kwadraty:
C/C++
void funkcja( GLfloat h, GLfloat x, GLfloat y, double alfa_st ) {
    GLfloat q_x1, q_y1, q_x2, q_y2, q_x3, q_y3, q_x4, q_y4;
    double alfa =( alfa_st * 3.141592653 ) / 180.0; // zmiana stopni na radiany
    // podst. współrzędne
    q_x1 = x + h / 2;
    q_y1 = y + h / 2;
    q_x2 = x + h / 2;
    q_y2 = y - h / 2;
    q_x3 = x - h / 2;
    q_y3 = y - h / 2;
    q_x4 = x - h / 2;
    q_y4 = y + h / 2;
    // obrót
    q_x1 =(( q_x1 - x ) * cos( alfa ) ) -(( q_y1 - y ) * sin( alfa ) ) + x;
    q_y1 =(( q_x1 - x ) * sin( alfa ) ) +(( q_y1 - y ) * cos( alfa ) ) + y;
   
    q_x2 =(( q_x2 - x ) * cos( alfa ) ) -(( q_y2 - y ) * sin( alfa ) ) + x;
    q_y2 =(( q_x2 - x ) * sin( alfa ) ) +(( q_y2 - y ) * cos( alfa ) ) + y;
   
    q_x3 =(( q_x3 - x ) * cos( alfa ) ) -(( q_y3 - y ) * sin( alfa ) ) + x;
    q_y3 =(( q_x3 - x ) * sin( alfa ) ) +(( q_y3 - y ) * cos( alfa ) ) + y;
   
    q_x4 =(( q_x4 - x ) * cos( alfa ) ) -(( q_y4 - y ) * sin( alfa ) ) + x;
    q_y4 =(( q_x4 - x ) * sin( alfa ) ) +(( q_y4 - y ) * cos( alfa ) ) + y;
    // rysowanie
    glBegin( GL_LINES );
    glVertex2f( q_x1, q_y1 );
    glVertex2f( q_x2, q_y2 );
    glVertex2f( q_x3, q_y3 );
    glVertex2f( q_x2, q_y2 );
    glVertex2f( q_x3, q_y3 );
    glVertex2f( q_x4, q_y4 );
    glVertex2f( q_x1, q_y1 );
    glVertex2f( q_x4, q_y4 );
    glEnd();
    return TRUE;
}

Dane są wsp. wierzchołków.
Obliczając to na kartce zrobiłbym to tak:
1.Znalazłbym równanie 1 prostej przechodzącej przez dane punkty (krawędź kwadratu), czyli miałbym 2 równania z 2 niewiadomymi oraz równanie od środka kwadratu do punktu wierzchołka(imitująca przekątną).
2.Następnie znalazłbym długość r (prosta od środka kwadratu do wierzchołka 1 oraz jedna z prostych znalazłbym punkt przecięcia się oraz długość tego punktu do środka kwadratu).



Tylko jest problem, jak to zrobić w programie? :)
No bo jak obliczyć równania?
P-71527
pekfos
» 2012-12-21 13:51:08
Wystarczy wzór na współrzędne środka odcinka.. To jest zadanie na jakieś 10 linii kodu (w OpenGLu).
P-71529
Trix
Temat założony przez niniejszego użytkownika
» 2012-12-21 13:52:53
Tak, tak ale nie dopisałem, że kąt może się zmieniać (chcę utworzyć z tego programu generator tzw. wirujących kwadratów, więc prócz kąta zmieniać też się będą ilości boków)
P-71530
pekfos
» 2012-12-21 13:55:50
Zad. Narysuj dwa kwadraty, tak by mniejszy z nich był obrócony o 45° oraz wierzchołki były zawarte w obwodzie większego.
Tak, tak ale nie dopisałem, że kąt może się zmieniać.
Zadanie jasno mówi: 45 stopni :)
P-71531
Trix
Temat założony przez niniejszego użytkownika
» 2012-12-21 13:57:47
E coś ci się pomyliło, pisze o dowolny kąt ;p
P-71532
DejaVu
» 2012-12-21 15:08:58
Powinieneś używać funkcji glTranslate3f oraz glRotate3f, a nie bawić się w 'samodzielne' obliczenia położenia oraz rotacji.
P-71535
Trix
Temat założony przez niniejszego użytkownika
» 2012-12-21 15:19:45
Ale w ten sposób mam większą kontrolę nad przekształceniami
P-71536
m4tx
» 2012-12-21 15:23:45
W jaki sposób większą?
P-71537
« 1 » 2 3
  Strona 1 z 3 Następna strona