Assingment 4
Assingment 4
Roll Number:-24
Division:-CS - A
PRN:-12310414
#include <stdio.h>
#include <stdlib.h>
#include <GL/glut.h>
#include <math.h>
int edges;
int i, j;
int arr[999][2];
int miny, maxy;
int transformedArr[999][2];
void fillPolygon() {
int y;
int x[999];
int count;
for (y = miny; y <= maxy; y++) {
count = 0;
for (i = 0; i < edges; i++) {
int x1 = transformedArr[i][0];
int y1 = transformedArr[i][1];
int x2 = transformedArr[(i + 1) % edges][0];
int y2 = transformedArr[(i + 1) % edges][1];
if ((y1 <= y && y < y2) || (y2 <= y && y < y1)) {
float xtemp = x1 + (y - y1) * (x2 - x1) /(y2 - y1);
x[count++] = (int)xtemp;
} else if (y1 == y && y2 == y) {
if (x1 < x2) {
x[count++] = x1;
x[count++] = x2;
} else {
x[count++] = x2;
x[count++] = x1;
}
}
}
for (i = 0; i < count; i++) {
for (j = i + 1; j < count; j++) {
if (x[i] > x[j]) {
int temp = x[i];
x[i] = x[j];
x[j] = temp;
}
}
}
for (i = 0; i < count; i += 2) {
if (i + 1 < count) {
glBegin(GL_POINTS);
for (int k = x[i]; k <= x[i + 1]; k++) {
glVertex2i(k, y);
}
glEnd();
}
}
}
}
void display(void) {
glClear(GL_COLOR_BUFFER_BIT);
int choice;
printf("Choose a transformation:\n1. Translation\n2. Scaling\n3. Shearing\n4. Rotation\nEnter
your choice: ");
scanf("%d", &choice);
applyTransformation(choice);
miny = 480;
maxy = 0;
for (i = 0; i < edges; i++) {
if (transformedArr[i][1] < miny) {
miny = transformedArr[i][1];
}
if (transformedArr[i][1] > maxy) {
maxy = transformedArr[i][1];
}
}
fillPolygon();
glBegin(GL_LINES);
for (i = 0; i < edges - 1; i++) {
glVertex2i(transformedArr[i][0], transformedArr[i][1]);
glVertex2i(transformedArr[i + 1][0], transformedArr[i + 1][1]);
}
glVertex2i(transformedArr[0][0], transformedArr[0][1]);
glVertex2i(transformedArr[edges - 1][0], transformedArr[edges - 1][1]);
glEnd();
glFlush();
}
void myInit(void) {
glClearColor(0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-480.0, 640.0, -640.0, 480.0);
}