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不需要,你自己看看吧,注释也写了估计看看就懂了,顺便再把之前写的错的另一种算法重新贴下,之前没注意考虑->_->
直线的绘制,通过鼠标给两个点,用经典的直线算法实现直线的画法。 c++ 实现。
提问是代码写哦
用c语言代码写,画一条直线
回答源代码
以上是关于c++如何画直线?的主要内容,如果未能解决你的问题,请参考以下文章