个性化阅读
专注于IT技术分析

计算机图形程序实例

编写一个程序来绘制基本的图形构造, 如直线, 圆, 弧, 椭圆和矩形。

#include<graphics.h>
#include<conio.h>
void main()
{
	intgd=DETECT, gm;
	initgraph (&gd, &gm, "c:\\tc\\bgi");
	setbkcolor(GREEN);
	printf("\t\t\t\n\nLINE");
	line(50, 40, 190, 40);
	printf("\t\t\n\n\n\nRECTANGLE");
	rectangle(125, 115, 215, 165);
	printf("\t\t\t\n\n\n\n\n\n\nARC");
	arc(120, 200, 180, 0, 30);
	printf("\t\n\n\n\nCIRCLE");
	circle(120, 270, 30);
	printf("\t\n\n\n\nECLIPSE");
	ellipse(120, 350, 0, 360, 30, 20);
	getch();
}

输出量

计算机图形学程序

编写程序以使用填充有不同颜色和图案的递增圆形绘制动画。

#include<graphics.h>
#include<conio.h>
void main()
{
	intgd=DETECT, gm, i, x, y;
	initgraph(&gd, &gm, "C:\\TC\\BGI");
	x=getmaxx()/3;
	y=getmaxx()/3;
	setbkcolor(WHITE);
	setcolor(BLUE);
	for(i=1;i<=8;i++)
          {
		setfillstyle(i, i);
		delay(20);
		circle(x, y, i*20);
		floodfill(x-2+i*20, y, BLUE);
	}
	getch();
	closegraph();
}

输出量

计算机图形学程序

程序制作屏幕保护程序, 以显示在随机位置填充不同颜色的不同尺寸的圆圈。

#include<stdio.h>
#include<conio.h>
#include"graphics.h"
#include"stdlib.h"
void main()
{
	intgd=DETECT, gm, i=0, x, xx, y, yy, r;
	//Initializes the graphics system
	initgraph(&gd, &gm, "c:\\tc\\bgi");
	x=getmaxx();
	y=getmaxy();
	while(!kbhit())
	{
		i++;
	  //	setfillstyle(random(i), random(30));

		circle(xx=random(x), yy=random(y), random(30));
		setfillstyle(random(i), random(30));
		floodfill(xx, yy, getmaxcolor());
		delay(200);
	}
	getch();
}

输出量

计算机图形学程序

编写一个程序, 以使用内置功能制作移动彩色汽车。

#include<graphics.h>
#include<conio.h>
int main()
{
	intgd=DETECT, gm, i, maxx, cy;
	initgraph(&gd, &gm, "C:\\TC\\BGI");
	setbkcolor(WHITE);
	setcolor(RED);
	maxx = getmaxx();
	cy = getmaxy()/2;
	for(i=0;i<maxx-140;i++)
        {
		cleardevice();
		line(0+i, cy-20, 0+i, cy+15);
		line(0+i, cy-20, 25+i, cy-20);
		line(25+i, cy-20, 40+i, cy-70);
		line(40+i, cy-70, 100+i, cy-70);
		line(100+i, cy-70, 115+i, cy-20);
		line(115+i, cy-20, 140+i, cy-20);
		line(0+i, cy+15, 18+i, cy+15);
		circle(28+i, cy+15, 10);
		line(38+i, cy+15, 102+i, cy+15);
		circle(112+i, cy+15, 10);
		line(122+i, cy+15 , 140+i, cy+15);
		line(140+i, cy+15, 140+i, cy-20);
		rectangle(50+i, cy-62, 90+i, cy-30);
		setfillstyle(1, BLUE);
		floodfill(5+i, cy-15, RED);
		setfillstyle(1, LIGHTBLUE);
		floodfill(52+i, cy-60, RED);
		delay(10);
         }
	getch();
	closegraph();
	return 0;
}

输出量

计算机图形学程序
计算机图形学程序

在C的控制台输出上编写程序以印地文脚本打印你的姓名。

#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<dos.h>
void main()
{	
	int gd=DETECT, gm;
	initgraph(&gd, &gm, "c:\\tc\\bgi");
	setbkcolor(9);
	line(100, 100, 370, 100);
	
	line(120, 100, 120, 170);
	arc(143, 100, 0, 180, 23);
	line(165, 100, 165, 155);
	arc(150, 155, 100, 0, 15);
	line(180, 100, 180, 170);

	circle(210, 140, 10);
	line(210, 130, 250, 130);

	circle(280, 140, 10);
	line(280, 130, 330, 130);
	line(330, 100, 330, 170);
	line(345, 100, 345, 170);
	ellipse(337, 100, 0, 180, 9, 18);
	getch();
}

输出量

计算机图形学程序

使用箭头键编写一个程序控制球。

#include<graphics.h>
#include<stdio.h>
void main()
{
	intgd=DETECT, gm, x, y, r=40;
	charch;
	initgraph(&gd, &gm, "C:/TURBOC3/BGI");
	setbkcolor(3);
	x=getmaxx()/2;
	y=getmaxy()/2;
	setfillstyle(1, RED);
	circle(x, y, r);
	floodfill(x, y, getmaxcolor());
	while((ch=getch())!=13)
      {
		switch(ch)
                     {
			case 75:	if(x>=r+1)
                                {
					cleardevice();
					circle(x-=10, y, r);
					floodfill(x, y, getmaxcolor());
	                      }
				break;
			case 72:	if(y>=r+1)
                                {
					cleardevice();
					circle(x, y-=10, r);
					floodfill(x, y, getmaxcolor());
                                  }
				break;
			case 77:	if(x<=(getmaxx()-r-10))
                               {
					cleardevice();
					circle(x+=10, y, r);
					floodfill(x, y, getmaxcolor());
                                }
 		 		break;
			case 80:	if(y<=(getmaxy()-r-10))
                               {
					cleardevice();
					circle(x, y+=10, r);
					floodfill(x, y, getmaxcolor());
		         }
		}
	}
	getch();
}

输出量

计算机图形学程序

编写程序以实现数字时钟。

#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<dos.h>

struct time t;
void display(int, int, int);
void main()
{
	int i=0, gd=DETECT, gm, hr, min, sec;
	clrscr();
	initgraph(&gd, &gm, "c:\\turboc3\\bgi");
	setcolor(GREEN);
	settextstyle(4, 0, 7);

	while(!kbhit())
	{
	   gettime(&t);
	   hr=t.ti_hour;
	   min=t.ti_min;
	   sec=t.ti_sec;
	   i++;

	   display(100, 100, hr);
	   display(200, 100, min);
	   display(300, 100, sec);
              sound(400);
	   delay(30);
	   nosound();
	   delay(930);
	   cleardevice();
	}
	getch();
}
void display(int x, int y, int num)
{

	 char str[3];
	 itoa(num, str, 10);

	 settextstyle(4, 0, 7);

	 outtextxy(180, 100, ":");
	 outtextxy(280, 100, ":");
	 outtextxy(x, y, str);

	 rectangle(90, 90, 380, 200);
	 rectangle(70, 70, 400, 220);

	 outtextxy(90, 250, "Digital Clock");
}

输出量

计算机图形学程序

编写程序制作益智游戏。

#include<iostream.h>
#include<dos.h>
#include<conio.h>
 #include<graphics.h>
#include<stdio.h>

int a[5][5];
int t[16]={0, 4, 11, 12, 7, 1, 15, 5, 13, 6, 10, 3, 2, 14, 8, 9};
int test[16]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};

struct pos
     {
       int h, v;
     }
	p[4][4];
 int row=4, col=4;

void game(int); //MOVEMENT
void rec();   //DRAWING RECTANGLE
void pri();   //PRINTING NUMBERS INITIALLY
int getkey();   // TO TRACE KEY PRESSED
inline void space() 
   {
         cout<<""; 
   }
inline void print(int r, int c) 
   { 
          cout<<a[r][c]; 
   }
void init();   //TO STORE CO-ORDINATES
int stop();     // STOPING CRITERION
void gopr(int, int);   //TO PRINT NUMBER IN GAME

 void main()
{
     int gm=DETECT, gd=DETECT;
     initgraph(&gm, &gd, "c:\\turboc3\\bgi");

      int d, cr=1;
      init();
      rec();
      print();

      while(cr!=16)
    {
          d=getkey();
       game(d);
      cr=stop();
  }

  settextstyle(10, 0, 1);
  outtextxy(400, 300, "You are winner!");
  getch();

}
void rec()
{
        setcolor(5);

        for(int i=0;i<200;i+=50)
     {
        for(int j=0;j<240;j+=60)
        rectangle(j+100, i+100, j+50, i+60);
     }

  }

   void pri()
  {
         int k=1;
         for(int x=0, i=6;x<4;x++, i+=3)
    {
         for(int y=0, j=10;y<4&&k<16;y++, j+=7, k++)
        {

         gotoxy(p[x][y].h, p[x][y].v);
         cout<<a[x][y];
        }
    }

  }

      int getkey()
  {
      union REGS i, o;
      while(!kbhit());
       i.h.ah=0;
      int86(22, &i, &o);
      return(o.h.ah);
  } 

     void init()
 {
            int k=1;
            for(int x=0, i=6;x<4;x++, i+=3)
      {
            for(int y=0, j=10;y<4;y++, j+=7)
         {
             p[x][y].h=j;
             p[x][y].v=i;
             a[x][y]=t[k++];
          }
      }

   }

     void game(int s)
  {
	   int r=row-1;
	   int c=col-1;

	    if(s==77 &&c!=0)  //right
	  {
		col--;

	     a[r][c]=a[r][c-1];
               gopr(r, c-1);
               space();
               gopr(r, c);
               print(r, c-1);
              }
             if(s==80 && r!=0)   //down
	  {
	     row--;
               a[r][c]=a[r-1][c];
               gopr(r-1, c);
               space();
               gopr(r, c);
               print(r-1, c);
            }

	      if(s==75 && c!=3)     //left
	 {
	      a[r][c]=a[r][c+1];
	    col++;
	    gopr(r, c+1);
              space();
              gopr(r, c);
                print(r, c+1);

	 }

	    if(s==72 &&r!=3)     //up
	 {

	    a[r][c]=a[r+1][c];
               row++;
               gopr(r+1, c);
               space();
               gopr(r, c);
               print(r+1, c);

           }
 }

	void gopr(int x, int y)
       {
	 gotoxy(p[x][y].h, p[x][y].v);
       }


           int stop()
    {
          int k=0, d=1;
          for(int x=0;x<4;x++)
      {
          for(int y=0;y<4;y++)
         {
	 if(a[x][y]==test[k])
	   d++;
             k++;
          }
      }
       return d;
   }

输出量

计算机图形学程序
计算机图形学程序

编写程序以使用正弦波形实现弹跳球。

#include<stdio.h>
#include<graphics.h> 
#define HEIGHT getmaxy()
#define WIDTH getmaxx()
#define GROUND 450
#define MAXHEIGHT 420 
void main()
{
        int x, y=0, t=MAXHEIGHT, c=1;
        int gd=DETECT, gm;
       initgraph(&gd, &gm, "C:\\T urboC3\\BGI"); 
      for(x=40;x<=getmaxx();x=x+2)
 {
     //Draw Ground
     rectangle (0, MAXHEIGHT, getmaxx(), MAXHEIGHT+5);
     floodfill (5, MAXHEIGHT+3, WHITE);
    //Draw Ball
   pieslice(x, y, 0, 360, 20);
   //floodfill(x, y, RED);
   delay(100);
   if(y>MAXHEIGHT-20)
     {
         c=0;
         t=t-40;
     }
     if(y<=(MAXHEIGHT-t))
    {
           c=1;
     }
        if(t>=40)
       y=y+(c? 15:-15); 
       cleardevice();
       //Exit upon keypress
       if(kbhit())
       break;
}
getch();
}

输出量

计算机图形学程序

编写一个程序来实现垂直方向的弹跳球。

#include <stdio.h>
#include <conio.h>
#include <graphics.h>
#include <dos.h>
 
int main() 
{
          int gd = DETECT, gm;
          int i, x, y, flag=0;
          initgraph(&gd, &gm, "C:\\TC\\BGI");
 
         x = getmaxx()/2;
         y = 30;
        while (!kbhit()) 
      {
            if(y >= getmaxy()-30 || y <= 30)
           flag = !flag;
           /* draws the gray board */
           setcolor(RED);
           setfillstyle(SOLID_FILL, RED);
           circle(x, y, 30);
           floodfill(x, y, RED);
 
          delay(50); 
          cleardevice();
          if(flag)
      {
           y = y + 5;
      } 
          else
     {
          y = y - 5;
      }
  }
 
    getch();
    closegraph();
    return 0;
}

输出量

计算机图形学程序

使用复合转换编写一个平移, 旋转和缩放的程序。

#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>
int x1, y1, x2, y2, x3, y3, a, b;
void draw();
void rotate();
int main(void)
{
int gd=DETECT, gm;
initgraph(&gd, &gm, "C:\\TC\\BGI");
printf("Enter first co-ordinate value for triangle:");
scanf("%d%d", &x1, &y1);
printf("Enter second co-ordinatevalues for triangle:");
scanf("%d%d", &x2, &y2);
printf("Enter third co-ordinate valuesfor triangle:");
scanf("%d%d", &x3, &y3);
draw();
getch();
rotate();
getch();

return 0;
}

void draw()
{
  line(x1, y1, x2, y2);
  line(x2, y2, x3, y3);
  line(x3, y3, x1, y1);
}
 void rotate()
 {
	int a1, a2, a3, b1, b2, b3;
	float angle;
	printf("Enter the rotation angle co-ordinates:");
	scanf("%f", &angle);
	cleardevice();
	  angle=(angle*3.14)/180;
	  a1=a+(x1-a)*cos(angle)-(y1-b)*sin(angle);
	  b1=b+(x1-a)*sin(angle)+(y2-b)*cos(angle);
	  a2=a+(x2-a)*cos(angle)-(y1-b)*sin(angle);
	  b2=b+(x2-a)*sin(angle)+(y2-b)*cos(angle);
	  a3=a+(x3-a)*cos(angle)-(y1-b)*sin(angle);
	  b3=b+(x3-a)*sin(angle)+(y2-b)*cos(angle);
	  printf("ROTATION");
	  printf("\n Changed coordinates\n");
	  printf("%d %d\n%d %d\n%d %d", a1, b1, a2, b2, a3, b3);
	line(a1, b1, a2, b2);
	line(a2, b2, a3, b3);
	line(a3, b3, a1, b1);
 }

输出量

计算机图形学程序
计算机图形学程序

编写程序以使用中点实现方法绘制圆。

#include<stdio.h>
#include<graphics.h>
 
void drawcircle(int x0, int y0, int radius)
{
    int x = radius;
    int y = 0;
    int err = 0;
 
    while (x >= y)
    {
	putpixel(x0 + x, y0 + y, 7);
	putpixel(x0 + y, y0 + x, 7);
	putpixel(x0 - y, y0 + x, 7);
	putpixel(x0 - x, y0 + y, 7);
	putpixel(x0 - x, y0 - y, 7);
	putpixel(x0 - y, y0 - x, 7);
	putpixel(x0 + y, y0 - x, 7);
	putpixel(x0 + x, y0 - y, 7);
           if (err <= 0)
	{
	    y += 1;
	    err += 2*y + 1;
	}
 
	if (err > 0)
	{
	    x -= 1;
	    err -= 2*x + 1;
	}
    }
}
 void main()
{
	int gdriver=DETECT, gmode, error, x, y, r;
	initgraph(&gdriver, &gmode, "c:\\turboc3\\bgi");
           printf("Enter radius of circle: ");
	scanf("%d", &r);
 
	printf("Enter co-ordinates of center(x and y): ");
	scanf("%d%d", &x, &y);
	drawcircle(x, y, r);
	getch();
}

输出量

计算机图形学程序

编写程序以绘制贝塞尔曲线。

#include <stdio.h>
#include <stdlib.h>
#include <graphics.h>
#include <math.h>

void bezier (int x[4], int y[4])
{
    int gd = DETECT, gm;
    int i;
    double t;
    initgraph (&gd, &gm, "C:\\tc\\bgi");

    for (t = 0.0; t < 1.0; t += 0.0005)
    {
	double xt = pow (1-t, 3) * x[0] + 3 * t * pow (1-t, 2) * x[1] +
		    3 * pow (t, 2) * (1-t) * x[2] + pow (t, 3) * x[3];

	double yt = pow (1-t, 3) * y[0] + 3 * t * pow (1-t, 2) * y[1] +
		    3 * pow (t, 2) * (1-t) * y[2] + pow (t, 3) * y[3];

	putpixel (xt, yt, WHITE);
    }
  for (i=0; i<4; i++)
	putpixel (x[i], y[i], YELLOW);

    getch();
    closegraph();
    return;
}

void main()
{
    int x[4], y[4];
    int i;
    printf ("Enter the x- and y-coordinates of the four control points.\n");
    for (i=0; i<4; i++)
   scanf ("%d%d", &x[i], &y[i]);
    bezier (x, y);
 }

输出量

计算机图形学程序
计算机图形学程序

程序围绕其中点旋转矩形

#include<iostream.h>
#include <stdio.h>
#include<conio.h>
#include<graphics.h>
#include<stdlib.h>
#define pi 3.14
class arc
{
	float x[10], y[10], theta, h1, k1, r[0][10], ang;
	float p[10][10], p1[10][10], x1[10], y1[10], xm, yx;
	int i, k, j, n;
	public:
	void get();
	void cal();
	void map();
	void graph();
	void plot();
	void plot1();
};
void arc::get()
{
	cout "<<"\n ENTER ANGLE OF ROTATION ";
           cin>>ang;
           n = 4;
           cout<<"\n ENTER";
         for (i=0; i<n; i++)
         {
               cout<<"\n x["<i<<"] and y["<<i<<"]";
                cin>>x[i]>>y[i];
         }
         h1=x [0] + (([1]-x[0])/2);
         k1=y[0]+(([3]-y[0])/2);
         cout<<"\n MIDPOINT OF RECTANGLE IS--"<<h1<<"\t"<<k1;
         theta=(ang*pi)/180?;
         r[0][0]=cos (theta);
         r[0][1]= -sin?(theta);
         r[0][2]=(-h1*cos(theta))+(k1*sin(theta)+h1;
         r[1][0]=sin (theta);
         r [1][1]=cos (theta);
         r [1][2]=(-h1*sin(theta))+(-k1*cos(theta)+k1;
         r[2][0]=0;
         r[2][1]=0;
         r[2][2]=1;
}
void arc ::cal()
{
	for(i=0;i<n;i++)
	{
		p[0][i]=x[i];
		p[1][i]=y[i];
		p[2][i]=1;
	}
	for(i=0;i<3;i++)
	{
		for(j=0;j<n;j++)
		{
			p1[i][j]=0;
		           for (k=0;k<3;k++)
			{
				p1[i][j]+=r[i][k]*p[k][j];
			}
		}
	}
	for(i=0;i<n;i++)
	{
		x1[i]=p1[0][i];
		y1[i]=p[1][i];
	}
}
void arc::map()
{
	int gd=DETECT, gm;
	initgraph (&gd, &gm, "");
	int errorcode = graphresult();
	/*an error occurred */
           if (errorcode!=grOK)
	{
		printf("Graphics error: %s \n", grapherrormsg (errorcode));
                      printf("Press and key to halt: ");
                      getch();
                      exit(1); /* terminate with an error code */
            }
}
void arc::graph()
{
	xm=getmaxx()/2;
	ym=getmaxy()/2;
	line (xm, 0, xm, 2 * ym);
	line (0, ym, 2 * xm, ym);
}
void arc :: plot 1()
{
	for (i=0;i<n-1;i++)
	{
		circle (x1[i]+xm, (-y1[i]+ym), 2);
		line (x1[i]+xm, (-y1[i]+ym), x[i+1] xm, (-y1[0]+ym));
	}
	line (x1[n-1] +xm, (-y1[n-1]+ym), x1[0]+xm, (-y1[0]+ym));
	getch();
}
void arc :: plot ()
{
	for (i=0;i<n-1;i++)
	{
		circle (x[i]+xm, (-y[i]+ym), 2);
		line (x[i]+xm, (-y[i]+ym), x[i+1] xm, (-y[i+1]+ym));
	}
	circle (x[n-1]+xm, (-y[n-1]+ym), 2);
	line (x[n-1]+xm, (-y[n-1]+ym), x[0]+xm, (-y[0]+ym));
	getch();
}
void main ()
{
	class arc a;
	clrscr();
	a.map();
	a.graph();
	a.get();
	a.cal();
	a.plot();
	a.plot1();
	getch();
}

输出量

计算机图形学程序

程序使用Liang Barsky方法剪切线

#include<iostream.h>
#include <stdio.h>
#include<conio.h>
#include<graphics.h>
#include<process.h>
class liang
{
	float x1, x2, y1, y2, u1, u2, dx, dy, xm, ym;
	float xmin, ymin, xmax, ymax, p[4], q[4], r[5], r[5];
	int gd, gm, test, s, k;
	public:
	void clipliang();
	void get();
	void map();
	void graph();
};
void liang :: map()
{
	gd=DETECT;
	initgraph (&gd, &gm, "");
	int errorcode = graphresult();
	/*an error occurred */
           if (errorcode!=grOK)
	{
		printf("Graphics error: %s \n", grapherrormsg (errorcode));
                      printf("Press and key to halt: ");
                      getch();
                      exit(1); /* terminate with an error code */
            }
}
void liang::graph()
{
	xm=getmaxx()/2;
	ym=getmaxy()/2;
	line (xm, 0, xm, 2 * ym);
	line (0, ym, 2 * xm, ym);
}
void liang :: get()
{
	cout<<"\n ENTER WINDOW COORDINATES xwmin, ywmin, xwmax, ywmax";
	cin>>xmin>>ymin>>xmax>>ymax>>;
	rectangle (xmin+xm, -ymin+ym, xmax+xm, -ymax+ym);
       //  rectangle (320+xwmin, 240-ywmax, 320+xwmax, 240-ywmin);
           cout<<"\n ENTER END POINTS OF LINE (x1, y1)(x2, y2) ";
           cin>>x1>>y1>>x2>>y2;
	line (x1+xm, -y1+ym, x2+xm, -y2+ym);
	getch();
}
       // line (x1, y1, x2, y2);
void liang :: clipliang()
{
	float x=0, y=1;
	dx=x2-x1;
	dy=y2-y1;
	p[0]=-dx;
	p[1]=dx;
	p[2]=-dy;
	p[3]=dy;
	q[0]=x1-xmin;
	q[1]=xmax-x1;
	q[2]=y1-ymin;
	q[3]=ymax-y1;
	for (k=0;k<4;k++)
	{
		if (p[k]==0&&q[k]<0)
		{
			cout<<"\n OUTSIDE";
                                 getch();
                                 exit(0);
                      }
                       if (p[k]<0)
	           {
			r[k]=q[k]/p[k];
			if (r1[k]<y)
			   y=r1[k];
		          u2=y;
		}
	}
		if (u1>u2)
		{
			cout<<"\n COMPLETE OUTSIDE WINDOW";
                                 getch();
                                 exit(0);
                        }
void main ()
{
	liang1;
	clrscr();
	l.map();
	l.graph();
	l.get();
	l.clipliang();
	getch();
}

输出量

计算机图形学程序

用于实现3维标准透视投影的程序。

#include<iostream.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#define pi 3.14
class per
{
	float x[10], y[10], z [10], d;
	float x1 [10], y1[10], xm, ym, z1 [10];
	int i, k, j, n;
	public:
	void get();
	void perpro();
	void map();
	void graph();
	void plot1();
}
void per::get()
{
	cout<< "\n ENTER OF VERTICES";
            cin>>n;
	cout<<"\n ENTER";
            for (i=0;i<n;i++)
	{
		cout<<"\n x["?i<<"], y["<<i<<"] and z ["<<i<<"]";
		cin>>x[i]>>y[i]>>z[i];
	}
		cout<<"\n ENTER WIDTH FOR Z-AXIS-d";
		cin>>d;
}
void per:: perpro()
{
	for(i=0;i<n;i++)
	{
		x1[i]=(d*x[i])/(z[i]+d);
		y1[i]=(d*y[i])/(z[i]+d);
		z1[i]=0;
	}
	cout<< "\n ENTER PROJECTION, VERTICES OF POLYGON ARE--";
            for(i=0;i<n;i++)
	{
		cout<<"x?["<<i<<"]="<<x1[i]<< "\t";
		cout<<"y?["<<i<<"]="<<y1[i]<< "\t";
		cout<<"z?["<<i<<"]="<<z1[i]<< "\t";
		cout<<"\n";
	}
}
void per :: map()
{
	int gd=DETECT;
	initgraph (&gd, &gm, "");
	int errorcode = graphresult();
	/*an error occurred */
           if (errorcode!=grOK)
	{
		printf("Graphics error: %s \n", grapherrormsg (errorcode));
                      printf("Press and key to halt: ");
                      getch();
                      exit(1); /* terminate with an error code */
            }
}
void per::graph()
{
	xm= get maxx()/2;
	ym=get maxy()/2
	line (xm, 0, xm, 2 * ym);
	line (0, ym, 2 * xm, ym);
}
void per::plot1()
{
	for(i=0;i<n-1;i++)
	{
		line(x1[i]*100+xm, (-y1[i]*100+ym), x1[i+1]*100+xm, (-y1[i+1]*100+ym));
	}
line(x1[n-1]*100+xm, (-y1[n-1]*100+ym), x1[0]*100+xm, (-y1[0]*100+ym));
	getch();
}
void main()
{
	class per a;
	clrscr();
	a.map();
	a.graph();
	a.get();
	a.perpro();
	a.graph();
	a.plot1();
	getch();
}

输出量

计算机图形学程序

实现3维平行投影的程序。

#include<iostream.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#define pi 3.14
class per
{
	float x[10], y[10], z [10], d, m[10], q1[10], r1[10], m1[10];
	float x1 [10], y1[10], xm, ym, z1 [10], cav[4] [4], p[10] [10];
	float p1[10] [10];
	float a, b, c, ang, theta, f;
	int i, k, j, n;
	public:
	void get();
	void par_v();
	void par_vnr0();
	void map();
	void graph();
	void project(float m[], float q[], float r[]);
};
void per:: perproject(float m[], float q[], float r[])
{
	cout<<"\n ENTER WIDTH FOR Z-AXIS d";
	cin>>d;
	cout<< "\n AFTER PROJECTION, VERTICES OF POLYGON ARE--";
            for(i=0;i<n;i++)
	{
		cout<<"x?["<<i<<"]="<<x1[i]<< "\t";
		cout<<"y?["<<i<<"]="<<y1[i]<< "\t";
		cout<<"z?["<<i<<"]="<<z1[i]<< "\t";
		cout<<"\n";
	}
	getch();
	clearviewport();
	graph();
	for(i=0;i<n-1;i++)
	{
		line(m[i]*100+xm, (-q[i]*100+ym), m[i+1]*100+xm, (-n1[i+1]*100+ym));

            }
	line(m[n-1]*100+xm, (-q[n-1]*100+ym), m[0]*100+xm, (-q[0]*100+ym));
getch();
}
void per::get()
{
	cout<< "\n ENTER OF VERTICES";
            cin>>n;
	cout<<"\n ENTER";
            for (i=0;i<n;i++)
	{
		cout<<"\n x["?i<<"], y["<<i<<"] and z ["<<i<<"]";
		cin>>x[i]>>y[i]>>z[i];
	}
		cout<<"\n ENTER WIDTH FOR Z-AXIS-d";
		cin>>d;
		int ch=100;
		do
		{
			cout<< "\n 1->orthographic projection";
                                cout<<"\n 2->oblique projection";
                                cout<<"\n 0-> exit";
			cout<<"\n enter ch";
			cin>>ch;
			switch (ch)
			{
				case1:
					int ch1=100;
				do
				{
					cout<<"\n 1->for xy viewplane";
					cout<<"\n 2->for yz viewplane";
					cout"\n 3->for zx viewplane";
					cout<<"\n 0->exit";
					cout<<"\n enter ch1";
					cin>>ch1;
					switch(ch1)
					{
						case1:
							x1[i]=x[i];
							y1[i]=y[i];
							z1[i]=0;
							project(x1, y1, z1);
							break;
						case2:
							x1[i]=0;
							y1[i]=0;
							z1[i]=z[i];
							project(x1, y1, z1);
							break;
						case3:
							x1[i]=x[i];
							y1[i]=0;
							z1[i]=z[i];
							project(x1, y1, z1);
							break;
					}
				}
			while (ch!=0)
			     break;
		           case2:
				ch1=100;
				do
				{
					cout<<"\n 1->on xy plane";
					cout<<"\n 2->cavalier";
					cout<<"\n 0->exit";
					cout<<"\n enter ch1";
					cin>>ch1;
					switch(ch1)
					{
						case1:
							par_v();
							break;
						case2:
							par_vnr0();
							break();
					}
					while(ch!=0);
					break;
				}
				while(ch!=0)
			}
	void per::par_v()
	{
		cout<<"\n enter v (a, b, c) "	;
		cin>>a>>b>>c;
		for(i=0; i<n;i++)
		{
			x1[i]=x[i]-((a*z[i]/c);
			y1[i]=y[i]-((b*z[i]/c);
			project(x1, y1, z1);
		}
         }
        void per::par_vnr0()
        {
		cout<<"\n enter f";
		cin>>f;
		cout<<"\n enter angle";
		cin>>angle;
		theta= ((pi/180)* ang);
		for(i=0;i<4;i++)
		{
			for(j=0;j<4;j++)
			{
				if(i==j)
				cav[i] [j]=1;
				else
					cav[i] [j]=0;
			}
		}
		cav[0] [2]=f*cos(theta);
		cav[1][2]=f*sin (theta);
		cav[2][2]=0;
		for(i=0;i<n;i++)
		{
			p[0][i]=x[i];
			p[1][i]=y[i];
			p[2][i]=z[i];
			p[3][i]=1;
		}
		for(i=0;i<4;i++)
		{
			for(j=0;j<n;j++)
			{
				p1[i][j]=0;
				for(k=0;k<4;k++)
				{
					p1[i][j]+=cav[i][k]*p[k][j];
				}
			}
		}
		for(i=0;i<n;i++)
		{
			x1[i]=p1[0][i];
			y1[i]=p1[1][i];
			z1[i]=p1[i];
		}
		project(x1, y1, z1);
        }
void per :: map()
{
	int gd=DETECT;
	initgraph (&gd, &gm, "");
	int errorcode = graphresult();
	/*an error occurred */
           if (errorcode!=grOK)
	{
		printf("Graphics error: %s \n", grapherrormsg (errorcode));
                      printf("Press and key to halt: ");
                      getch();
                      exit(1); /* terminate with an error code */
            }
}
void per::graph()
{
	xm= get maxx()/2;
	ym=get maxy()/2
	line (xm, 0, xm, 2 * ym);
	line (0, ym, 2 * xm, ym);
}
void main()
{
	class per a;
	clrscr();
	a.map();
	a.get();
	getch();
}

输出量

计算机图形学程序

绘制正弦, 余弦和正切曲线的程序

#include<iostream.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#define pi 3.14
class arc
{
	float x, y, a, xm, ym;
	int i, ch;
	public:
	void get();
	void map();
	void sine();
	void cosine();
	void tangent();
};
void arc::get()
{
	cout<<"\n ENTER THE MAXIMUM VALUE FOR Y";
           cin>>y;
           cout<<"\n MENU IS---------";
	cout<<"\n 1-> SINE CURVE";
           cout<<"\n 2->COSINE CURVE";
	cout<<"\n 3-> TANGENT CURVE";
	cout<<"\n 4-> EXIT";
	cout<<"\n ENTER YOUR CHOICE";
           cin>>ch;
           switch(ch)
           {
                     case1:
			sine();
			break();
		case2:
			cosine();
		case3:
			tangent();
		case4:
			exit(0);
	}
}
void arc::sine()
{
	cleardevice();
	xm=getmaxx()/2;
	ym=getmaxy()/2;
	line(xm, 0, xm, 2*ym);
	line(0, ym, 2 *xm, ym);
	outtextxy(0, ym, "X-AXIS");
           outtextxy(xm, 0, "Y-AXIS");
	for(x=-300;x<=300;x=x+0.5)
	{
		y=a*sin((pi*x)/180);
		putpixel(x+(320), -y+240, RED);
	}
}
void arc::cosine()
{
	cleardevice();
	xm=getmaxx()/2;
	ym=getmaxy()/2;
	line(xm, 0, xm, 2*ym);
	line(0, ym, 2 *xm, ym);
	outtextxy(0, ym, "X-AXIS");
           outtextxy(xm, 0, "Y-AXIS");
	for(x=-300;x<=300;x=x+0.5)
	{
		y=a*cos((pi*x)/180);
		putpixel(x+(320), -y+240, RED);
	}
}
void arc :: map()
{
	int gd=DETECT, gm;
	initgraph (&gd, &gm, "");
	int errorcode = graphresult();
	/*an error occurred */
           if (errorcode!=grOK)
	{
		printf("Graphics error: %s \n", grapherrormsg (errorcode));
                      printf("Press and key to halt: ");
                      getch();
                      exit(1); /* terminate with an error code */
            }
}
void main()
{
	class arc a;
	clrscr();
	a.map();
	a.get();
	getch();
}

输出量

计算机图形学程序

赞(0)
未经允许不得转载:srcmini » 计算机图形程序实例

评论 抢沙发

评论前必须登录!