gpt4 book ai didi

trigonometry - 用任意点找到两条平行线之间的最短距离

转载 作者:行者123 更新时间:2023-12-04 04:16:04 25 4
gpt4 key购买 nike

关闭。这个问题是off-topic .它目前不接受答案。












想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。

8年前关闭。




Improve this question




我需要写一个 可靠 检索以下场景答案的方法...

给定一个线段 AB 和一个任意点 C,我如何在平行于通过点 C 的 AB 的线上找到最接近 A 的点? (上面提到的可靠是指算法能够找到 D,同时允许 A、B 和 C 的坐标完全任意和不可预测。我遇到了很多我无法适应的解决方案可能的情况,可悲的是......)

对于下图中显示的数据,我如何可靠地找到 D 的 x,y 坐标?

A = <425, 473>
B = <584, 533>
C = <371, 401>
D = <???, ???>

知道 AB 和 CD 是平行的,这显然意味着斜率相同。

我尝试了许多不同的公式都无济于事,并且已经为此努力了数周。我难住了!

diagram

最佳答案

这是一个最小化问题。

一般来说,N维空间中两点(A和B)之间的欧几里得距离由下式给出
Dist(A,B) = sqrt((A1-B1)^2 + ... + (AN-BN)^2)

如果你需要找到一条空间曲线 A(t)(一个嵌入在某个 N 维空间中的一维物体)和一个点 B 之间的最小距离,那么你需要解这个方程:

d Dist(A(t),B) / dt = 0    // (this is straightforward calculus: we're at either a minimum or maximum when the rate of change is 0)

并根据距离函数测试这组根(t1、t2 等),以找出哪个根产生 D 的最小值。

现在找到以 y=mx+b 形式通过 C 的平行线的方程:
m = (Ay - By)/(Ax-Bx)
b = Cy - mCx

让我们把它写成空间曲线的形式,并将它插入我们第 1 部分的公式中:
Dist(D(t),A) = sqrt((t-Ax)^2 + (m*t+b-Ay)^2)

取我们的导数:
d Dist(D(t),A)/ dt = d sqrt((t-Ax)^2 + (m*t+b-Ay)^2) / dt 

= (t + (m^2)*t - Ax + m*b - m*Ay)/sqrt(t^2 + (m^2)t^2 - 2*t*Ax + 2*m*t*b - 2*m*t*Ay + (Ax)^2 + (Ay)^2 + b^2 - 2*b*Ay )
= ((1+m^2)*t - Ax + m*b - m*Ay)/sqrt((1+m^2)*(t^2) + 2*t*(m*b - Ax - m*Ay) + (Ax)^2 + (Ay)^2 + b^2 - 2*b*Ay )

将 this 设置为 0 并求解 t 产生:
t = (Ax-m*b+m*Ay)/(1+m^2)
作为唯一的根(您可以通过替换回并验证所有内容是否按需要取消来自己检查)。

将这个 t 值重新插入我们的空间曲线会产生以下结果:
D=<(Ax-m*b+m*Ay)/(1+m^2),b+m*(Ax-m*b+m*Ay)/(1+m^2)>

然后,如果您想要 A、B、C 方面的显式解,或者如果您只想要数值解,则可以插入 m 和 b 的表达式,只需将其计算为三步过程:
m = (Ay - By)/(Ax-Bx)
b = Cy - mCx
D=<(Ax-m*b+m*Ay)/(1+m^2),b+m*(Ax-m*b+m*Ay)/(1+m^2)>

这将适用于所有具有平行直线的情况。将其作为数字(而不是分析)代码实现时的一个警告:如果线条垂直定向,计算 m = (Ay-By)/(Ax-Bx) 将导致除以 0,这将使您的代码无法工作.您可以按如下方式放入安全阀:
if( Ax == Bx) {
D = <Cx,Ay>
} else {
// normal calculation here
}

对于严肃的数值工作,您可能希望在容差方面实现它,而不是由于舍入误差和所有有趣的东西(即 abs(Ax-Bx) < epsilon,而不是 Ax==Bx)而进行的直接比较

关于trigonometry - 用任意点找到两条平行线之间的最短距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15848421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com