![]() |
|
|
Home | | Syllabus | |
Assignments | |
Documentation
Solution to Assignment 3, Problem 1
/*
Graphics Assignment 3
Flower Transformations.
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <GL/glut.h>
#define PI 3.14159
void myinit(void)
{
glClearColor(1.0, 1.0, 1.0, 1.0);
glColor3f(1.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-250.0, 250.0, -250.0, 250.0);
glMatrixMode(GL_MODELVIEW);
}
/*draw the flower */
void display(void){
typedef GLfloat point2[2];
point2 squareVerts[4];
int i, j;
GLfloat x=-1.0, y=-1.0;
GLfloat side = 2.0;
glClear(GL_COLOR_BUFFER_BIT);
/*Specify vertices for original square*/
squareVerts[0][0] = x;
squareVerts[0][1] = y;
squareVerts[1][0] = x + side;
squareVerts[1][1] = y;
squareVerts[2][0] = x + side;
squareVerts[2][1] = y + side;
squareVerts[3][0] = x;
squareVerts[3][1] = y + side;
/*Draw small petals*/
for( j = 0; j < 12; j ++){
glPushMatrix();
glRotatef(30.0*j, 0.0, 0.0, 1.0);
glTranslatef(30*sqrt(2), 0.0, 0.0);
glScalef(30.0, 5.0, 1.0);
glRotatef(45.0, 0.0, 0.0, 1.0);
glBegin(GL_LINE_LOOP);
for (i=0; i<4; i++){
glVertex2fv(squareVerts[i]);
}
glEnd();
glPopMatrix();
}
/*Draw Big petals*/
for (j = 0; j < 12; j++){
glPushMatrix();
glRotatef(30.0*j, 0.0, 0.0, 1.0);
glTranslatef(40*sqrt(2), 0.0, 0.0);
glScalef(40.0, 10.0, 1.0);
glRotatef(45.0, 0.0, 0.0, 1.0);
glBegin(GL_LINE_LOOP);
for (i=0; i<4; i++){
glVertex2fv(squareVerts[i]);
}
glEnd();
glPopMatrix();
}
/*Draw boxes between petals*/
for (j = 0; j < 12; j++){
glPushMatrix();
glRotatef(30.0*j + 15.0, 0.0, 0.0, 1.0);
glTranslatef(100, 0.0, 0.0);
glScalef(10.0, 10.0, 1.0);
glBegin(GL_LINE_LOOP);
for (i=0; i<4; i++){
glVertex2fv(squareVerts[i]);
}
glEnd();
glPopMatrix();
}
/*Draw tilted boxes between petals*/
for (j = 0; j < 12; j++){
glPushMatrix();
glRotatef(30.0*j + 15.0, 0.0, 0.0, 1.0);
glTranslatef(100, 0.0, 0.0);
glRotatef(45.0, 0.0, 0.0, 1.0);
glScalef(10.0/sqrt(2.0), 10.0/sqrt(2.0), 1.0);
glBegin(GL_LINE_LOOP);
for (i=0; i<4; i++){
glVertex2fv(squareVerts[i]);
}
glEnd();
glPopMatrix();
}
glFlush();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500,500);
glutInitWindowPosition(50,50);
glutCreateWindow("Flower Transform");
glutDisplayFunc(display);
myinit();
glutMainLoop();
return 0;
}
Home | | Syllabus | | Assignments | | Documentation
Constance Royden--croyden@mathcs.holycross.edu
|