2015-05-24 92 views
0

我正在努力研究如何以三維弧形運動將點A移動到B.運動的持續時間並不重要。我找到了一大堆的維基百科頁面,但是自從我上大學以來很久沒有理解它們了。任何代碼示例對我來說都是非常有用的。謝謝,我真的很感謝你的幫助。這裏有一張圖片顯示了我期望實現的目標,儘管圖片僅代表2d中的點,我正在尋找3D解決方案。將點A以三維弧形運動移動到點B

illustration

+1

「弧」,你的意思是確切的半圓?在2D中,在任何點之間都有兩種方法。在3D中,有無限多的 - 你想要哪一個? – Eric

回答

0

它,如果它的2D或3D不事關。 你採取每個點的位置,並找到中心beetwean他們。 距離beetwean中心,每個點是半徑。然後給物體一個移動的方向,並告訴它總是處於與中心相距半徑的距離。這是一個移動矢量,你可以給它任何你想要的方向。

1

假設你的問題的說法是:

給出點ab,跟蹤圓形路徑沿着位於切線up矢量飛機:

而且你有合適的載體代數庫:

def interp(a, b, up, t): 
    """ 0 <= t <= 1""" 

    # find center and radius vector 
    center = (a + b)/2 
    radius = a - center 

    # split path into upwards and downwards section 
    omega = math.acos(radius.dot(up)) # angle between center-a and center-top 
    t_top = omega/math.pi # time taken to reach the top 

    # redefine 0 as A, 1 as the top, and B as whatever remains linear 
    t = t/t_top 

    #slerp, with t intentionally > 1 
    sin = math.sin 
    return (
     center + 
     sin((1 - t) * omega)/sin(omega) * radius + 
     sin(t * omega)/sin(omega) * up 
    ) 
+0

明確聲明庫依賴關係將會很好。此外,我會使用與所需平面正交的矢量以及交叉乘積和左手或右手規則,而不是「上」 - 但是OP沒有詳細說明這一點... – mbschenkel

+0

@mbschenkel:我是沒有指定依賴性,因爲沒有人需要在這裏。 'numpy'是一種選擇,'pyeuclid'是另一種選擇。無論如何,是不是所希望的飛機最好用「向上」向量來標識?你能詳細說明一下嗎? – Eric

+0

我對python並不熟悉,所以非常感謝指針。有一個無限數量的「向上」向量,而與該平面正交的(單位)向量'v'是唯一的(實際上當然有兩個:'v'和'-v',但是這種模糊性可以用於定義旋轉方向)。'up'向量可以很容易地計算爲'up = vx(ab)',其中'x'是叉積。 – mbschenkel

相關問題