网站建设资讯

NEWS

网站建设资讯

画一条直线的函数c语言 c++画线函数

我是c语言初学者,老师要求设计程序用函数画一个圆和一条直线。求各位路过的大神仗义相助。。

1  对于这种问题,首先分析需求,

创新互联于2013年创立,先为杞县等服务建站,杞县等地企业,进行企业商务咨询服务。为杞县企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

直线:

要画直线,要的是什么,就是两个点;

所以定义一个结构体

struct point

{

int  x;

int  y;

}Ppline,Ppcircle;

画圆:

那么需要一个圆心,和一个半径;

圆心,通过上面的定义,可以获得,半径的话,直接传递参数就行了;

直线函数:

int  paintline(Ppline  startpoint,Ppline endpoint);

画圆函数:

int  paintcircle(Ppcircle   centerpoint,int  r);

利用C语言编写 能够画出任意的直线算法程序(利用画点函数)

上次刚写过,在VC下运行的,

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;

x++;

y--;

}

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;

x++;

y++;

}

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;

pDC-SetPixel(x,y,50);

x++;

y++;

}

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;

x--;

y++;

}

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语言画点和直线

这个不管怎么说不是最开始的控制台的程序,这个新建工程的时候需要选择的是Win32的程序

画线的函数使用windows提供的API,MoveTo:移动到起点,LineToEx:移动到终点的这两个函数,是在OnPaint,或是响应WM_PAINT的消息的时候处理这两个函数;画点的画,使用SetPixel这个函数,同样也是在WM_PAINT的消息中去处理与画图有关的操作的

怎样用C语言绘制直线

1.void far line(int x0, int y0, int x1, int y1);

画一条从点(x0, y0)到(x1, y1)的直线。

2.void far lineto(int x, int y);

画一作从现行游标到点(x, y)的直线。

3.void far linerel(int dx, int dy);

画一条从现行游标(x, y)到按相对增量确定的点(x+dx, y+dy)的直线。


当前文章:画一条直线的函数c语言 c++画线函数
文章位置:http://cdweb.net/article/hgpdhj.html