2010-08-06 79 views
5

我想弄清楚如何做到这一点。基本上我有点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

+3

需求 “属于上mathoverflow” 关闭选项,但他们很可能火焰你问这样一个简单的问题:对 – meagar 2010-08-06 13:46:29

+1

@meager:从我”已经看到,他们会停止燃烧,但他们可能有点居高临下。 :-) – 2010-08-06 13:50:42

+1

我是个优秀的程序员,但是我的数学技能一直都是NULL – jmasterx 2010-08-06 13:51:10

回答

9

d = C±(B-A)/ | B-A | * | C-D |

如果B = A,没有解决方案,因为AB线退化为某点的点,并未定义线的平行线。

说明

(B-A)/ | B-A |是单位长度的方向矢量。乘以长度| C-D |导致适当的偏移矢量。

编辑:将+改为±以提供两种解决方案。增加了微不足道的情况B = A。

+3

正确。同样'C-(B-A)/ | B-A | * | C-D |'是一个解决方案(与'C'相反的方向)。 – phimuemue 2010-08-06 14:07:38

0

了解A & B的位置,您可以轻松找到AB线的长度和斜率。

要放置D,您需要知道CD的长度和斜率。你已经知道了长度,CD的斜率与AB的斜率相同,因为它们是相互平行的。

1

介绍矢量v = - 。该方向将与CD之间的方向相同。因此,D = C +λ v,我们只需要确定&lambda ;. CD之间的距离是已知的,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),由毕达哥拉斯定理。

0

T(x)是在点的平移X

如果T的(a)= C,则T(B)= d

基本上,从锻炼来获得所需的运动到c并将相同的功能应用于b。

编辑:尽管从技术上讲,从您给我们的信息来看,您只能计算d的两个不同位置,而不是一个。知道长度是不够的 - d可能是c的任一侧。

3

这个答案与其他一些类似,但我想更多地解释数学,并且应该让你更容易地将它融入到程序中。

您可以通过执行(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的值加上或减去你的长度。

+1

这是一个更明确的解决方案。然而,它仅适用于特殊情况R^2。 – 2010-08-06 14:23:36

+1

@彼得斯:这是真的。上图仅在R^2中。 ;-)我主要把这个答案放下来,因为如果OP声称具有NULL数学技能,我不确定他是否能够将基于矢量的解决方案翻译成代码。 – Chris 2010-08-06 14:36:05

+0

那么,大多数PNG图像是平坦的......但是,通过R^3中的图片,图像的内容可以非常好。 – 2010-08-06 14:40:06

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

收率= YC + M(XD - XC)