Реализации различных алгоритмов на Си / псевдографика заполнение области
.doc
1. Задание
Написать программу, реализующую целочисленный алгоритм построения графического примитива.
Вариант
16 – заполнение области
3. Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <windows.h>
#include <iostream>
#include <math.h>
char Scr[25][80];
int p,*x,*y,i;
void zakraska(int,int);
void print();
void drawing(int Ax, int Ay, int Bx, int By)
{
if(Ax==Bx)
if(By>Ay)
for(int i=Ay;i<By;i++)
Scr[24-i][Ax]='#';
else
for(int i=By;i<Ay;i++)
Scr[24-i][Ax]='#';
if(Bx<Ax)
{
int a=Bx;
Bx=Ax;
Ax=a;
a=Ay;
Ay=By;
By=a;
}
int subX=Bx-Ax;
int subY=By-Ay;
int *arrX=(int *)malloc(sizeof(int)*(subX+1));
int *arrY=(int *)malloc(sizeof(int)*(subX+1));
double *arrYch=(double *)malloc(sizeof(double)*(subX+1));
for(int i=0;i<(subX+1);i++)
arrX[i]=Ax+i;
for(int i=0;i<(subX+1);i++)
arrYch[i]=((double)(arrX[i]-Ax))/((double)subX)*((double)subY)+Ay;
arrY[0]=Ay;
for(int i=1;i<(subX+1);i++)
{
if((arrYch[i]-arrYch[i-1])<0.5)
arrY[i]=floor(arrYch[i]);
else
arrY[i]=ceil(arrYch[i]);
}
for(int i=0;i<(subX+1);i++)
{
Scr[24-arrY[i]][arrX[i]]='#';
if(i<subX)
{
int count=(arrY[i+1]-arrY[i])/2;
if(count<1)
;
else if(count==1)
Scr[24-arrY[i]][arrX[i+1]]='#';
else
{
for(int j=1;j<count;j++)
Scr[24-arrY[i]-j][arrX[i]]='#';
for(int j=count;j<(arrY[i+1]-arrY[i]);j++)
Scr[24-arrY[i]-j][arrX[i+1]]='#';
}
}
}
}
void main(void)
{
int FirstPixel[2];
setlocale(LC_ALL,"rus");
for(int j=0;j<25;j++)
for(int i=0;i<80;i++)
Scr[j][i]=' ';
printf("Введите кол-во точек: ");
scanf("%d",&p);
x=(int*)malloc(p*sizeof(int));
y=(int*)malloc(p*sizeof(int));
for(i=0;i<p;i++)
{
printf("Введите координаты %d :",i+1);
scanf("%d %d",&x[i],&y[i]);
}
i=0;
for(i=0;i<p-1;i++)
drawing(x[i],y[i],x[i+1],y[i+1]);
drawing(x[0],y[0],x[p-1],y[p-1]);
printf("Введите начальный пиксел:");
scanf("%d %d",&FirstPixel[0],&FirstPixel[1]);
zakraska(FirstPixel[0],FirstPixel[1]);
print();
system("pause");
}
void zakraska(int x,int y)
{
if(Scr[24-y][x]==' ')
{
Scr[24-y][x]='.';
zakraska ( x+1, y);
zakraska ( x, y+1);
zakraska ( x-1,y);
zakraska ( x, y-1);
}
}
void print(void)
{
system("cls");
for(int j=0;j<25;j++)
for(int i=0;i<80;i++)
printf("%c",Scr[j][i]);
}