找到最小化给定空间点和约束点的距离的点?

时间:2012-12-02 22:00:15

标签: algorithm coordinates computational-geometry trigonometry mathematical-optimization

我对算法有疑问:

我们在2D空间中有一个固定点,我们称之为S(x,y)和两个链接的长度(L1和L2)。这两个链路连接在一个称为E(x,y)的公共连接处。我们在空间中有另一个点,即L2的终点,我们称之为F(x,y)。

所以我们L1有两个终点S和E,其中L2有E和F.

当我们在空间中给出点P(x,y)时。我们怎样才能找到最接近P的F(x,y)的坐标?我想找到θ1和θ2的角度,它将链路L1和L2带到那个点?

See this link to get the graphical representation of my problem


请参阅此图片http://postimage.org/image/qlekcv1qz/,您可以在那里看到我现在遇到的真正问题。

所以我把它描述为优化问题。目标函数是:

   * arg min |P-F| 

约束θ1和θ2其中θ1∈[O,π]和θ2∈[O,π/ 2]。

所以我们有,

   * xE = xS + L1  * Cosθ1  and yE = yS + L1 * Sinθ1
   * xF = xE + L2 * Cos (θ1 + θ2 )  and yF = yE + L2 * sin ( θ1 + θ2)

这里我们有L1 = 105和L2 = 113.7的长度,而点S是原点,即xS = O和yS = O。

你能否提示如何编码我的函数或任何优化问题,它给出了θ1和θ2的值,使点F和点P之间的距离最小化。

1 个答案:

答案 0 :(得分:1)

因此,如果我理解正确,你的描述相当于有两根长度为L1和L2的刚性杆,L1的一端固定在S处,另一端通过柔性接头连接到L2(在某个未定义的点E处) ,你想让L2的另一端(点F)尽可能接近某个点P.如果是这种情况,那么:

 If |L1-L2| < |P-S| < |L1+L2| then F = P
 If |L1-L2| > |P-S| then F = S + (P-S)*|L1-L2|/|P-S|
 If |P-S| > |L1+L2| then F = S + (P-S)*|L1+L2|/|P-S|

这就是你想要的吗?

见imnage http://postimage.org/image/l1ktt0qtb/

如果点P比距离| L1-L2 |更接近点S. (假设它们是不相等的),那么即使E的角度弯曲到180度,点F也不能“到达”P点。然后你可以得到的最接近的是半径为| L1-L2 |的圆上的某个地方在这种情况下,最佳F由具有方向(P-S)的矢量和大小| L1-L2 |,我的情况2和上面的图A给出。请注意,如果L1 = L2,情况永远不会如此。

如果点P距离点S比距离| L1 + L2 |更远,则即使在E处的角度被拉直到0度,点F也不能“到达”点P.然后,你可以得到的最接近的是半径为| L1 + L2 |的圆上的某个地方在这种情况下,最好的F由方向(P-S)和大小| L1 + L2 |,我的情况3和上面的图B给出。

如果点P位于两个限制圆之间,那么将有两个解(一个如下图3所示,另一个具有L1和L2反射在镜像线中,由矢量PS引导。在这种情况下, '最佳'F 等于指向P.

如果你想知道角度Theta1和Theta 2,那么这是一个不同的问题(我看到你现在已经添加了它)。

对没有直角的三角形使用余弦规则。

规则是

 C = acos[(a^2 + b^2 - c^2)/(2ab)]

其中三角形的边长为a,b和c,C为边a和b之间的角度。你试图生成一个边长为l1,l2和d = | S-P |的三角形,只要没有两个长度(总和)比第三个长度短,就可以生成。

通过将l1,l2和d替换为a,b,anc c,您将能够求解每个内部角度A,B和C.然后您可以使用这些角度A,B,C加上向量PS和水平之间的角度(也许叫D?)来计算你的theta1和theta2。