64,647
社区成员
发帖
与我相关
我的任务
分享
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);
}
}
改成下面试试
if (m_pOrigin.x < m_pEnd.x) // 画线方向为左下至右上,斜率为正
{
for (int i = 0; i < n; i++)
{
tempPoint.x++;
tempPoint.y += k;不要改变y的精确值
dc.SetPixel(tempPoint.x, tmepPoint.y+0.5f, 1);
}
}
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);
}
}
}