void CAreaRegion::drawAreaOutline(const AreaDesc area)
{
INT_PTR i, j, dist, nCount, ax, ay;
double px, py, dx, dy;
INT_PTR nX, nY, nMapWidth, nMapHeight;
PBYTE pData;
POINT pts[2];
nMapWidth = m_nMapWdith;
nMapHeight = m_nMapHeight;
pData = area.lpMapData;
nCount = area.nPointCount;
if (*PINT64(area.lpPoints) == *PINT64(&area.lpPoints[nCount-1]))
nCount--;
pts[1] = area.lpPoints[0];
for (i=1; i<=nCount; ++i)
{
pts[0] = pts[1];
if (i == nCount)
pts[1] = area.lpPoints[0];
else pts[1] = area.lpPoints[i];
dx = (int)pts[1].x - (int)pts[0].x;
dy = (int)pts[1].y - (int)pts[0].y;
ax = abs((int)dx);
ay = abs((int)dy);
dist = __max(ax, ay);
px = dx / dist;
py = dy / dist;
dx = pts[0].x;
dy = pts[0].y;
for (j=dist-1; j>=0;--j)
{
nX = (int)(dx + 0.5);
if (nX < 0)
nX = 0;
else if (nX >= nMapWidth)
nX = nMapWidth - 1;
nY = (int)(dy + 0.5);
if (nY < 0)
nY = 0;
else
C++ 实现扫描线算法 根据3个以上点计算连线上的点
于 2024-03-05 09:19:15 首次发布
文章详细描述了C++函数CAreaRegion中两个方法,drawAreaOutline用于根据给定的边界信息绘制区域轮廓,fillAreaRegion则填充边界内的地图数据。通过实例展示了如何使用这两个函数处理特定点数据并生成最终图形。

最低0.47元/天 解锁文章
7915

被折叠的 条评论
为什么被折叠?



