【发布时间】:2020-08-02 21:49:05
【问题描述】:
我收到以下几点作为输入:
Point A(200 ; 400)
Point B(400 ; 400)
Point C(400 ; 200)
Point D(600 ; 200)
Point E(700 ; 500)
Point F(500 ; 700)
Point G(200 ; 600)
这些点构成了要绘制的线段 AB、BC、CD、DE、EF、FG 和 GA 那样:
现在我的任务是编写一个自动缩放算法,基于 确定实际段长度的最接近的数字:
因为我必须自己决定限制条件,所以我决定尽力而为 保持角度完整。首先,我确定最长的段以便 建立一个比例(即“标记长度 6”= 250px,然后标记 长度 1 ~= 41.7)。
然后我处理下一个更短的片段,从它的中心重新调整它,然后应用 相同的向量翻译到它的邻居。
这是我现在能得到的最好的输出:
但是这种方法最终会陷入无限循环,或者说真的不准确 在其他情况下,尤其是当线条是手绘且不完美时 直。
是否有众所周知的算法来解决这种情况?我没有任何线索 在搜索一些几何库(如 GEOS)时从哪里开始, libigl, ...
【问题讨论】:
-
我不确定我是否理解。预期的输出究竟是什么?缩放不是简单地将所有段乘以一个常数因子吗?如果是这种情况,那么您通过说
-Point A坐标平移所有点(即您移动到局部坐标),然后将所有点乘以常数 C,最后您通过+Point A坐标平移回来(即您移动回全局坐标)坐标)。如果您希望缩放以Point A以外的其他点为中心,则只需选择一个。所有点的算术平均值也是一个有效的选择。无论哪种方式,您都需要知道中心在哪里。 -
如果你保留角度,我看不出这会如何工作。例如:取一个正方形并将对边重新缩放为 6 和 3。
-
@freakish 假设有人在绘制平面图,然后在纸上没有足够的空间来绘制矩形,迫使自己绘制正方形。他们所能做的就是通过标记来定义段的长度。这是预期和已经实现的一个简单示例,当然,当所有段都被标记时,我不必处理这种情况:imgur.com/a/A4y1N63
-
@Botje 你好,见上图(一次只能通知一个人)
标签: c++ algorithm math geometry linear-algebra