# include # include # define GRAN 1000 # define SHIRINA 10280 # define VISOTA 120 char red[SHIRINA*VISOTA*3];//3072000=1280*800*3 char stroka[54]; struct point { char red; char green; char blue; }; point massiv[SHIRINA][VISOTA]; int abs(int f) { if (f<0) f=-f; return f; } double max(double a, double b) { if(a>b) { return a; } else return b; } double min(double a, double b) { if(a>b) { return b; } else return a; } //------------------------------------------------------------------------------------------------------------------------------------------- void otrezok(point mas[SHIRINA][VISOTA],int x1,int y1,int x2,int y2,point color) { //--------------------точки для уравнения прямой------------------------------------------------------------------------ double x1q,y1q,x2q,y2q; if(x1>x2) { x1q=x1+0.5; x2q=x2-0.5; } else if(x2>x1) { x1q=x1-0.5; x2q=x2+0.5; } else { x1q=x1-0.5; x2q=x2+0.5; } if(y1>y2) { y1q=y1+0.5; y2q=y2-0.5; } else if(y2>y1) { y1q=y1-0.5; y2q=y2+0.5; } else { y1q=y1-0.5; y2q=y2+0.5; } //---------------Проверка точек на принадлежность----------------------------------------------- double a,b,c=0; int aa,bb; //for(bb=0;bb0 ) { c++; } else if( a*(y2q-y1q)+b*(x1q-x2q)+x1q*(y1q-y2q)+y1q*(x2q-x1q)<0 ) c--; a=aa+0.5; b=bb+0.5; if( a*(y2q-y1q)+b*(x1q-x2q)+x1q*(y1q-y2q)+y1q*(x2q-x1q)>0 ) { c++; } else if( a*(y2q-y1q)+b*(x1q-x2q)+x1q*(y1q-y2q)+y1q*(x2q-x1q)<0 ) c--; a=aa+0.5; b=bb-0.5; if( a*(y2q-y1q)+b*(x1q-x2q)+x1q*(y1q-y2q)+y1q*(x2q-x1q)>0 ) { c++; } else if( a*(y2q-y1q)+b*(x1q-x2q)+x1q*(y1q-y2q)+y1q*(x2q-x1q)<0 ) c--; a=aa-0.5; b=bb+0.5; if( a*(y2q-y1q)+b*(x1q-x2q)+x1q*(y1q-y2q)+y1q*(x2q-x1q)>0 ) { c++; } else if( a*(y2q-y1q)+b*(x1q-x2q)+x1q*(y1q-y2q)+y1q*(x2q-x1q)<0 ) c--; if(abs(c)!=4) { //printf("hello aa=%d bb=%d\n",aa,bb); mas[aa][bb].red=color.red; mas[aa][bb].green=color.green; mas[aa][bb].blue=color.blue; } if(abs(c)==3) { //printf("hello aa=%d bb=%d\n",aa,bb); mas[aa][bb].red=color.red+80; mas[aa][bb].green=color.green+80; mas[aa][bb].blue=color.blue+80; } //printf("abs(c)=%d\n",abs(c)); } } //условие продолжения цикла //if(x1>x2) // aa--; //else // if(x2>x1) // aa++; //} //if(y1>y2) // bb--; //else // if(y2>y1) // bb++; //} } //-------------------------------------------------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------------------------------------------------- void pryamaya(point mas[SHIRINA][VISOTA],int x1,int y1,int x2,int y2,point color) { //--------------------точки для уравнения прямой------------------------------------------------------------------------ double x1q,y1q,x2q,y2q; if(x1>x2) { x1q=x1+0.5; x2q=x2-0.5; } else if(x2>x1) { x1q=x1-0.5; x2q=x2+0.5; } else { x1q=x1; x2q=x2; } if(y1>y2) { y1q=y1+0.5; y2q=y2-0.5; } else if(y2>y1) { y1q=y1-0.5; y2q=y2+0.5; } else { y1q=y1; y2q=y2; } //---------------Проверка точек на принадлежность----------------------------------------------- double a,b,c=0; int aa,bb; //aa=x1; //bb=y1; //while(bb!=y2) //{ // while(c!=4) // { for(bb=0;bb0 ) { c++; } else if( a*(y2q-y1q)+b*(x1q-x2q)+x1q*(y1q-y2q)+y1q*(x2q-x1q)<0 ) c--; a=aa+0.5; b=bb+0.5; if( a*(y2q-y1q)+b*(x1q-x2q)+x1q*(y1q-y2q)+y1q*(x2q-x1q)>0 ) { c++; } else if( a*(y2q-y1q)+b*(x1q-x2q)+x1q*(y1q-y2q)+y1q*(x2q-x1q)<0 ) c--; a=aa+0.5; b=bb-0.5; if( a*(y2q-y1q)+b*(x1q-x2q)+x1q*(y1q-y2q)+y1q*(x2q-x1q)>0 ) { c++; } else if( a*(y2q-y1q)+b*(x1q-x2q)+x1q*(y1q-y2q)+y1q*(x2q-x1q)<0 ) c--; a=aa-0.5; b=bb+0.5; if( a*(y2q-y1q)+b*(x1q-x2q)+x1q*(y1q-y2q)+y1q*(x2q-x1q)>0 ) { c++; } else if( a*(y2q-y1q)+b*(x1q-x2q)+x1q*(y1q-y2q)+y1q*(x2q-x1q)<0 ) c--; if(abs(c)!=4) { printf("hello aa=%d bb=%d\n",aa,bb); mas[aa][bb].red=color.red; mas[aa][bb].green=color.green; mas[aa][bb].blue=color.blue; } if(abs(c)==3) { printf("hello aa=%d bb=%d\n",aa,bb); mas[aa][bb].red=color.red+100; mas[aa][bb].green=color.green+100; mas[aa][bb].blue=color.blue+100; } } //условие продолжения цикла //if(x1>x2) // aa--; //else // if(x2>x1) // aa++; //} //if(y1>y2) // bb--; //else // if(y2>y1) // bb++; //} } //--------------------------------------------------------------------------------------------------------------------------------------- int main() { //--------------Заполнение массива--------------------------------------------------------------------------- int deliteli[GRAN]; int r,r1,r2; for(r=0;r1) { while(r1%r2==0) { r1/=r2; deliteli[r]++; } r2++; } //printf("%d has %d divisors\n",r,deliteli[r]); } //------------------------------------------------------------------------------------------------------------ //memset(red,255,SHIRINA*VISOTA*3);//string.h заполняет первые 3072000 байт массива red нулями //----Заполняем всё белым цветом----------------------------------------------------------------------- for(r2=0;r2