📄 bezier.cpp
字号:
#include "stdio.h"
#include "graphics.h"
#include "conio.h"
#include "bios.h"
#include "stdlib.h"
#include "math.h"
#define esc 27
int tab=8,j;
main () {
int gd=VGA, gm=VGAHI; int i=0,key; int rowx=200,coly=200;
float rownum[4],colnum[4]; j=1;
initgraph(&gd,&gm,"c:\ \tc");
setwritemode(1); setbkcolor(13); setcolor(1); cleardevice();
putpixel (rowx,coly,15);
printf ("%c[25;30H %c[30;31m X=%d , Y=%d \b%c[0;0m",
esc,esc,rowx,coly,esc);
while ((key=getch())! =' q' ) {
if (key==9) {
if ((j++)==1) tab=1;
else {
tab=8; j=1;}
continue;}
if ((key==75) && (rowx>0)) rowx=rowx- tab;
else
if ((key==75) && (rowx<=0)) rowx=0;
if ((key==77) && (rowx<640)) rowx=rowx+tab;
else
if ((key==77) && (rowx>=640)) rowx=640;
if ((key==72) && (coly>0)) coly=coly- tab;
else
if ((key==72) && (coly<=0)) coly=0;
if ((key==80) && (coly<480)) coly=coly+tab;
else
if ((key==80) && (coly>480)) coly=coly- tab;
line (rowx,coly,rowx,coly);
printf("%c[25;30H %c[30;31m X=%d , Y=%d \b%c[0;0m",
esc,esc,rowx,coly,esc);
if (key==' \r' ) {
rownum[i]=rowx*1.0; colnum[i]=coly*1.0;
if ((++i)>=4) {
zgf(rownum,colnum);
i=0;}}
setwritemode(1);}}
bez3 (xd,yd)
float xd[],yd[];
{float x,y,startx,starty;
int k,n; float x0,x1,x2,x3,y0,y1,y2,y3,dt,t1,t2,t3;
n=16;
startx=x0=xd[0]; starty=y0=yd[0];
x1=3*(xd[1]- xd[0]);
x2=3*(xd[0]- 2*xd[1]+xd[2]);
x3=(xd[3]- xd[0])+3*(xd[1]- xd[2]);
y1=3*(yd[1]- yd[0]);
y2=3*(yd[0]- 2*yd[1]+yd[2]);
y3=(yd[3]- yd[0])+3*(yd[1]- yd[2]);
dt=1.0/n; setwritemode(0);
for (k=1;k<=n;k++) {
t1=k*dt;
t2=t1*t1;
t3=t2*t1;
x=(x0+x1*t1+x2*t2+x3*t3);
y=(y0+y1*t1+y2*t2+y3*t3);
line (startx,starty,x,y);
startx=x; starty=y;}}
zgf(dx,dy)
float dx[],dy[];
{int a[3]={8,6,0}; int b[4]={1,12,12,1}; int c[3]={0,6,8};
float t,t1,ux[3],uy[3],yx[4],yy[4]; int i,n=3;
dx[1]=27*dx[1]- dx[3]; dy[1]=27*dy[1]- dy[3];
dx[2]=27*dx[2]- dx[0]; dy[2]=27*dy[2]- dy[0];
ux[0]=c[0]/b[0]; uy[0]=c[0]/b[0];
yx[0]=dx[0]/b[0]; yy[0]=dy[0]/b[0];
for (i=1;i<n;i++) {
t=b[i]- ux[i- 1]*a[i- 1];
t1=b[i]- uy[i- 1]*a[i- 1];
ux[i]=c[i]/t; uy[i]=c[i]/t1;
yx[i]=(dx[i]- yx[i- 1]*a[i- 1])/t; yy[i]=(dy[i]- yy[i- 1]*a[i- 1])/t1;
}
yx[n]=(dx[n]- yx[n- 1]*a[n- 1])/(b[n]- ux[n- 1]*a[n- 1]);
yy[n]=(dy[n]- yy[n- 1]*a[n- 1])/(b[n]- uy[n- 1]*a[n- 1]);
for (i=n;i>0;i- - ) {
yx[i- 1]=yx[i- 1]- ux[i- 1]*yx[i]; yy[i- 1]=yy[i- 1]- uy[i- 1]*yy[i];
}
for (i=0;i<=n;i++) {
dx[i]=yx[i]; dy[i]=yy[i];}
bez3(dx,dy);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -