点压缩聚合(3)

问题: 当前屏幕需要绘制成千上百万的线数据,但是当前屏幕不可能真实显示那么多像素,所以通过对线对应的像素进行压缩,以便加快显示绘制速度。

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值