代码之家  ›  专栏  ›  技术社区  ›  Justin808

有人知道我是可以找到一个算法,还是他们可以共享一个算法,将一个球体(网格)分割成随机的部分?

  •  3
  • Justin808  · 技术社区  · 15 年前

    我有一个顶点列表和一个三角形列表。我想把这个单一的网格分割成5个随机形状的网格。当5个随机形状的网格就位时,球体应该全部对齐,看起来像1个实体网格。

    我需要一个程序化的算法来完成这个任务,而不是一个工具来完成它。任何指针都会很棒!

    4 回复  |  直到 10 年前
        1
  •  3
  •   zerm    15 年前

    类似于Svante的建议,但方法略有不同:

    1. 选择五个随机顶点,用数字1到5标记这些顶点为“已访问”
    2. 从每个访问的顶点,转到所有相邻的顶点。在那里也存储相同的号码。
    3. 如果您访问一个已经分配了编号的顶点,请停在那里。
    4. 如果访问了所有顶点,则停止。所有标记有相同数字的顶点都会在同一块中结束。

    在我看来,这是最简单的实现方法,但仍然会产生很好的拼图块。为了增加随机性,可以增加访问每个相邻顶点的概率。

    然而,任何“太随机”的方法都可能导致严重的凹面碎片,就像只有一长条三角形组成的非常长的碎片;以及有很深的丑陋的细切口的碎片。您可能需要指定另一个关于如何制作好的拼图块的问题(以及什么是好的拼图块!)如果你喜欢的话。

        2
  •  2
  •   Svante    15 年前

    你可以通过在边缘随机行走来制造裂缝,直到达到你想要的数量为止。如果你想拥有大部分大块,你可以通过减少靠近现有裂缝的边缘的吸引力来改变行走的随机性。

        3
  •  0
  •   graham.reeds    15 年前

    选择3个随机点并沿该平面拆分。有什么问题?

        4
  •  0
  •   Clearer    15 年前

    当沿着平面拆分三角形时,会出现以下两种情况之一:要么平面不与三角形中的任何一个线段相交,要么它正好与两个线段相交。只有相交的三角形才有趣。

    如果有三角形(a,b,c),其中a,b和c是顶点。

    假设平面与点D和E中的线段(A、B)和(A、C)相交。 定义b和c之间的顶点f(例如b+(c-b)/2),但b和c之间线段上的任何顶点都可以。

    你的新三角形如下 (a,d,e),(b,d,f),(d,e,f)和(c,e,f)

    推荐文章