成都网站建设设计

将想法与焦点和您一起共享

c语言坐标画直线函数 c语言建立坐标系绘制直线

用VC6.0编写的画直线的C语言程序!求大神帮忙!

这个简单,用MoveTo 和LineTo就行了。如有下面2个点,x(1,2),y(8,9)

成都创新互联公司拥有网站维护技术和项目管理团队,建立的售前、实施和售后服务体系,为客户提供定制化的成都网站制作、做网站、网站维护、遂宁托管服务器解决方案。为客户网站安全和日常运维提供整体管家式外包优质服务。我们的网站维护服务覆盖集团企业、上市公司、外企网站、商城系统网站开发、政府网站等各类型客户群体,为全球千余家企业提供全方位网站维护、服务器维护解决方案。

你只要MoveTo(1,2);

LineTo(8,9);

如果你是要任意输入2个点的话,那么先将输入的点先转化为浮点型,用atof函数,这个函数使用起来很简单,就是把字符型转化为浮点型。这样就好了。

怎么用C语言画一条红色的直线

首先设置初始坐标和结束坐标,然后设定画线颜色,最后用draw函数画出来就好了

怎样用C语言绘制直线

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

#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++如何画直线?

包含windows.h,里面有一个SetPixel方法,画线常用算法有三种dda,中点画线Bresenham画线-_-

刚把三种都写了下

void CDDALineView::drawDDALine(CDC *pDC, int x0, int y0, int x1, int y1, COLORREF color)

{

float deltax, deltay, x, y;

int steps = max(abs(x1 - x0), abs(y1 - y0));

deltax = (x1 - x0) / steps;

deltay = (y1 - y0) / steps;

x = x0;

y = y0;

pDC-SetPixel((int)(x + 0.5) , (int)(y + 0.5), color);

for(int i = 0; i  steps; i++)

{

x += deltax;

y += deltay;

pDC-SetPixel((int)(x + 0.5), (int)(y + 0.5), color);

}

}

//preCondition:x0  x1

void CDDALineView::MidpointLine(CDC *pDC, int x0, int y0, int x1, int y1, COLORREF color)

{

int a = y0 - y1;

int b = x1 - x0;

int c = x0 * y1 - x1 * y0;

float d, d1, d2;

d = 2 * a + b;

d1 = 2 * a;

d2 = 2 * (a + b);

int x = x0, y = y0;

pDC-SetPixel(x, y, color);

while(x  x1)

{

if(d  0)

{

 x++;

 y++;

 d+=d2;

}

else{

x++; 

d+=d1;

}

pDC-SetPixel(x, y, color);

}

}

void CDDALineView::BresenhamLine(CDC *pDC, int x0, int y0, int x1, int y1, COLORREF color)

{

int x, y, dx, dy;

dx = x1 - x0;

dy = y1 - y0;

float k = dy / dx;

x = x0;

y = y0;

float e = -0.5;

for(int i = 0; i = dx; i++)

{

pDC-SetPixel(x, y, color);

x++;

e+=k;

if(e = 0)

{

y++;

e-=1;

}

}

}

仅供参考


当前名称:c语言坐标画直线函数 c语言建立坐标系绘制直线
转载注明:http://chengdu.cdxwcx.cn/article/doshcps.html