2010-08-06 130 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)