我想弄清楚如何做到这一点。基本上我有点A和B,我知道的位置。然后我得到点C和点D,我只知道C的坐标。我知道C-D的长度并且知道C-D必须与A-B平行。我怎么能一般解决D给定的A,B,C和C-D的长度。感谢帮助解决这个问题?
alt text http://img706.imageshack.us/img706/4494/imgclr.png
我想弄清楚如何做到这一点。基本上我有点A和B,我知道的位置。然后我得到点C和点D,我只知道C的坐标。我知道C-D的长度并且知道C-D必须与A-B平行。我怎么能一般解决D给定的A,B,C和C-D的长度。感谢帮助解决这个问题?
alt text http://img706.imageshack.us/img706/4494/imgclr.png
d = C±(B-A)/ | B-A | * | C-D |
如果B = A,没有解决方案,因为AB线退化为某点的点,并未定义线的平行线。
说明
(B-A)/ | B-A |是单位长度的方向矢量。乘以长度| C-D |导致适当的偏移矢量。
编辑:将+改为±以提供两种解决方案。增加了微不足道的情况B = A。
正确。同样'C-(B-A)/ | B-A | * | C-D |'是一个解决方案(与'C'相反的方向)。 – phimuemue 2010-08-06 14:07:38
了解A & B的位置,您可以轻松找到AB线的长度和斜率。
要放置D,您需要知道CD的长度和斜率。你已经知道了长度,CD的斜率与AB的斜率相同,因为它们是相互平行的。
介绍矢量v = 甲 - 乙。该方向将与C和D之间的方向相同。因此,D = C +λ v,我们只需要确定&lambda ;. C和D之间的距离是已知的,d。但距离是d = | D - C | = | C +λ v - C | = | &拉姆达; | v,其中v = | v |是v的长度。因此| &拉姆达; | = d/v,这样λ =±d/v
FYI,长度| u |的矢量u =(x,y)由| u | = sqrt(x^2 + y^2),由毕达哥拉斯定理。
T(x)是在点的平移X
如果T的(a)= C,则T(B)= d
基本上,从锻炼来获得所需的运动到c并将相同的功能应用于b。
编辑:尽管从技术上讲,从您给我们的信息来看,您只能计算d的两个不同位置,而不是一个。知道长度是不够的 - d可能是c的任一侧。
这个答案与其他一些类似,但我想更多地解释数学,并且应该让你更容易地将它融入到程序中。
您可以通过执行(Ay-By)/(Ax-Bx)
(其中Ay
是yy坐标A
等)找到“已知”行的梯度。让我们把这个叫做M
,因为它是完全可计算的。
如果两条线是平行的,那么你可以计算出其他线路的以同样的方式梯度:
梯度= (Cy-Dy)/(Cx-Dx) = M
其中重排为(Cy-Dy) = M*(Cx-Dx)
我们也知道,C->D
是给定的长度(让我们称它为L)。所以我们可以说
(Cy-Dy)^2+(Cx-Dx)^2 = L^2
使用我们的梯度方程,我们可以替代获得:
(M^2+1)(Cx-Dx)^2 = L^2
鉴于我们知道什么是M,L和DX是,我们可以很容易地解决这个问题:
Cx = ((L^2)/(M^2+1))^0.5 + Dx
然后我们可以使用这个值Cx
以及任一方程(梯度可能是最简单的)来得到Cy
。
值得注意的是,最后一个等式有一个平方根,可以是正数或负数,所以您将得到Cx
的两个可能值,因此有两个可能值Cy
。这相当于从D
平行线上的两个相反方向上移动。
编辑:
正如评论指出,如果该行是垂直的,这将失败(即Ax-Bx = 0
)。你需要特殊的情况下,但在这种情况下,答案变成一个简单的情况,只是从Cy的值加上或减去你的长度。
这是一个更明确的解决方案。然而,它仅适用于特殊情况R^2。 – 2010-08-06 14:23:36
@彼得斯:这是真的。上图仅在R^2中。 ;-)我主要把这个答案放下来,因为如果OP声称具有NULL数学技能,我不确定他是否能够将基于矢量的解决方案翻译成代码。 – Chris 2010-08-06 14:36:05
那么,大多数PNG图像是平坦的......但是,通过R^3中的图片,图像的内容可以非常好。 – 2010-08-06 14:40:06
这里有两个公式适用。因为线段是平行的,所以第一个是斜率(上升越过),其中=(Yb-Ya)/(Xb-Xa)以及(Yd-Yc)/(Xd-Xc)。第二个是毕达哥拉斯定理,L^2 =(Xd-Xc)^ 2 +(Yd-Yc)^ 2,其中L是给定长度的C-D。
代表的斜率m和求解点D的X和Y值的产率(我认为)这两个公式的等式:
XD = XC +(L^2 /(1 + M^2))^0。5
收率= YC + M(XD - XC)
需求 “属于上mathoverflow” 关闭选项,但他们很可能火焰你问这样一个简单的问题:对 – meagar 2010-08-06 13:46:29
@meager:从我”已经看到,他们会停止燃烧,但他们可能有点居高临下。 :-) – 2010-08-06 13:50:42
我是个优秀的程序员,但是我的数学技能一直都是NULL – jmasterx 2010-08-06 13:51:10