Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 正多边形的高效排样算法_Algorithm_Math_Triangulation_Tesselation - Fatal编程技术网

Algorithm 正多边形的高效排样算法

Algorithm 正多边形的高效排样算法,algorithm,math,triangulation,tesselation,Algorithm,Math,Triangulation,Tesselation,我正在寻找一种打包算法,它可以将正多边形简化为矩形和直角三角形。该算法应尽量少使用此类形状,且应相对容易实现(考虑到挑战的难度) 如果可能,这个问题的答案应该解释建议算法中使用的一般启发式 这并不是特别的矩形+直角三角形,但是研究多边形镶嵌的一个好的研究点是和 事实上,如果“刚好正确的三角形”足够好的话,这些三角形可以保证为您进行三角剖分,如果您真的需要,您可以随时将任何三角形拆分为两个正确的三角形。或者你可以切掉三角形的“尖端”来制作更多的直角三角形和一些矩形 如果你知道你有非常规则的多边形,

我正在寻找一种打包算法,它可以将正多边形简化为矩形和直角三角形。该算法应尽量少使用此类形状,且应相对容易实现(考虑到挑战的难度)


如果可能,这个问题的答案应该解释建议算法中使用的一般启发式

这并不是特别的矩形+直角三角形,但是研究多边形镶嵌的一个好的研究点是和

事实上,如果“刚好正确的三角形”足够好的话,这些三角形可以保证为您进行三角剖分,如果您真的需要,您可以随时将任何三角形拆分为两个正确的三角形。或者你可以切掉三角形的“尖端”来制作更多的直角三角形和一些矩形

如果你知道你有非常规则的多边形,你也可以通过径向扫描,或者通过“剪切最大的凸块”来尝试。然后,将每个剩余三角形拆分为两个以创建直角三角形


(来源:)

您可以尝试通过一种方式扫掠,然后另一种方式扫掠,以形成一个梯形并以不同的方式将其拆分,从而减少中断,但是您必须进行检查,以确保扫掠线没有在某个地方穿过另一条线。你总是可以用耳夹,即使有一些几乎是分形的东西


但是,这有时会创建非常细长的三角形。您可以执行启发式操作,如“取最大值”,而不是沿边缘连续剪切,但这需要更多时间,接近O(n^2)。在大多数情况下,Delaunay/Vornoi可以更快地完成这项工作,减少三角形的长度。

你可以尝试“切掉”,留下一些剩菜。不断地在剩菜上剪下矩形,直到你得到三角形的部分为止。然后,如果需要,可以将它们拆分为两个直角三角形。我不知道这样做是否总能产生能使矩形和直角三角形数量最少的解决方案。

我认为对于正多边形来说,答案相当简单

找到对称轴,并在每个顶点及其镜像之间绘制一条线。这将多边形划分为梯形。每个梯形可以变成一个矩形和两个直角三角形


这是一门算法课还是一门计算机图形学课?这不是一门课。我没有上学。事实上,如果能为iPhone、Mac桌面和.net编程,我可能愿意给能很好地回答这个问题的人提供一份工作谢谢,我现在为自己工作,但我会记住你的。:-)绝对必须是矩形和直角三角形。我知道这听起来很奇怪,但这是用户需求。更新。你可以很容易地将任何三角形转换成直角三角形和矩形。Delaunay三角剖分在这里并不理想,因为它们在中间引入了额外的、不必要的点。这些内部点中的每一个都可以“拖动”到相邻的多边形顶点,留下一组较小的三角形。通过证明这会产生最小数量的平铺,您可以获得一些额外的积分。:)我现在认为这实际上是最优的:-)不,它并不总是最优的。以一个正六边形为例,其两侧平行于x=0轴。然后该算法生成2个矩形和4个直角三角形,但1个矩形和4个三角形就足够了。尽管如此,该解决方案可能足够好且易于实现。如果您足够小心,首先沿最长弦“拆分”多边形(生成矩形),则会生成1个矩形+2个三角形。@Mau OP指定三角形需要有直角(即90度)。因此,不能将正六边形拆分为一个矩形和两个直角三角形。在其他情况下,算法会产生一个额外的矩形,例如,一个对齐的矩形八角形,使角与中心成0、45、90等角度。同样,如果解决方案的简单性很重要,这可能无关紧要。我认为这也不是一个好主意:用第一个矩形尽可能多地消耗面积不会让你在以后得到“最简单”的形状。不清楚他的要求是什么。最小总形状或最小形状中的最大面积…但是对于规则多边形,它仍然会给你“漂亮”的形状。同样,我不知道这是否会给你提供“最佳”的解决方案。