本文目录一览:
- 1、根据两点画出直线,c++ windows编程 函数。帮忙实现
- 2、VC++怎么实现用户给出两点,用DDA算法连成线段?
- 3、用C++实现DDA算法
- 4、对DDA直线生成算法进行反走样处理;
- 5、我的C++DDA算法的程序出了错,望各位解决之。
根据两点画出直线,c++ windows编程 函数。帮忙实现
CDC类不是有现成的函数么?
CDC *pdc = CDC::FromHandle(hdc);
pdc-MoveTo(ps);
pdc-LineTo(pe);
以下是引用:
直线段的扫描转换算法
1 数值微分(DDA)法
我的理解就是以一个坐标轴为步长值(增量为1),另一个坐标根据直线的斜率(K)为
增量,然后四舍五入进行计算机,确定每一个点的坐标。
具体算法(我用OPENGL模拟)
void setPixel(GLint xCoord,GLint yCoord)
{
glBegin(GL_POINTS);
glVertex2i(xCoord,yCoord);
glEnd();
}
inline int round(const float a)
{
return int(a+0.5);
}
void lineDDA(int x0,int y0,int xEnd,int yEnd)
{
int dx = xEnd - x0,dy = yEnd - y0,steps,k;
float xIncrement,yIncrement,x = x0,y=y0;
if(abs(dx)abs(dy))
{
steps = abs(dx);
}
else
{
steps = abs(dy);
}
xIncrement = float(dx)/float(steps);
yIncrement = float(dy)/float(steps);
setPixel(round(x),round(y));
for(k = 0;ksteps;k++)
{
x+=xIncrement;
y+=yIncrement;
setPixel(round(x),round(y));
}
}
2中点画线法
同样我理解的算法就是,以一个增量为多的坐标轴为步长值(为1),而另一个坐标
值是加1,还是不变取决于这两个坐标值中点是在这条直线的上方,还是下方。
具体算法如下:
void lineMiddle(int x0,int y0,int xEnd,int yEnd)
{
int a,b,c,d1,d2,d;
a = y0-yEnd;
b = xEnd-x0;
d = 2*a+b;//判别试(2a+b为初始值)
d1 = 2*a;//中点在直线下方增量值
d2 = 2*a+b;//中点在真线上方的增量值
int x,y;
x = x0;y=y0;
setPixel(x,y);
while(xxEnd)
{
if(d0)//中点在直线下方
{
x++;
y++;
d+=d2;
}
else//中点在直线上方
{
x++;
d+=d1;
}
setPixel(x,y);
}
}
3.Bresenham画线算法程序:
用一个坐标轴来当步长值(即+1),另一个坐标轴是否加1则跟据斜率(k)来确定,K
如果大于0.5,那么也加+1,如果小于0.5那么即不变。为了方便计算,如果d大于1
,那么就减一,归0。可设e,e=d-0.5,于是就有e0时,加1,e0时不变,这样便
于硬件实现。
算法实现如下:
void lineBresenham(int x0,int y0,int x1,int y1)
{
int x,y,dx,dy;
float k,e;
dx = x1 - x0;
dy = y1 - y0;;
k = (float)dy/dx;
e = -0.5;
x = x0;
y = y0;
setPixel(x,y);
for(int i =0;idx;i++)
{
x = x+1;
e = e+k;
if(e=0)
{
y++;
e = e-1;
}
setPixel(x,y);
}
}
VC++怎么实现用户给出两点,用DDA算法连成线段?
在你的CXXXview类上右键 添加成员函数类型void 函数名DDALine(参数是两个点的xy坐标 还有颜色值RGB 一共五个参数)
再次鼠标右键CXXXView添加成员变量 参数两个点的坐标 四个参数 都是float 公有成员public
如果直接在窗体里根据已知参数话直线的话 把你的代码放在OnDraw()函数里
如果用鼠标操作的话 那你要添加windows消息 按快捷键ctrl+w 类向导找到你的CXXXView在消息里添加WM_OnLButtonDown(鼠标按下) WM_OnMouseMove(鼠标移动) WM_OnButtonUp(鼠标抬起) 并设置一个BOOL变量控制画线-windows实现dda算法
在OnLButtonDown里传递参数point.x point.y等于初始点xy坐标 bool量=true
OnMouseMove里的point是第二坐标的xy
OnButtonUp bool量等于false
用C++实现DDA算法
加上
includewindow.h试试
可能是没有引入相关的类库
对DDA直线生成算法进行反走样处理;
这其实是一道数学题,只不过用 C 语言编写罢了。建议你去数学分类里面提问这个问题。
我的C++DDA算法的程序出了错,望各位解决之。
你调用SetPixel是你自己的函数还是打算调用Windows
API?
如果调用Windows
API,要包含windows.h
另外Windows
API
SetPixel有四个参数,第一个参数是DC的
句柄
。后面三个如你这样子。
而且控制台程序也没有DC句柄,要选
Win32
工程,不过Win32工程的入口不是main而是WinMain。