多边形扩张(收缩算法)

sylgzhou123 2012-09-26 05:25:32
大家好,谁有这方面的资料,发下,实在找不到太好的方法了. --------- 注:我想要代码,因为自己编存在很大的漏洞,还要测试现在时间比较急,谢谢!下面的是刚查到的,虽然理解了啥意思,但是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)不理解啊。急!!!!!

...全文
2060 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
victor_woo 2014-03-27
  • 打赏
  • 举报
回复
0. 平面问题? 使用XY坐标,但是在三维空间下计算,需用到Z正向作为旋转轴 1. 是否保证凸多边形? 2. 固定多边形顶点连接顺序,要不就是顺时针,要不就是逆时针,此方向决定了多边形的内外侧 3. 每条边按顶点顺序前后构造向量V1,绕Z向转90/-90即该边收缩/外扩的方向V2 4.计算边的中点,沿3得到的V2方向移动L几位新边的中点,用该点和V1构造直线 5.逐段得到每个新边的直线方程,绕圈求交点
遥感服务 2014-03-27
  • 打赏
  • 举报
回复
引用 1 楼 libralibra 的回复:
你利用原顶点得到每个边的解析式,然后平行移动得到新的解析式(与已知直线距离为定值的平行线的解析式很好计算,因为斜率是一样的),然后根据新的边的解析式两两求得交点就是新顶点 按照这个步骤计算也不复杂啊
可是,如何判断外扩或者内缩的方向,到底哪个方向是内,哪个方向是外?
hare_55 2013-06-01
  • 打赏
  • 举报
回复
Dp(i+1) X DP(i) 这是虾米啊。...............
hare_55 2013-06-01
  • 打赏
  • 举报
回复
我也要..... wsz72@163.com 能发份给我吗 大哥
seaskyyoyo 2012-11-28
  • 打赏
  • 举报
回复
已发,请查收
samhuang2011 2012-11-28
  • 打赏
  • 举报
回复
能发代码给我么 谢谢 gardenhill@21cn.com
seaskyyoyo 2012-11-26
  • 打赏
  • 举报
回复
我才做完这个,呵呵
snfge 2012-11-16
  • 打赏
  • 举报
回复
有代码吗?你想实现什么样的效果呢
映维网 2012-11-12
  • 打赏
  • 举报
回复

if
else
*
sylgzhou123 2012-09-26
  • 打赏
  • 举报
回复
请问下,按照你的说法,看着挺简单,但你平移的方向怎么确定,能确定吗?
libralibra 2012-09-26
  • 打赏
  • 举报
回复
你利用原顶点得到每个边的解析式,然后平行移动得到新的解析式(与已知直线距离为定值的平行线的解析式很好计算,因为斜率是一样的),然后根据新的边的解析式两两求得交点就是新顶点
按照这个步骤计算也不复杂啊

19,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧