DDA算法画直线问题
VC++6.0写的算法
获取的两个点放在m_pOrigin和m_pEnd里,下面是算法,画出来的都是水平或竖直的直线,有时候会为斜线,但相差明显很远
请帮忙看下问题在哪,谢谢
int dx, dy, n;
float k;
CPoint tempPoint;
tempPoint = m_pOrigin;
CClientDC dc(this);
dx = m_pEnd.x - m_pOrigin.x; // 坐标水平增量
dy = m_pEnd.y - m_pOrigin.y; // 坐标竖直增量
k = (float)dy / (float)dx; // 斜率
if (abs(dx) > abs(dy)) // 斜率的绝对值小于1
{
n = abs(dx);
if (m_pOrigin.x < m_pEnd.x) // 画线方向为左下至右上,斜率为正
{
for (int i = 0; i < n; i++)
{
tempPoint.x++;
tempPoint.y = floor(tempPoint.y + k);
dc.SetPixel(tempPoint, 1);
}
}
else // 画线方向为右下至左上,斜率为负
{
for (int i = 0; i < n; i++)
{
tempPoint.x--;
tempPoint.y = floor(tempPoint.y - k);
dc.SetPixel(tempPoint, 1);
}
}
}
else // 斜率绝对值大于或等于1
{
n = abs(dy);
if (m_pOrigin.x < m_pEnd.x) // 画线方向为左下到右上,斜率为正
{
for (int i = 0; i < n; i++)
{
tempPoint.y++;
tempPoint.x = floor(tempPoint.x + 1.0/k);
dc.SetPixel(tempPoint, 1);
}
}
else // 画线方向为右下到左上,斜率为负
{
for (int i = 0; i < n; i++)
{
tempPoint.y--;
tempPoint.x = floor(tempPoint.x - 1.0/k);
dc.SetPixel(tempPoint, 1);
}
}
}
获取的两个点放在m_pOrigin和m_pEnd里,下面是算法,画出来的都是水平或竖直的直线,有时候会为斜线,但相差明显很远
请帮忙看下问题在哪,谢谢
int dx, dy, n;
float k;
CPoint tempPoint;
tempPoint = m_pOrigin;
CClientDC dc(this);
dx = m_pEnd.x - m_pOrigin.x; // 坐标水平增量
dy = m_pEnd.y - m_pOrigin.y; // 坐标竖直增量
k = (float)dy / (float)dx; // 斜率
if (abs(dx) > abs(dy)) // 斜率的绝对值小于1
{
n = abs(dx);
if (m_pOrigin.x < m_pEnd.x) // 画线方向为左下至右上,斜率为正
{
for (int i = 0; i < n; i++)
{
tempPoint.x++;
tempPoint.y = floor(tempPoint.y + k);
dc.SetPixel(tempPoint, 1);
}
}
else // 画线方向为右下至左上,斜率为负
{
for (int i = 0; i < n; i++)
{
tempPoint.x--;
tempPoint.y = floor(tempPoint.y - k);
dc.SetPixel(tempPoint, 1);
}
}
}
else // 斜率绝对值大于或等于1
{
n = abs(dy);
if (m_pOrigin.x < m_pEnd.x) // 画线方向为左下到右上,斜率为正
{
for (int i = 0; i < n; i++)
{
tempPoint.y++;
tempPoint.x = floor(tempPoint.x + 1.0/k);
dc.SetPixel(tempPoint, 1);
}
}
else // 画线方向为右下到左上,斜率为负
{
for (int i = 0; i < n; i++)
{
tempPoint.y--;
tempPoint.x = floor(tempPoint.x - 1.0/k);
dc.SetPixel(tempPoint, 1);
}
}
}
...全文
相关推荐
DDA、Bresenham、Midpoint算法画直线
DDA、Bresenham、Midpoint算法画直线
[matlab]DDA原理画直线、圆弧测试
[matlab]DDA原理画直线、圆弧
用C语言实现DDA算法画直线
计算机图形学原理课,用C语言实现DDA算法画直线,实验操作,下载后直接用VC或者VC++打开工作空间即可。
VC++实现DDA中点线画直线
使用VC++ mfc实现DDA中点线画直线,完整代码,可以编译运行,属于实验老师提供的实验代码,软件里面有说明。
MFC画直线程序(DDA和Brensenham)
MFC画直线程序,课选择DDA和Brensenham算法,可调颜色、坐标


