【发布时间】:2016-06-16 02:34:38
【问题描述】:
我们需要使用 c++ 在 X 或 Y 轴上重新调整 2D 多边形的大小。我做了一些搜索并阅读到在一个方向上重新调整大小会导致不可预测的结果并且是不可行的。我知道这可能适用于非曼哈顿多边形(非 90 边的多边形)。但是一维调整曼哈顿多边形或路径的大小会有问题吗?例如,如果它是简单的矩形,我应该能够增加宽度或高度。如果是曼哈顿多边形或路径,我们可以将其分解为矩形并在一维中重新调整每个矩形的大小吗?
我查看了 Boost 多边形和 Clipper,但我没有看到任何 API 可以仅在 X 或 Y 中调整多边形的大小。是否有任何支持此功能的软件或任何实现此功能的指针?
【问题讨论】:
-
“我做了一些搜索并阅读到,在一个方向上重新调整大小会导致不可预测的结果,并且不可行。” -- 能给个链接吗?这是一个相当奇怪的结论。
-
除非我们对“调整大小”的理解不同,否则绝对没有问题。更一般地,您可以对顶点应用任何仿射变换(X = ax+by+c,Y= dx+ey+f)。
-
感谢@Yves 的评论。这就是我想做的。你能提供它作为答案,我会接受它。如果您知道任何在 C++ 中提供此类功能的包,请将其添加到答案中。
-
我绝不会使用包来执行需要四行代码(包括大括号)的操作。
-
@Yves,感谢您的及时回复。我研究了仿射变换,它支持平移、剪切、缩放、旋转和这些操作的组合。我不确定它是否符合我的目的。例如如果我有一个单位正方形作为多边形,左下=(0,0)-右上=(1,1),当我在X中调整1个单位时,新多边形应该有LL=(-1,0 ) & TR=(2,1)。我没有看到使用仿射变换推导它的方法。
标签: c++ algorithm geometry polygon computational-geometry