2012-03-08 45 views
0

我有由四个点,A,B,C和d,其中仅其位置是已知的形状。目标是将这些点变换为具有相对于彼此的特定角度和偏移量。最佳拟合方到四边形

例如:A(-1,-1) B(2,-1) C(1,1) D(-2,1),应将其转换为AB,BC,CD和AD之间的偏移量为2的完美正方形(所有角度为90°)。结果应为逆时针轻微旋转的正方形。

什么是最有效的方法来做到这一点? 我用这一个简单的块模拟程序。

+0

您没有提供足够的信息来给出一个明确的回答你的问题。例如,如果要将B移动到(1,-1),将D移动到(-1,1),则会有一个正方形(尽管不会旋转离开坐标轴)。你是否也许正在寻找一个方形来最小化你必须将你的4点平移到正方形的距离? – 2012-03-08 12:00:08

+0

我建议改变这个“最适合四边形的方形”,这样其他人会发现在搜索引擎中更容易。 – 2012-03-09 10:31:50

回答

1

正如马克暗示,我们可以使用约束优化找到侧2平方米,为原来的角落的距离的平方最小。

我们需要尽量减少f = (a-A)^2 + (b-B)^2 + (c-C)^2 + (d-D)^2(其中方实际上是向量参数的点产品,本身)受到一些限制。

Lagrange multipliers的方法,我选择了追随距离限制:

g1 = (a-b)^2 - 4 
g2 = (c-b)^2 - 4 
g3 = (d-c)^2 - 4 

及以下角度约束:

g4 = (b-a).(c-b) 
g5 = (c-b).(d-c) 

快速餐巾纸草图应该说服你,这些限制就足够了。

然后,我们希望尽量减少˚F受G的全部为零。

拉格朗日函数是:

L = F +萨姆(i = 1至5,李GI)

其中li s为拉格朗日乘子。

渐变是非线性的,所以我们必须采取粗麻布并使用multivariate Newton's method迭代到解决方案。

这是我得到了解决(红色)给出的(黑色)的数据:

Best fit square

这花了5次迭代,该步骤的L2标准之后是6.5106e-9。

+0

+1:我不想写这么好的答案,你是SO社区的功劳。 – 2012-03-09 10:31:17

+0

@HighPerformanceMark:谢谢! – 2012-03-09 10:34:03

+0

正是我需要的。接受这个答案。 – RPFeltz 2012-03-12 09:00:14