【问题标题】:How to compute inner angle of two segments in polygon triangulation如何计算多边形三角剖分中两条线段的内角
【发布时间】:2021-08-30 16:32:26
【问题描述】:

上下文

我必须为学校作业实施多边形三角剖分算法。我选择遵循《计算几何:算法与应用》一书中描述的算法。

输入是一个多边形,存储为一个双向连接的边列表。第一步是将多边形划分为单调块。为此,有必要执行线扫描并根据每个顶点的类型对其进行处理。据作者介绍,顶点类型描述如下:

我们在 P 中区分了五种类型的顶点——见图 3.3。其中四个 类型是转弯顶点:开始顶点、分割顶点、结束顶点和合并 顶点。它们定义如下。一个顶点 v 是一个起始顶点,如果它的两个 邻居位于其下方且 v 处的内角小于 π;如果内部 角度大于 π 那么 v 是一个分裂顶点。 (如果两个邻居都在下面 v,那么内角不能正好是 π。)如果一个顶点是一个端点,如果 它的两个邻居位于其上方,并且 v 处的内角小于 π;如果 内角大于 π 那么 v 是一个合并顶点。那些顶点 不是转弯顶点是常规顶点。因此一个规则的顶点有它的一个 它上面的邻居和下面的另一个邻居。

问题

我不知道如何区分起始顶点与分割顶点,或结束顶点与合并顶点。我该怎么做?

其他信息

我的 DCEL 数据结构是这样的

class HalfEdge {
 HalfEdge *previous, *next, *twin;
 Point *to, *from;
};

【问题讨论】:

    标签: math geometry triangulation


    【解决方案1】:

    也许如果您跟踪多边形边界的逆时针方向(即保持边缘定向),您可以区分两者。假设连续的顶点是 v[i-1]、v[i]、v[i+1] 和 v[i-1],并且 v[i+1] 低于 v[i]。然后形成二维向量 v[i]-v[i-1] 和 v[i+1]-v[i]。之后,计算行列式 det( v[i]-v[i-1] , v[i+1]-v[i] )。如果行列式是正的,那么顶点是开始的。如果行列式为负,则分割顶点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-28
      • 2015-03-19
      • 2014-05-29
      • 2011-01-14
      • 2011-10-05
      • 1970-01-01
      • 2017-04-09
      • 2011-01-24
      相关资源
      最近更新 更多