DDA算法画直线问题

ni_zhi ni_zhi 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
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);
}
}
}
...全文
评论 6
收藏 已收藏
分享
返回顶部
ni_zhi
C++ 语言 65,214 成员 250,514 内容