c++如何画直线?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++如何画直线?相关的知识,希望对你有一定的参考价值。

比如说在屏幕上从x:5,y:5,连接到x:10,y:10.
请给出include的库名、函数、定义

包含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;


仅供参考

追问

还需要补充类吗?不好意思,我是初学者,能否帮我把整个程序写一下,麻烦你了。我用的是devc++。

追答

不需要啥,不知道dev++是咋样的,反正codestock需要多一个define,vc不需要,你自己看看吧,注释也写了估计看看就懂了,顺便再把之前写的错的另一种算法重新贴下,之前没注意考虑->_->

参考技术A 在c++中可以用graphics类进行画直线,它需要提供画笔,起点坐标,终点坐标等参数,可以通过设置画笔画出不同颜色的直线 参考技术B 回答

直线的绘制,通过鼠标给两个点,用经典的直线算法实现直线的画法。 c++ 实现。

提问

是代码写哦

用c语言代码写,画一条直线

回答

源代码

以上是关于c++如何画直线?的主要内容,如果未能解决你的问题,请参考以下文章

matlab中如何画一条直线

如何利用OnDraw绘制直线

C++语言通过Bresenham算法画直线怎么写,求代码高人,谢谢了!

由两点坐标如何画出直线 matlab

有关matlab画直线

matlab 三维直线怎么画