我对算法有疑问:
我们在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之间的距离最小化。
答案 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。