C#快速扫描线算法——求取倾斜四边形与图片像素点交叠区域

1.问题简要说明:

a.图片的像素点大小为1×1的小矩形,以图片左下角为坐标原点,建立图片的直角坐标系

b.四边形的左下点在Y轴上半轴任意位置,宽为Width(>100),高为Height(>10),且与X轴有负小角度夹角(<10degree)

问题:

求取四边形所影响的像素点,及影响大小(四边形完全覆盖像素点时,定义影响大小为1)

2.快速扫描算法

a.传统扫描算法(C#)

1)根据四边形左下顶点的坐标及宽高,以及倾斜角度Theta,求取四边形四点坐标

2)根据四边形四个顶点求取扫描上下限(yLimit0,yLimit1)

3)建立四边形四条边对象

4)从yLimit0开始递增,求交。

     a.每次将yIndex值与四边形转折点相比较,确定与扫描线相交的线段

     b.建立活动边,逐次判断扫描线所处范围

5)相邻两条扫描线确定一行受影响区域

6)一行受影响区域中分成四个区域,即:区域Ⅰ,完全未收影响,影响大小为0;区域Ⅱ,受left line影响的部分区域,影响大小为大于0小于1的double数值;区域Ⅲ,完全受影响,受影响大小为1;区域Ⅳ,受right line影响的部分区域,影响大小为大于0小于1的double数值。

区域Ⅱ和区域Ⅳ的影响因子大小受制约算法效率的瓶颈。一般的求取方法是,根据交点逐一求取与x轴整数坐标值的交点。根据倾斜角度求取三角形或多边形面积。至少要算一次乘法,多次加减法。效率差强人意,在求取转折点时,突显出问题的复杂。

b.快速扫描算法(C#)

基本思想描述:

将倾斜四边形划分成三个区域,

采用垂直先扫描,中部区域占据四边形面积90%以上,一次乘法,之后通过加法计算交点,进而完成影响大小量的计算。左右区域较小,对计算精度影响较小,可采用行扫描一次粗略计算。


详细过程及代码——待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值