-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathline.c
More file actions
123 lines (123 loc) · 1.88 KB
/
Copy pathline.c
File metadata and controls
123 lines (123 loc) · 1.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include<GL/glut.h>
#include<stdio.h>
#include<stdlib.h>
int a,b,c,d;
void init();
void display();
void drawline(int a,int b,int c,int d);
void drawline_horizontalsteep(int x0,int y0,int x1,int y1);
void drawline_verticalsteep(int x0,int y0,int x1,int y1);
void plot(int x,int y);
void init()
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0,400,0,400);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void display()
{
glClearColor(1,1,1,1);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0,0,0);
drawline(a,b,c,d);
glFlush();
}
void drawline(int a,int b,int c,int d)
{
if(abs(d-b)<abs(c-a))
{
if(a>c)
{
drawline_horizontalsteep(c,d,a,b);
}
else
{
drawline_horizontalsteep(a,b,c,d);
}
}
else
{
if(b>d)
{
drawline_verticalsteep(c,d,a,b);
}
else
{
drawline_verticalsteep(a,b,c,d);
}
}
}
void drawline_horizontalsteep(int x0,int y0,int xe,int ye)
{
int dx,dy,p0,yi,x,y;
dx=xe-x0;
dy=ye-y0;
yi=1;
if(dy<0)
{
yi=-1;
dy=-dy;
}
p0=(2*dy)-dx;
y=y0;
for(x=x0;x<xe;x++)
{
plot(x,y);
if(p0>0)
{
y=y+yi;
p0=p0-(2*dx);
}
p0=p0+(2*dy);
}
}
void drawline_verticalsteep(int x0,int y0,int xe,int ye)
{
int dx,dy,p0,xi,x,y;
dx=xe-x0;
dy=ye-y0;
xi=1;
if(dx<0)
{
xi=-1;
dx=-dx;
}
p0=(2*dy)-dx;
x=x0;
for(y=y0;y<ye;y++)
{
plot(x,y);
if(p0>0)
{
x=x+xi;
p0=p0-(2*dy);
}
p0=p0+(2*dx);
}
}
void plot(int x,int y)
{
glColor3f(0.5,0.2,0.7);
glPointSize(5);
glBegin(GL_POINTS);
glVertex2i(x,y);
glEnd();
}
void main(int argc,char **argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
printf("Enter the intial point");
scanf("%d%d",&a,&b);
printf("Enter the final point");
scanf("%d%d",&c,&d);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowPosition(40,40);
glutInitWindowSize(400,400);
glutCreateWindow("Bresenham's line drawing");
init();
glutDisplayFunc(display);
glutMainLoop();
}