拓扑构面算法原理

发布于:2024-04-21 ⋅ 阅读:(153) ⋅ 点赞:(0)

判断多边形旋转方向

多边形是左转还是右转的判断是比较困难的,因为,对于多边形 只有在封闭前才可判断出是左转还是右转。
  以起始点为原点 ,根据生成多边形的点组顺 序依次做射线,计算由后一方位角减前一方位角的 和 ,若和小于 0 则为顺时针方向即右转 , 否则为左 转 。
 &nsp;即以夹角变化的总趋势是渐大还是渐小来判断 多边形的方向。有多边形OBCDEF , O 为起点,以O为原点,根据多边形的点组顺序分别做射线 OB 、OC、OD、OE 、OF , 依次计算射线的方位角 。 ∠BOC =αOC - αOB , 依次由后一边的方位角减前一边的方位角,得到∠COD、 ∠DOE、∠EOF 的夹角 ,则总的夹角变化趋势是: ∠BOF =∠BOC +∠COD +∠DOE +∠EOF
在这里插入图片描述

左转算法原理

  通过左转算法,可以实现任意相交线段生成多 边形( 面) ,左转算法是根据节点和节点线段的方位 角,按逆时针方向( 如果按照顺时针则为右转算法) 自动搜索出多边形。即左转算法是从起始点的任一 连接线段开始,搜索前进方向左侧夹角最小的线段, 将搜索到的线段作为当前线段继续搜索,直到回到 起始节点,根据搜索到的线段形成多边形。

  前进方向左侧夹角最小可由线段方位角确定,因此,左转算法的基础是节点和节点连接线段的方位角。坐标系确定后,方位角可由线段节点求出。方位角是以 X 正半轴为起始方向,沿逆时针方向到某一射线的角度,用 α 表示。如图 1 所示,OA 的方位角 αA 和 OB 的方位角 αB。方位角取值范围为[0, 2π) ,不存在负值。
在这里插入图片描述
  左转算法的核心是通过比较节点连接线段的方位角,确定下一条线段。如图 2 所示,假设 AO 为当前搜索线段,O 为当前节点,显然,前进方向左侧夹角最小的线段为 OD,下一条搜索线段应为 OD,此时,OD 为节点 O 所有连接线段中方位角最大的线段; 假设 BO 为当前搜索线段,下一条搜索线段为OA,此时 OA 的方位角是次小于 OB 的方位角; 其他线段情况与 BO 类似,下一条搜索线段的方位角为次小于当前搜索线段方位角。因此可以总结出如下规律: 如果当前线段的方位角是节点连接所有线段的最小方位角,则取连接线段中方位角最大的线段为下一搜索线段; 如果当前搜索线段方位角不是最小方位角,则取次小于当前线段方位角的线段为下一搜索线段。由此可知,搜索的下一条线段,只由当前线段的方位角和节点连接其他线段方位角决定。
在这里插入图片描述
左转算法就是按照上面的原理,从某个点出发,遍历所有点和线段,最终得到多边形。构面过程如图 3 所示。
在这里插入图片描述
如果以 O 为起点,假设首先搜索线段 OD( 也有可能是 OA 段) ,此时以 D 为原点,显然端点 D 连接的线段 DC、DB、DO 中,当前搜索线段 DO 不是方位角最小的线段,因此选择方位角次小于 DO 的线段DB 为下一条搜索的线段。以此类推,可以得到多边形 ODBAO,显然,ODBAO 是逆时针的,符合左转算法的规定。


网站公告

今日签到

点亮在社区的每一天
去签到