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: 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; 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; 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; 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? |
|
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). |
|
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) |
|
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 :) |
|
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 |
|
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. |
|
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 |
|
m4tx |
» 2012-12-21 15:23:45 W jaki sposób większą? |
|
« 1 » 2 3 |