【问题标题】:Triangularizing an arbitrary 4-Vertex Polygon对任意 4 顶点多边形进行三角化
【发布时间】:2010-10-02 05:26:29
【问题描述】:

这是一个谜语。你有一个由恰好 4 个顶点组成的多边形,称为 v1、v2、v3、v4。它们以任何随机顺序给出。你如何将这些顶点分成两组,每组定义一个三角形,这样两个三角形就组成了多边形而不重叠。

结果应该是这样的:

三角形 1:v1、v2、v3 三角形 2:v2、v3、v4

...诀窍是,三角形不能重叠,并且这些点以任意顺序给出,没有任何 x,y 坐标指示。这甚至可能吗?如果没有,请建议将坐标已知的 4 点多边形三角化的最佳方法。我正在寻找一个有效的循环。

【问题讨论】:

  • '没有任何指示它们的 x,y 坐标',你的意思是它们没有被全部给出,或者它们没有作为具体值而是作为通用变量给出?

标签: split geometry


【解决方案1】:

您需要将其分解为两个步骤:

1) 将顶点按顺时针顺序排序。见this question and its answers

2) 找到在四边形内部的对角线(如果四边形是凹的,则只有其中一个在内部。如果是凸的,则两者都是)。见this question and its answers

一旦你知道了,如何找到这两个三角形应该很明显了。

【讨论】:

    【解决方案2】:

    如果你不知道坐标是不可能的。

    对于第一个三角形,选择任意三个点。哪个没关系;你会得到一个可行的三角形。

    对于第二个三角形,找到“远”点并将其删除,替换为剩余点。

    诀窍是找到远点。由于您只有三个选项,因此您只需执行两次检查即可确定它是哪个(如果不是前两个,则为第三个)。这与您将获得的效率差不多。

    给定第一个三角形(A, B, C) 和第四个点D,远点是三角形中的点(假设它是A),线段(A, D)(B, C) 相交。就这么简单。

    请注意,这将适用于退化的四边形三角形,但不适用于线段。或者它可能会,这取决于你如何定义工作......

    【讨论】:

      【解决方案3】:

      哦,好吧,这是另一个作业......

      如果您不知道坐标,您可能会被搞砸。像 v1,v2,v3 和 v2,v3,v4 一样拆分它。你不能做得比这更糟。如果您知道面积或以某种方式计算它们,请继续阅读。

      4 个点是构成一个四面体的 4 个三角形。你有它在平面上的投影。您需要拆分每个子集的总面积相等的三角形集。可能您正在使用浮点数,所以让我们放宽拆分条件。您正在寻找最小的绝对差值。

      我们将三角形的面积称为 A、B、C、D:

      共有 2^4/2 种方法可以分割三角形集。

      如果 A+B+C+D 是最小值,则您的面积计算有错误,或者您有一条线段。

      如果像 A-(B+C+D) 这样的情况最少,那么您的多边形实际上是带有额外顶点的 A。或者,如果你愿意,你可以用 B、C、D 制作 3 个四边形。

      如果像 (A+B)-(C+D) 这样的情况最少,你可以选择 A,B 或 C,D

      【讨论】:

        【解决方案4】:

        如果你真的想渲染这些,你应该在中间创建一个顶点,并以中间点作为顶点之一制作 4 个三角形。 否则我看不出 (v1, v2, v3), (v2, v3, v4) 有什么问题

        [编辑:]

        抱歉,我正在考虑 3D。这不适用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-09-28
          • 2011-01-01
          • 2012-09-06
          • 2020-04-21
          • 2016-09-27
          • 2012-02-10
          • 2014-07-12
          • 2020-11-21
          相关资源
          最近更新 更多