我正在试图弄清楚如何做到这一点。基本上我有A点和B点,我知道它的位置。然后我有点C和点D,我只知道C的坐标。我知道C-D的长度,并且知道C-D必须与A-B平行。如何给出A,B,C和C-D的长度,我通常如何解决?感谢
答案 0 :(得分:9)
D = C±(B-A)/ | B-A | * | C-D |
如果B = A,则没有解,因为线AB退化到某一点,并且没有定义线到点的平行线。
<强>解释强>
(B-A)/ | B-A |是单位长度的方向向量。乘以长度| C-D |得到适当的偏移矢量。
修改:将+更改为+以提供两种解决方案。增加了琐碎的案例B = A.
答案 1 :(得分:3)
这个答案与其他一些答案相似,但我认为更多地解释了数学,并且应该允许你更容易地将它合并到一个程序中。
您可以通过(Ay-By)/(Ax-Bx)
找到“已知”行的渐变(其中Ay
是A
的y坐标等)。让我们称之为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的值中增加或减去你的长度。
答案 2 :(得分:1)
介绍向量 v = A - B 。此方向与 C 和 D 之间的方向相同。因此 D = C +λ v ,我们只需要确定λ。 C 与 D 之间的距离已知, d 。但距离是 d = | D - C | = | C +λ v - C | = | λ| v ,其中 v = | v |是 v 的长度。因此| λ| = d / v使得λ=±d / v。
仅供参考,长度| 你 |矢量 u =(x,y)由|给出你 |毕达哥拉斯定理得= sqrt(x ^ 2 + y ^ 2)。
答案 3 :(得分:0)
了解A&amp; amp;的位置B,你可以很容易地找到AB线的长度和斜率。
要放置D,您需要知道线CD的长度和斜率。你已经知道了它的长度,因为它们是parellel,所以CD的斜率与AB的斜率相同。
答案 4 :(得分:0)
T(x)是点x
的平移如果T(a)= c,则T(b)= d
基本上,计算出从a到c所需的运动并将相同的函数应用于b。
编辑虽然从技术上讲,根据您提供给我们的信息,您只能计算d的两个不同位置,而不是一个。知道长度是不够的 - d可能是c的任何一方。
答案 5 :(得分:0)
这里有两个适用的公式。
第一个是斜率(上升超过运行),其中=(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
Yd = Yc + m(Xd-Xc)