{
int deg=8float coeffx[9]={200,50,100,150,200,250,300,350,200}
float coeffy[9]={200,100,50,50,100,50,50,100,200}
float knot[18]={0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2}
CDeBoorDoc* pDoc = GetDocument()
ASSERT_VALID(pDoc)
int L,n1=9,n=100,i,j
L=n1-deg
float u
float ps[100][2]
for(i=0i<n1i++){
if(i==0)pDC->MoveTo(coeffx[i],coeffy[i])
pDC->LineTo(coeffx[i],coeffy[i])
}
for(i=degi<L+deg+1i++){
if(knot[i+1]>knot[i])
for(j=0j<nj++){
u=knot[i]+j*(knot[i+1]-knot[i])/n
ps[j][0]=deboor(deg,coeffx,knot,u,i,pDC)
ps[j][1]=deboor(deg,coeffy,knot,u,i,pDC)
CPen newpen(PS_SOLID,3,RGB(255,0,0))
CPen *old1=pDC->SelectObject(&newpen)
if(j==0)
pDC->MoveTo(ps[j][0],ps[j][1])
pDC->LineTo(ps[j][0],ps[j][1])
}
}
}
float CDeBoorView::deboor(int deg,float coeff[],float knot[],float u,int i,CDC*pDC){
int k,j
float t1,t2
float coeffa[30]
for(j=i-degj<=ij++)
coeffa[j]=coeff[j]
for(k=1k<=degk++)
for(j=ij>=i-deg+kj--)
{
t1=(knot[j]-u)/(knot[j]-knot[j+deg-k+1])
t2=1.0-t1
coeffa[j]=t2*coeffa[j-1]+t1*coeffa[j]
}
return(coeffa[i])
}
这个要你自己给出起点和终点:#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <graphics.h>
void swap_start_end(int &x1,int &y1,int &x2,int &y2)
void s_line(int x1,int y1,int x2,int y2)
main()
{
int x1,y1,x2,y2
printf("Please input the start dot:\n")
scanf("%d%d",&x1,&y1)
printf("Please input the end dot:\n")
scanf("%d%d",&x2,&y2)
swap(x1,y1,x2,y2)
s_line(x1,y1,x2,y2)
}
void swap_start_end(int &x1,int &y1,int &x2,int &y2)
{
int mid
mid=x1
x1=y1
y1=mid
mid=x2
x2=y2
y2=mid
}
void s_line(int x1,int y1,int x2,int y2)
{
int driver=DETECT,mode
int curx,cury,dx,dy,tx,ty,mid,d,flag,i
initgraph(&driver,&mode,"")
curx=x1
cury=y1
dx=abs(x2-x1)
dy=abs(y2-y1)
if(x2-x1>=0)
tx=1
else
tx=-1
if(y2-y1>=0)
ty=1
else
ty=-1
if(dx>dy)
flag=0
else
{
flag=1
mid=dxdx=dydy=mid
mid=txtx=tyty=mid
mid=x1x1=y1y1=mid
mid=x2x2=y2y2=mid
}
if(flag)
putpixel(cury,curx,2)
else
putpixel(curx,cury,2)
d=2*dy-dx
for(i=0i<dxi++)
{
if(d>=0)
{
d=d+2*(dy-dx)
cury+=ty
}
else
d=d+2*dy
curx+=tx
if(flag)
putpixel(cury,curx,2)
else
putpixel(curx,cury,2)
}
getch()
closegraph()
}
#include <math.h>#include <graphics.h> /*预定义库函数*/
void circlePoint(int x,int y) /*八分法画圆程序*/
{
circle(320 x*20,240 y*20,3)
circle(320 y*20,240 x*20,3)
circle(320-y*20,240 x*20,3)
circle(320-x*20,240 y*20,3)
circle(320-x*20,240 y*20,3)
circle(320-x*20,240-y*20,3)
circle(320-y*20,240-x*20,3)
circle(320 y*20,240-x*20,3)
circle(320 x*20,240-y*20,3)
}
void MidBresenhamcircle(int r) /* 中点Bresenham算法画圆的程序 */
{
int x,y,d
x=0y=rd=1-r /* 计算初始值 */
while(x<y)
{ circlePoint(x,y) /* 绘制点(x,y)及其在八分圆中的另外7个对称点 */
if(d<0) d =2*x 3 /* 根据误差项d的判断,决定非最大位移方向上是走还是不走 */
else
{ d =2*(x-y) 5
y--
}
x
delay(900000)
} /* while */
}
main()
{
int i,j,r,graphmode,graphdriver
detectgraph(&graphdriver,&graphmode)
initgraph(&graphdriver,&graphmode," ")
printf("中点Bresenhamcircle算法画圆的程序\n") /*提示信息*/
printf("注意 |r|<=11")
printf("\n输入半径值 r:")
scanf("%d",&r)
printf("按任意键显示图形...")
getch()
cleardevice()
setbkcolor(BLACK)
for(i=20i<=620i =20) /*使用双循环画点函数画出表格中的纵坐标*/
for(j=20j<=460j )
putpixel(i,j,2)
for(j=20j<=460j =20) /*使用双循环画点函数画出表格中的横坐标*/
for(i=20i<=620i )
putpixel(i,j,2)
outtextxy(320,245,"0") /*原点坐标*/
outtextxy(320-5*20,245,"-5")circle(320-5*20,240,2) /*横坐标值*/
outtextxy(320 5*20,245,"5")circle(320 5*20,240,2)
outtextxy(320-10*20,245,"-10")circle(320-10*20,240,2)
outtextxy(320 10*20,245,"10")circle(320 10*20,240,2)
outtextxy(320-15*20,245,"-15")circle(320-15*20,240,2)
outtextxy(320 15*20,245,"15")circle(320 15*20,240,2)
outtextxy(320,240-5*20,"-5")circle(320,240-5*20,2) /*纵坐标值*/
outtextxy(320,240 5*20,"5")circle(320,240 5*20,2)
outtextxy(320,240-10*20,"-10")circle(320,240-10*20,2)
outtextxy(320,240 10*20,"10")circle(320,240 10*20,2)
outtextxy(20,10,"The center of the circle is (0,0) ") /*坐标轴左上角显示提示信息*/
setcolor(RED) /*标记坐标轴*/
line(20,240,620,240) outtextxy(320 15*20,230,"X")
line(320,20,320,460) outtextxy(330,20,"Y")
setcolor(YELLOW)
MidBresenhamcircle(r)
setcolor(BLUE) /*绘制圆*/
circle(320,240,r*20)
setcolor(2)
getch()
closegraph()
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)