Пользователь
Регистрация: 23.01.2011
Сообщений: 11
|
графика в Borland C++
Помогите плз изменить данную программу так, что бы ячейки не заштриховывались в соответствии с нужной интенсивностью, а закрашивались разными оттенками одного цвета или на крайний случай разными цветами от более светлого, до более темного в соответствии с нужной интенсивностью.
Цитата:
#include <graphics.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <dos.h>
#define N 20
int deltax,deltay;
void initg()
{
int gdriver = DETECT, gmode, errorcode;
initgraph(&gdriver, &gmode, "..\\BGI");
errorcode = graphresult();
if (errorcode != grOk)
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);
}
setcolor(getmaxcolor());
}
void net()
{
int i=0, x=getmaxx(),y=getmaxy();
while(i<x)
{
setcolor(BLUE);
line(0,i,x,i);
line(i,0,i,y);
i+=N;
}
setcolor(RED);
line(0,y/2,x,y/2);
line(x/2,0,x/2,y);
line(0,y/2-20,x,y/2-20);
line(x/2-20,0,x/2-20,y);
}
void pixel(int x,int y,int c)
{
setfillstyle(SOLID_FILL, 2);
bar(x*N+deltax*N,-y*N+deltay*N,x*N+N+deltax*N,-y*N+N+deltay*N);
}
void PutPixel(int x,int y,int z)
{
if(z==0)
{
return;
}
for(double i=0;i<=N;i+=(double)N/( (double)z) )
{
setcolor(RED);
line(x*N+i+deltax*N,-y*N+deltay*N,x*N+i+deltax*N,-y*N+N+deltay*N);
line(x*N+deltax*N,-y*N+deltay*N+i,x*N+N+deltax*N,-y*N+deltay*N+i);
}
}
void zat(int x1,int y1,int x2,int y2, int k)
{
int I=5 ;
double X,Y,Px,Py,t,E,Emax,i;
X= x1;
Y= y1;
Px= x2 - x1;
Py= y2 - y1;
if(Px>=Py)
{
t= I*Py / Px;
E= I/2;
Emax= I - I*Py / Px;
i= Px;
if(k==1)PutPixel(X, Y, E );
if(k==0)PutPixel(-X, Y, E );
while (i-->0)
{
if (E >= Emax)
{
X= X + 1;
for(int dop=X;dop<Px+x1+1;dop++)
if(k==0)pixel(-dop,Y,9);
else pixel(dop,Y,9);
Y= Y + 1;
E = E- Emax;
}
else
{
X= X + 1;
E = E + t;
}
if(k==1)PutPixel(X, Y, E );
if(k==0)PutPixel(-X, Y, E );
}
}
else
{
t= I*Px / Py;
E= I/2;
Emax= I - I*Px/Py;
i= Py;
if(k==1)PutPixel(X, Y,I - E+1);
if(k==0)PutPixel(-X, Y,I - E+1);
while (i-->0)
{
for(int dop=X+1;dop<Px+x1+1;dop++)
if(k==0)pixel(-dop,Y,9);
else pixel(dop,Y,9);
if (E >= Emax)
{
Y= Y + 1;
X= X + 1;
E = E - Emax;
}
else
{
Y = Y + 1;
E = E + t;
}
if(k==1)PutPixel(X, Y,I - E+1);
if(k==0)PutPixel(-X, Y,I - E+1);
}
}
}
void main()
{
initg();
deltax=getmaxx()/(N*2);
deltay=getmaxy()/(N*2);
net();
int x1, y1, x2, y2, k;
printf("Vvedite x1y1: \n");
scanf("%d %d",&x1, &y1);
printf("Vvedite x2y2: \n");
scanf("%d %d",&x2, &y2);
if(y1<y2)zat(x1,y1,x2,y2,1);
if(y1>y2)zat(-x2,y2,-x1,y1,0);
line(x1*N+deltax*N,(-y1+1)*N+deltay*N,x2*N+N+deltax*N,(-y2-1)*N+N+deltay*N);
getch();
closegraph();
}
|
|