问题: 当前屏幕需要绘制成千上百万的线数据,但是当前屏幕不可能真实显示那么多像素,所以通过对线对应的像素进行压缩,以便加快显示绘制速度。
struct POINT{
long x,y;
}POINT;
std::vector<POINT> vecPoints = {};
long *p = (long*)&vecPoint[0];
//算法:覆盖移位相同的连续点位,直到最后一个不重复的点
long PointSimplify(long *p,long src_size)
{long size = src_size/2;
long valuex = p[0];
long valuey = p[1];
long findex = 1;
long first_same_index = -1;
bool flag = false;
while (findex < size)
{
if (p[findex*2] != valuex || p[findex*2+1] != valuey)
{
valuex = p[findex*2];
valuey = p[findex*2+1];
if (flag)
{
memmove(&p[0] + first_same_index*2, &p[0] + findex*2, sizeof(long) * (size - findex+1)*2);
flag = false;
size = size - (findex - first_same_index);
findex = first_same_index;
valuex = p[findex*2];
valuey = p[findex*2 + 1];
}
findex++;
}
else
{
if (!flag)//连续相同的
first_same_index = findex;
flag = true;
findex++;
if (findex == size)//如果末尾都是一样的
size = first_same_index;
}
}
return size*2;
}
最后计算出来的point集合为 (POINT*)p,点总数为size/2;