在我目前的OpenGL項目中,我試圖讓鏈條的鏈接擁抱貝塞爾曲線的輪廓。我如何找到曲線上兩點之間的角度,以便我可以定位鏈條的鏈接,使它們跟隨曲線。如何找到貝塞爾曲線上兩點之間的角度?
Here是一張曲線和鏈條的圖片,我需要一些方法來旋轉鏈接,使它們跟隨曲線。
有沒有人知道如何做到這一點?
在我目前的OpenGL項目中,我試圖讓鏈條的鏈接擁抱貝塞爾曲線的輪廓。我如何找到曲線上兩點之間的角度,以便我可以定位鏈條的鏈接,使它們跟隨曲線。如何找到貝塞爾曲線上兩點之間的角度?
Here是一張曲線和鏈條的圖片,我需要一些方法來旋轉鏈接,使它們跟隨曲線。
有沒有人知道如何做到這一點?
也許像this是你所需要的。
How to calculate the tangent to a Bezier curve
這是很難在網上找到。它必須是知情者密切掌握的祕密。哦,你可以找到數學公式,但如果你不是數學家,可以很好玩的解釋它們。那麼,一個可憐的開發人員要做什麼?回到學校。
我花了兩天在我的頭骨上甩了這個。我把我的大腦搜索出來了(一旦我的頭骨被充分打碎,這一切就更容易了)。然後,一個美麗的星期六,我被我的開發人員的地下城掩藏着疲憊的骨頭。我把電視放在了我的前面,維基百科在右邊,我在這兩個人之間懶洋洋地切換。
讓貝塞爾曲線上的點爲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
您在這裏需要一些數學。你可以找到切線,正常和副法線向量,然後你可以找到角度。如果你仍然有興趣讓我知道,我有關於這個主題的一些細節。
閱讀鏈接文章,我花費了所有時間試圖理解和編寫自己的貝塞爾曲線,突然間點擊進入。謝謝! – Liam 2009-07-06 09:57:43