Skip to content

Commit fa4f3cf

Browse files
authored
Merge pull request #2 from Avik-18/Avik-18-patch-1
Add files via upload
2 parents 29453df + 64da438 commit fa4f3cf

File tree

1 file changed

+353
-0
lines changed

1 file changed

+353
-0
lines changed

assign5.cpp

Lines changed: 353 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,353 @@
1+
/*
2+
Name - Avik Ghosh
3+
ID - 181001001039
4+
Batch - BCS3A
5+
*/
6+
7+
//Triangle drawing using Bresenham line drawing algorithm and also interior colouring using Flood Fill algorithm.
8+
9+
#include<stdio.h>
10+
#include<graphics.h>
11+
#include<conio.h>
12+
int n=0,size;
13+
int x1,y1,x2,y2,x3,y3;
14+
int *pixels=NULL;
15+
static int m=0;
16+
void ExportPixels()
17+
{
18+
FILE *fp = fopen("1039_Pixels.txt", "w");
19+
for(int i=0; i<n; i++)
20+
{
21+
if(i>0)
22+
{
23+
fprintf(fp, "%d, %d\n", pixels[2*i+0], pixels[2*i+1]);
24+
}
25+
else if(i==0)
26+
{
27+
fprintf(fp,"Coordinate A ( %d, %d)\n", x1,y1);
28+
fprintf(fp,"Coordinate B ( %d, %d)\n", x2,y2);
29+
fprintf(fp,"Coordinate C ( %d, %d)\n", x3,y3);
30+
fprintf(fp,"Coordinate of Centroid ( %d, %d)\n", (x1+x2+x3)/3,(y1+y2+y3)/3);
31+
fprintf(fp,"Number of pixels : %d\n",n);
32+
fprintf(fp, "Coordinates(Including A,B and C also) : \nX, Y\n%d, %d\n",x1,y1);
33+
}
34+
}
35+
fclose(fp);
36+
printf("Number of pixels : %d\n",n);
37+
printf("1039_Pixels.txt created successfully!\n");
38+
}
39+
void Export2SVG(int width, int height)
40+
{
41+
int scale = 10;
42+
int margin = 100;
43+
int i;
44+
int a1 = pixels[0], a2 = pixels[0];
45+
int b1 = pixels[1], b2 = pixels[1];
46+
for(i=1; i<n; i++)
47+
{
48+
if(a1>pixels[2*i+0])
49+
{
50+
a1=pixels[2*i+0];
51+
}
52+
if(a2<pixels[2*i+0])
53+
{
54+
a2=pixels[2*i+0];
55+
}
56+
if(b1>pixels[2*i+1])
57+
{
58+
b1=pixels[2*i+1];
59+
}
60+
if(b2<pixels[2*i+1])
61+
{
62+
b2=pixels[2*i+1];
63+
}
64+
}
65+
a1 *=scale; a2 *=scale;
66+
b1 *=scale; b2 *=scale;
67+
FILE *fp = fopen("1039.svg", "w");
68+
fprintf(fp, "<svg width=\"%d\" height=\"%d\" viewBox=\"0 0 %d %d\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">",width,height,width,height);
69+
for(i=0; i<n; i++)
70+
{
71+
if(pixels[2*i+0]==x1 && pixels[2*i+1]==y1)
72+
{
73+
fprintf(fp,"\n<rect x=\"%d\" y=\"%d\" width=\"%d\" height=\"%d\" style=\"fill:red;stroke:black;stroke-width:.30;fill-opacity:0.76;stroke-opacity:0.90\"/>", scale*pixels[2*i+0]-a1+100, scale*pixels[2*i+1]-b1+100, scale, scale);
74+
}
75+
else if(pixels[2*i+0]==x2 && pixels[2*i+1]==y2)
76+
{
77+
fprintf(fp,"\n<rect x=\"%d\" y=\"%d\" width=\"%d\" height=\"%d\" style=\"fill:blue;stroke:#FFD700;stroke-width:.30;fill-opacity:0.76;stroke-opacity:0.90\"/>", scale*pixels[2*i+0]-a1+100, scale*pixels[2*i+1]-b1+100, scale, scale);
78+
}
79+
else if(pixels[2*i+0]==x3 && pixels[2*i+1]==y3)
80+
{
81+
fprintf(fp,"\n<rect x=\"%d\" y=\"%d\" width=\"%d\" height=\"%d\" style=\"fill:green;stroke:#FFD700;stroke-width:.30;fill-opacity:0.76;stroke-opacity:0.90\"/>", scale*pixels[2*i+0]-a1+100, scale*pixels[2*i+1]-b1+100, scale, scale);
82+
}
83+
else
84+
{
85+
fprintf(fp,"\n<rect x=\"%d\" y=\"%d\" width=\"%d\" height=\"%d\" style=\"fill:#FFD700;stroke:#FFD700;stroke-width:.30;fill-opacity:0.76;stroke-opacity:0.90\"/>", scale*pixels[2*i+0]-a1+100, scale*pixels[2*i+1]-b1+100, scale, scale);
86+
}
87+
}
88+
fprintf(fp,"\n<rect x=\"%d\" y=\"%d\" width=\"%d\" height=\"%d\" style=\"fill:red;stroke:#FFD700;stroke-width:.30;fill-opacity:0.76;stroke-opacity:0.90\"/>", scale*((x1+x2+x3)/3)-a1+100, scale*((y1+y2+y3)/3)-b1+100, scale, scale);
89+
fclose(fp);
90+
printf("1039.svg created successfully!\n");
91+
}
92+
void Export2HTML(int width, int height)
93+
{
94+
int scale = 10;
95+
int margin = 100;
96+
int i;
97+
int a1 = pixels[0], a2 = pixels[0];
98+
int b1 = pixels[1], b2 = pixels[1];
99+
for(i=1; i<n; i++)
100+
{
101+
if(a1>pixels[2*i+0])
102+
{
103+
a1=pixels[2*i+0];
104+
}
105+
if(a2<pixels[2*i+0])
106+
{
107+
a2=pixels[2*i+0];
108+
}
109+
if(b1>pixels[2*i+1])
110+
{
111+
b1=pixels[2*i+1];
112+
}
113+
if(b2<pixels[2*i+1])
114+
{
115+
b2=pixels[2*i+1];
116+
}
117+
}
118+
a1 *=scale; a2 *=scale;
119+
b1 *=scale; b2 *=scale;
120+
FILE *fp = fopen("1039.html", "w");
121+
fprintf(fp, "<!DOCTYPE html>\n<html>\n<body>\n");
122+
fprintf(fp, "<svg width=\"%d\" height=\"%d\" viewBox=\"0 0 %d %d\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">",width,height,width,height);
123+
for(i=0; i<n; i++)
124+
{
125+
if(pixels[2*i+0]==x1 && pixels[2*i+1]==y1)
126+
{
127+
fprintf(fp,"\n<rect x=\"%d\" y=\"%d\" width=\"%d\" height=\"%d\" style=\"fill:red;stroke:#FFD700;stroke-width:.30;fill-opacity:0.76;stroke-opacity:0.90\"/>", scale*pixels[2*i+0]-a1+100, scale*pixels[2*i+1]-b1+100, scale, scale);
128+
}
129+
else if(pixels[2*i+0]==x2 && pixels[2*i+1]==y2)
130+
{
131+
fprintf(fp,"\n<rect x=\"%d\" y=\"%d\" width=\"%d\" height=\"%d\" style=\"fill:blue;stroke:#FFD700;stroke-width:.30;fill-opacity:0.76;stroke-opacity:0.90\"/>", scale*pixels[2*i+0]-a1+100, scale*pixels[2*i+1]-b1+100, scale, scale);
132+
}
133+
else if(pixels[2*i+0]==x3 && pixels[2*i+1]==y3)
134+
{
135+
fprintf(fp,"\n<rect x=\"%d\" y=\"%d\" width=\"%d\" height=\"%d\" style=\"fill:green;stroke:#FFD700;stroke-width:.30;fill-opacity:0.76;stroke-opacity:0.90\"/>", scale*pixels[2*i+0]-a1+100, scale*pixels[2*i+1]-b1+100, scale, scale);
136+
}
137+
else
138+
{
139+
fprintf(fp,"\n<rect x=\"%d\" y=\"%d\" width=\"%d\" height=\"%d\" style=\"fill:#FFD700;stroke:#FFD700;stroke-width:.30;fill-opacity:0.76;stroke-opacity:0.90\"/>", scale*pixels[2*i+0]-a1+100, scale*pixels[2*i+1]-b1+100, scale, scale);
140+
}
141+
}
142+
fprintf(fp,"\n<rect x=\"%d\" y=\"%d\" width=\"%d\" height=\"%d\" style=\"fill:red;stroke:#FFD700;stroke-width:.30;fill-opacity:0.76;stroke-opacity:0.90\"/>", scale*((x1+x2+x3)/3)-a1+100, scale*((y1+y2+y3)/3)-b1+100, scale, scale);
143+
fprintf(fp, "\n </svg>\n");
144+
fprintf(fp, "\n</body>\n</html>\n");
145+
fclose(fp);
146+
printf("1039.html created successfully!\n");
147+
}
148+
149+
void flood(int x, int y, int new_col, int old_col)
150+
{
151+
if (getpixel(x, y) == old_col)
152+
{
153+
putpixel(x, y, new_col);
154+
flood(x + 1, y, new_col, old_col);
155+
flood(x - 1, y, new_col, old_col);
156+
flood(x, y + 1, new_col, old_col);
157+
flood(x, y - 1, new_col, old_col);
158+
}
159+
}
160+
161+
void lineBres(int xa, int ya, int xb, int yb)
162+
{
163+
int k,twoDx,twoDy,twoDyMinusDx,dx,dy,p,slope;
164+
if(xa<xb)
165+
{
166+
dx = xb - xa;
167+
if(ya<yb)
168+
{
169+
dy = yb - ya;
170+
}
171+
else
172+
{
173+
dy=ya-yb;
174+
}
175+
}
176+
else
177+
{
178+
dx = xa - xb;
179+
if(ya<yb)
180+
{
181+
dy = yb - ya;
182+
}
183+
else
184+
{
185+
dy=ya-yb;
186+
}
187+
}
188+
slope=dy/dx;
189+
if(slope>=1)
190+
{
191+
p = 2 * dx - dy;
192+
}
193+
else
194+
{
195+
p = 2 * dy - dx;
196+
}
197+
twoDx = 2 * dx;
198+
twoDy = 2 * dy;
199+
twoDyMinusDx = 2*dy-2*dx;
200+
int x, y;
201+
202+
if (xa > xb)
203+
{
204+
x = xb;
205+
y = yb;
206+
xb = xa;
207+
}
208+
else
209+
{
210+
x = xa;
211+
y = ya;
212+
}
213+
if(m==0)
214+
{
215+
pixels = (int*)malloc(10*(size+1)*sizeof(int));
216+
}
217+
218+
pixels[2*m+0]=x;
219+
pixels[2*m+1]=y;
220+
221+
m++;
222+
if(slope<1)
223+
{
224+
for (k = 0; k <= dx-1; k++)
225+
{
226+
x++;
227+
if (p < 0)
228+
p = p + twoDy;
229+
else
230+
{
231+
y++;
232+
p = p + twoDyMinusDx;
233+
}
234+
235+
pixels[2*m+0]=x;
236+
pixels[2*m+1]=y;
237+
m++;
238+
}
239+
}
240+
else
241+
{
242+
for (k = 0; k <= dy-1; k++)
243+
{
244+
y++;
245+
if (p < 0)
246+
p = p + twoDx;
247+
else
248+
{
249+
x++;
250+
p = p + twoDyMinusDx;
251+
}
252+
253+
pixels[2*m+0]=x;
254+
pixels[2*m+1]=y;
255+
m++;
256+
}
257+
}
258+
n=m;
259+
printf("\nNumber of pixels = %d\n", n);
260+
261+
}
262+
263+
void display()
264+
{
265+
for(int i=0;i<n;i++)
266+
{
267+
if(pixels[2*i+0]==x1 && pixels[2*i+1]==y1)
268+
{
269+
putpixel(pixels[2*i+0],pixels[2*i+1],4);
270+
}
271+
else if(pixels[2*i+0]==x2 && pixels[2*i+1]==y2)
272+
{
273+
putpixel(pixels[2*i+0],pixels[2*i+1],1);
274+
}
275+
else if(pixels[2*i+0]==x3 && pixels[2*i+1]==y3)
276+
{
277+
putpixel(pixels[2*i+0],pixels[2*i+1],2);
278+
}
279+
else
280+
{
281+
putpixel(pixels[2*i+0],pixels[2*i+1],14);
282+
}
283+
}
284+
putpixel((x1+x2+x3)/3,(y1+y2+y3)/3,4);
285+
printf("Done...\n");
286+
}
287+
int makepositive(int x)
288+
{
289+
if(x<0)
290+
{
291+
x=x*(-1);
292+
}
293+
return x;
294+
}
295+
int main()
296+
{
297+
298+
int gd=DETECT,gm;
299+
300+
printf("Enter the A coordinates: ");
301+
scanf("%d%d",&x1,&y1);
302+
printf("Enter the B coordinates: ");
303+
scanf("%d%d",&x2,&y2);
304+
printf("Enter the C coordinates: ");
305+
scanf("%d%d",&x3,&y3);
306+
int a1,b1,c1,a2,b2,c2;
307+
a1=x2-x1;
308+
b1=x3-x2;
309+
c1=x3-x1;
310+
a2=y2-y1;
311+
b2=y3-y2;
312+
c2=y3-y1;
313+
314+
a1=makepositive(a1);
315+
b1=makepositive(b1);
316+
c1=makepositive(c1);
317+
a2=makepositive(a2);
318+
b2=makepositive(b2);
319+
c2=makepositive(c2);
320+
321+
if(a1>=a2 && b1>=b2 && c1>=c2)
322+
{
323+
if(x1>x2 && x2>x3)
324+
{
325+
size=x3;
326+
}
327+
else if(x2>x1 && x2>x3)
328+
{
329+
size=x2;
330+
}
331+
else
332+
{
333+
size=x3;
334+
}
335+
initgraph(&gd,&gm,NULL);
336+
lineBres(x1,y1,x2,y2);
337+
lineBres(x2,y2,x3,y3);
338+
lineBres(x1,y1,x3,y3);
339+
340+
ExportPixels();
341+
Export2HTML(5000,5000);
342+
Export2SVG(5000,5000);
343+
344+
display();
345+
flood(((x1+x2+x3)/3)+1,((y1+y2+y3)/3)+1,3,0);
346+
getch();
347+
}
348+
else
349+
{
350+
printf("Wrong coordinates.");
351+
}
352+
return 0;
353+
}

0 commit comments

Comments
 (0)