2009-07-05 33 views
3

在我目前的OpenGL項目中,我試圖讓鏈條的鏈接擁抱貝塞爾曲線的輪廓。我如何找到曲線上兩點之間的角度,以便我可以定位鏈條的鏈接,使它們跟隨曲線。如何找到貝塞爾曲線上兩點之間的角度?

Here是一張曲線和鏈條的圖片,我需要一些方法來旋轉鏈接,使它們跟隨曲線。

有沒有人知道如何做到這一點?

回答

4

也許像this是你所需要的。

How to calculate the tangent to a Bezier curve

這是很難在網上找到。它必須是知情者密切掌握的祕密。哦,你可以找到數學公式,但如果你不是數學家,可以很好玩的解釋它們。那麼,一個可憐的開發人員要做什麼?回到學校。

我花了兩天在我的頭骨上甩了這個。我把我的大腦搜索出來了(一旦我的頭骨被充分打碎,這一切就更容易了)。然後,一個美麗的星期六,我被我的開發人員的地下城掩藏着疲憊的骨頭。我把電視放在了我的前面,維基百科在右邊,我在這兩個人之間懶洋洋地切換。

Continue Reading...

+0

閱讀鏈接文章,我花費了所有時間試圖理解和編寫自己的貝塞爾曲線,突然間點擊進入。謝謝! – Liam 2009-07-06 09:57:43

0

讓貝塞爾曲線上的點爲A和B.對矢量AB進行歸一化,使其具有長度1.讓它成爲AB_norm。然後使用asin(AB_norm.y)或acos(AB_norm.x)來獲取角度。然後,0度的角度是向右的水平向量。 C風格的僞代碼如下:

get_angle(Point A, Point B) { 
    AB.x = B.x - A.x; 
    AB.y = B.y - A.y; 
    length = sqrt(AB.x * AB.x + AB.y * AB.y); 

    AB_norm.y /= AB.y/length; 
    angle = asin(AB_norm.y); 
    // or 
    // AB_norm.x /= AB.x/length; 
    // angle = acos(AB_norm.x); 
} 

angle = get_angle(A, B); 
glRotatef(angle, 0.0f, 0.0f, 1.0f); 
// Draw the chain link here 
0

您在這裏需要一些數學。你可以找到切線,正常和副法線向量,然後你可以找到角度。如果你仍然有興趣讓我知道,我有關於這個主題的一些細節。