-2

我正在尝试计算一条线上的点。我得到了边缘的点以及一个边缘到我想要找到的点(即 B)之间的距离。

A(2,4)
B(x,y)
C(4,32)

A 到 B 之间的距离为 5。

如何计算 Bx 和 By?使用以下等式:

d = Math.Sqr((Bx-Ax)^2 + (By-Ay)^2)
d = Math.Sqr((Cx-Bx)^2 + (Cy-By)^2)

然后比较上面的等式。


这是放置点的方程:

5 = Math.Sqr((Bx-2)^2 + (By-4)^2)
23.0713366 = Math.Sqr((4-Bx)^2 + (32-By)^2)

或者

Math.Sqr((Bx-2)^2 + (By-4)^2) - 5 = Math.Sqr((4-Bx)^2 + (32-By)^2) - 23.0713377

如何使用 VBA 解决这个问题?


谢谢!

4

2 回答 2

2

我不会解决你上面的方程,因为它们是一种不必要的复杂方式来说明问题(并且在存在舍入的情况下解决方案的存在是有问题的),但是线上的所有点A=(Ax,Ay)C=(Cx,Cy)可以描述B=(Ax,Ay) + t*(Cx-Ax,Cy-Ay)t介于01.

B和之间的距离A然后由 给出d=t*Sqrt((Cx-Ax)^2+(Cy-Ay)^2),您可以将其反转以获得t给定的正确值d-t=d/Sqrt((Cx-Ax)^2+(Cy-Ay)^2)

在您的情况下,B(t) = (2,4) + t*(2,28), t=5/Sqrt(2^2+28^2) ~ 0.178-> B ~ (2,4) + 0.178 * (2,28) ~ (2.356, 8.987)

于 2011-09-28T15:11:27.633 回答
0

VBA 没有符号语言功能。为了解决这个问题,有不同的方法:

  1. 变换方程以隔离最有可能使用替换的未知数之一,并计算它(我推荐这个来解决你的问题。)
  2. 转换你的函数并派生它们以使用牛顿的方法(不要这样做,它是矫枉过正的。)
  3. 使用“蛮力”收敛方法:为每个变量固定一个最小值/最大值,并使用二分法找到你想要的(我不推荐这样做,因为你很可能会“陷入”你的局部最小值/最大值案子。)

所以基本上,我会说你选择第一种方式。它需要 15 分钟修改数学方程,然后你就可以开始了。

于 2011-09-28T16:11:15.237 回答