多边形扩张(收缩算法)
大家好,谁有这方面的资料,发下,实在找不到太好的方法了. --------- 注:我想要代码,因为自己编存在很大的漏洞,还要测试现在时间比较急,谢谢!下面的是刚查到的,虽然理解了啥意思,但是sin值取时是不是存在方向问题怎么解决(角可能是<180,也可能大于180度)
折线平行线的计算方法
给定一个简单多边形,多边形按照顺时针或者逆时针的数许排列
内部等距离缩小或者外部放大的多边形,实际上是由距离一系列平行已知多边形的边,并且距离为L的线段所构成的。
外围的是原多边形,内侧是新的多边形
算法构造
多边形的相邻两条边,L1和L2,交于Pi点
做平行于L1和L2,平行线间距是L的,并且位于多边形内部的两条边,交于Qi
我们要计算出Qi的坐标
如图,(看不到就是了)
PiQi向量,显然是等于平行四边形的两个相邻边的向量v1和v2的和的
而v1和v2向量的方向,就是组成多边形的边的方向,可以用顶点差来表示
v1和v2向量的长度是相同的,等于平行线间距L与两个线段夹角的sin值的除法。
即: Qi = Pi + (v1 + v2)
Qi = Pi + L / sinθ * ( Normalize(v2) + Normalize(v1))
Sin θ = |v1 × v2 | /|v1|/|v2|
计算步骤:
⑴、获取多边形顶点数组PList;
⑵、计算DPList[Vi+1-Vi];
⑶、单位化NormalizeDPList,得到NDP[DPi];(用同一个数组存储)
⑷、Sinα = Dp(i+1) X DP(i);
⑸、Qi = Pi + d/sinα (NDPi+1-NDPi)
⑹、这样一次性可以把所有顶点计算完。
注意,交换Qi表达式当中NDPi+1-NDPi的顺序就可以得到外部多边形顶点数组。
原地址:http://blog.csdn.net/happy__888/archive/2005/03/09/315762.aspx
哪位仁兄可以帮我解释下上述各表达式的具体涵义。谢谢了。特别是对计算步骤的(2)(3)(4)不理解啊。急!!!!!