快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

c语言绘制线函数 c语言画线函数

怎样用C语言绘制直线

【C语言的用MoveTo()和LineTo()】

成都创新互联是一家专业提供沙河企业网站建设,专注与网站设计、成都网站制作H5高端网站建设、小程序制作等业务。10年已为沙河众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。

#includegraphics.h

#includemath.h

/*

###############################################################################

功 能:本函数的作用是用逐点比较法来画一条直线

格 式:void myline1(int x1,int y1,int x2,int y2,int color)

参数说明:x1,y1是起始点坐标,x2,y2是终止点,color是画线的颜色

调用示例:myline1(10,20,500,440,4)

###############################################################################

*/

void myline1(int x1,int y1,int x2,int y2,int color)

{

/*变量定义开始(2007/10/16增加)*/

int iTx; /*x轴终点的相对坐标xa或临时变量*/

int iTy; /*y轴终点的相对坐标ya或临时变量*/

int iDx; /*x轴方向的步长dx*/

int iDy; /*y轴方向的步长dy*/

int iFt; /*偏差Fm*/

int iSt; /*记数循环数(dx+dy)S*/

int iXt; /*x方向循环变量xm*/

int iYt; /*y方向循环变量ym*/

/*变量定义结束*/

/*变量初始化开始*/

/*如果是第三象限或第四象限则换成第一或第二象限*/

if(y2y1)

{

iTx=x1;

x1=x2;

x2=iTx;

iTy=y1;

y1=y2;

y2=iTy;

}

iTx=x2-x1; /*取x轴的相对坐标*/

iTy=y2-y1; /*取y轴的相对坐标*/

iDx=1;

iDy=1;

iFt=0;

iSt=iTx+iTy;

if(iTx0)iSt=-1*iTx+iTy /*如果在第二象限,则x轴方向步长取负值*/

iXt=0;

iYt=0;

/*变量初始化结束*/

/*数据处理开始*/

while(iSt0)

{

putpixel(x1+iXt,y1+iYt,color);

if(iTx=0) /*如果在第一象限*/

{

if(iFt0) /*如果偏差小于0*/

{

iYt+=iDy; /*y方向走一步*/

iFt+=iTx;

}

else /*如果偏差大于或等于0*/

{

iXt+=iDx; /*x方向走一步*/

iFt-=iTy;

}

}

else

{

if(iFt0) /*如果偏差小于0*/

{

iXt-=iDx; /*负x方向走一步*/

iFt+=iTy;

}

else /*如果偏差大于或等于0*/

{

iYt+=iDy; /*y方向走一步*/

iFt+=iTx;

}

}

iSt--;

}

}

/*

###############################################################################

功 能:本函数的作用是用来画一条直线

格 式:void myline2(int x1,int y1,int x2,int y2,int color)

参数说明:x1,y1是起始点坐标,x2,y2是终止点,color是画线的颜色

调用示例:myline2(10,20,500,440,4)

###############################################################################

*/

int myline2(int x1,int y1,int x2,int y2,int color)

{

int iX; /*x方向的坐标变量*/

int iY; /*y方向的坐标变量*/

int iTx; /*x方向的步长变量*/

int iTy; /*y方向的步长变量*/

float fDx; /*x方向的差分变量*/

float fDy; /*y方向的差分变量*/

float fMinf; /*算法中的f*/

float fMaxF; /*算法中的F*/

float fS; /*终点判断变量*/

fMinf=0.5; /*f=0.5*/

iX=x1;

iY=y1;

putpixel(x1,y1,color);

if(x1==x2y1==y2) /*如果终点和起始点相同*/

{

return(1);

}

iTx=1;

iTy=1;

fDx=(float)(x2-x1);

fDy=(float)(y2-y1);

fMaxF=fDy/fDx0?fDy/fDx:(-fDy/fDx); /*F=|dy/dx|*/

if(fDx0)iTx=-1;

if(fDy0)iTy=-1;

fS=fDx0?fDx:(-fDx);

if(fMaxF==1) /*如果F=1*/

{

iX=x1;

iY=y1;

while(fS0)

{

iX+=iTx; /*x方向走一步*/

iY+=iTy; /*y方向走一步*/

putpixel(iX,iY,color);

fS--;

}

}

else if(fMaxF1) /*如果F1*/

{

fS+=fDy0?fDy:(-fDy);

while(fS0)

{

iY+=iTy; /*y方向走一步*/

putpixel(iX,iY,color);

fMinf+=1/fMaxF; /*f=f+1/F*/

fS--;

if(fMinf=1) /*如果f=1*/

{

iX+=iTx; /*x方向走一步*/

fMinf--; /*f=f-1*/

putpixel(iX,iY,color);

fS--;

}

}

}

else /*如果F1*/

{

fS+=fDy0?fDy:(-fDy);

while(fS0)

{

iX+=iTx; /*x方向走一步*/

putpixel(iX,iY,color);

fMinf+=fMaxF; /*f=f+F*/

fS--;

if(fMinf=1) /*如果f=1*/

{

iY+=iTy; /*y方向走一步*/

fMinf--; /*f=f-1*/

putpixel(iX,iY,color);

fS--;

}

}

}

}【能够画出任意斜率的直线算法程序】

int dx,dy,incrE,incrNE,d,x,y;

if ((point[1].x-point[0].x)==0){ //垂直的直线

x=point[0].x;

for(y=point[0].y;ypoint[1].y;y++)

pDC-SetPixel(x,y,50);

}

else if(abs((point[1].y-point[0].y)/(point[1].x-point[0].x))=1){ //斜率 -1到 1 之间

dx=point[1].x-point[0].x;

dy=point[0].y-point[1].y;

d=dx-2*dy; incrE=-2*dy;

incrNE=2*(dx-dy);

x=point[0].x,y=point[0].y;

pDC-SetPixel(x,y,50);

if(point[0].ypoint[1].y){

while(xpoint[1].x)

{

if(d=0){

d+=incrE;

x++;

}

else

{d+=incrNE;br x++;br y--;br }

pDC-SetPixel(x,y,50);

}

}

else if(point[0].y=point[1].y){

dy=point[1].y-point[0].y;

incrE=-2*dy;

incrNE=2*(dx-dy);

x=point[0].x,y=point[0].y;

pDC-SetPixel(x,y,50);

while(xpoint[1].x)

{

if(d=0){

d+=incrE;

x++;

}

else

{d+=incrNE;br x++;br y++;br }

pDC-SetPixel(x,y,50);

}

}

}

else { //斜率 -1 和 1的直线

if(point[1].x=point[0].x){

dx=point[1].x-point[0].x;

dy=point[1].y-point[0].y;

d=2*dx-dy;

incrE=2*dx;

incrNE=2*(dx-dy);

x=point[0].x,y=point[0].y;

pDC-SetPixel(x,y,50);

while(xpoint[1].x)

{

if(d0){

d+=incrE;

y++;

}

else

{d+=incrNE;br pDC-SetPixel(x,y,50);br x++;br y++;br }

pDC-SetPixel(x,y,50);

}

}

else if((point[1].y-point[0].y)/(point[1].x-point[0].x)-1){

dx=point[1].x-point[0].x;

dy=point[0].y-point[1].y;

d=2*dx-dy;

incrE=2*dx;

incrNE=2*(dx-dy);

x=point[0].x,y=point[0].y;

pDC-SetPixel(x,y,50);

while(ypoint[1].y)

{

if(d0){

d+=incrE;

y++;

}

else

{d+=incrNE;br x--;br y++;br }

pDC-SetPixel(x,y,50);

} }

}

c语言的图形函数库有哪些

图形和图像函数包含在graphics.h里面(一) 像素函数56. putpiel() 画像素点函数57. getpixel()返回像素色函数(二) 直线和线型函数58. line() 画线函数59. lineto() 画线函数60. linerel() 相对画线函数61. setlinestyle() 设置线型函数62. getlinesettings() 获取线型设置函数63. setwritemode() 设置画线模式函数(三)、多边形函数64. rectangle() 画矩形函数65. bar() 画条函数66. bar3d() 画条块函数67. drawpoly() 画多边形函数(四)、 圆、弧和曲线函数68. getaspectratio()获取纵横比函数69. circle()画圆函数70. arc() 画圆弧函数71. ellipse()画椭圆弧函数72. fillellipse() 画椭圆区函数73. pieslice() 画扇区函数74. sector() 画椭圆扇区函数75. getarccoords()获取圆弧坐标函数(五)、 填充函数76. setfillstyle() 设置填充图样和颜色函数77. setfillpattern() 设置用户图样函数78. floodfill() 填充闭域函数79. fillpoly() 填充多边形函数80. getfillsettings() 获取填充设置函数81. getfillpattern() 获取用户图样设置函数(六)、图像函数82. imagesize() 图像存储大小函数83. getimage() 保存图像函数84. putimage() 输出图像函数四、图形和图像函数对许多图形应用程序,直线和曲线是非常有用的。但对有些图形只能靠操作单个像素才能画出。当然如果没有画像素的功能,就无法操作直线和曲线的函数。而且通过大规模使用像素功能,整个图形就可以保存、写、擦除和与屏幕上的原有图形进行叠加。(一) 像素函数56. putpixel() 画像素点函数功能: 函数putpixel() 在图形模式下屏幕上画一个像素点。用法: 函数调用方式为void putpixel(int x,int y,int color);说明: 参数x,y为像素点的坐标,color是该像素点的颜色,它可以是颜色符号名,也可以是整型色彩值。此函数相应的头文件是graphics.h返回值: 无例: 在屏幕上(6,8)处画一个红色像素点:putpixel(6,8,RED);57. getpixel()返回像素色函数功能: 函数getpixel()返回像素点颜色值。用法: 该函数调用方式为int getpixel(int x,int y);说明: 参数x,y为像素点坐标。函数的返回值可以不反映实际彩色值,这取决于调色板的设置情况(参见setpalette()函数)。这个函数相应的头文件为graphics.h返回值: 返回一个像素点色彩值。例: 把屏幕上(8,6)点的像素颜色值赋给变量color。color=getpixel(8,6);

c语言怎么把数据拟合成函数并画线

1、通过一些点拟合出一条直线。

2、参数:pt_input指向传入的点的指针。

3、ptNumbers传入的点数量。

4、k指向拟合直线参数k的指针。

5、b指向拟合直线参数b的指针。


网站栏目:c语言绘制线函数 c语言画线函数
网页网址:http://6mz.cn/article/ddiidse.html

其他资讯