0

我有一个关于算法的问题:

我们在 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) 的坐标?我想找到将链接 L1 和 L2 带到那个点的 θ1 和 θ2 的角度?

请参阅此链接以获取我的问题的图形表示


请参阅这张图片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 之间的距离最小化。

4

1 回答 1

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 比点 S 更接近 |L1-L2| (假设它们不相等),那么点 F 不能“到达”点 P,即使 E 处的角度弯曲到 180 n 度。那么你能得到的最接近的是半径为|L1-L2|的圆上的某个地方。和中心 S。在这种情况下,最佳 F 由具有方向 (PS) 和幅度 |L1-L2| 的向量给出,上面是我的案例 2 和下面的图 A。请注意,如果 L1=L2,则永远不会出现这种情况。

如果点 P 与点 S 的距离大于距离 |L1+L2|,则点 F 不能“到达”点 P,即使 E 处的角度被拉直为 0 度。那么你能得到的最接近的是半径为 |L1+L2| 的圆上的某个地方。和中心 S。在这种情况下,最佳 F 由具有方向 (PS) 和幅度 |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=|SP| 的三角形,只要没有两个长度(总和)比第三个短,这将是可能的。

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

于 2012-12-02T22:35:11.730 回答