计算机图形学源程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中点画线法:
#include <graphics.h>
#include <math.h>
#include <conio.h>
#include <stdio.h>
void MidPoint_Line(int x0,int y0,int x1,int y1,int color); main()
{
int driver=DETECT,mode;
int x0,y0,x1,y1,color;
initgraph(&driver,&mode,"");
setbkcolor(2);
MidPoint_Line(0,0,200,200,1);
getch();
closegraph();
}
void MidPoint_Line(x0,y0,x1,y1,color)
int x0,y0,x1,y1,color;
{ int a,b,delta1,delta2,d,x,y;
a=y0-y1;
b=x1-x0;
d=2*a+b;
delta1=2*a;
delta2=2*(a+b);
x=x0;
y=y0;
putpixel(x,y,color);
while(x<x1)
{ if(d<0)
{ x++; y++;
d+=delta2;
}
else
{ x++;
d+=delta1;
}
putpixel(x,y,color);
}
}
Bresenham算法:
#include <graphics.h>
#include <math.h>
#include <conio.h>
#include <stdio.h>
void Bresenham_Line(int x0,int y0,int x1,int y1,int value); main()
{
int driver=DETECT,mode;
int x0,y0,x1,y1,color;
initgraph(&driver,&mode,"");
setbkcolor(2);
Bresenham_Line(0,0,200,200,1);
getch();
closegraph();
}
void Bresenham_Line(int x0,int y0,int x1,int y1,int value) {
int dx=abs(x0-x1),dy=abs(y0-y1);
int d=2*dy-dx;
int twody=2*dy,twodydx=2*(dy-dx);
int x,y,xend;
if (x0>x1)
{x=x1;
y=y1;
xend=x0;
}
else
{x=x0;
y=y0;
xend=x1;
}
putpixel(x,y,value);
while(x<xend)
{
x++;
if(d<0)
d+=twody;
else
{
y++;
d+=twodydx;
}
putpixel(x,y,value);
}
}
分享到:
中点画圆算法(C语言)
#include "stdio.h"
#include "graphics.h"
void circlepoint(int x,int m,int n,int y) {
putpixel(x+m,y+n,4);
putpixel(y+m,x+n,4);
putpixel(y+m,n-x,4);
putpixel(x+m,n-y,4);
putpixel(m-y,n+x,4);
putpixel(m-y,n-x,4);
putpixel(m-x,n-y,4);
putpixel(m-x,y+n,4);
}
void midpointcircle(int m,int n,int r) {int x=0;
int y=r;
int d=1-r;
int d1=3;
int d2=2-r-r;
circlepoint(x,m,n,y);
while(x<y)
{if(d<0)
{d+=d1;
d1+=2;
}
else
{
d+=(d1+d2);
d1+=2;
d2+=2;
y--;
}
x++;
circlepoint(x,m,n,y);
}
}
main()
{int r,x,y;int drive,mode;
drive=DETECT;
initgraph(&drive,&mode,"c:\\turboc2");
printf("intput the int R and the center of the circle:\n"); scanf("%d%d%d",&x,&y,&r);
midpointcircle(x,y,r);
getch();} /*程序不足之处请指教*/
三次bezer曲线
#include"dos.h"
#include"bios.h"
#include"graphics.h"
#include"math.h"
main()
{int driver,mode,n,i, p1x,p1y,p2x,p2y,p3x,p3y,p4x,p4y;
float x,y;
double d,d1, f1,f2,f3,f4;
driver=DETECT;
mode=DETECT;
initgraph(&driver,&mode,"d:\\tc3");
p1x=150;p1y=150;
p2x=300;p2y=180;
p3x=400;p3y=160;
p4x=250;p4y=50;
n=200;
d=1.0/n;
d1=d;
line(150,150,300,180);
line(300,180,400,160);
line(400,160,250,50);
moveto(p1x,p1y);
for(i=0;i<=n;i++)
{
f1=(1.0-d1)*(1.0-d1)*(1.0-d1);
f2=3.0*d1*(1.0-d1)*(1.0-d1);
f3=3.0*d1*d1*(1.0-d1);
f4=d1*d1*d1;
x=f1*p1x+f2*p2x+f3*p3x+f4*p4x;
y=f1*p1y+f2*p2y+f3*p3y+f4*p4y;
lineto((int)x,(int)y);
d1+=d;}
getch();
closegraph();
}。