2009-07-05 181 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

您在这里需要一些数学。你可以找到切线,正常和副法线向量,然后你可以找到角度。如果你仍然有兴趣让我知道,我有关于这个主题的一些细节。