在我目前的OpenGL项目中,我试图让链条的链接拥抱贝塞尔曲线的轮廓。如何找到曲线上两点之间的角度,以便我可以定位链的链接,使它们跟随曲线。
Here是曲线和链条的图片,我需要某种方式来旋转链接,使它们跟随曲线。
这里有人知道怎么做吗?
答案 0 :(得分:4)
也许像this这样的东西就是你所需要的。
How to calculate the tangent to a Bezier curve
这很难在网上找到。它必须是那些知道的人密切关注的秘密。哦,你可以找到数学公式,但如果你不是数学家,可以很好地解释它们。那么可怜的开发人员应该做些什么呢?回到学校。
我花了几天时间抨击我的头骨。我用脑子搜索了脑袋(一旦我的头骨被充分殴打,这就更容易了)。然后是一个明亮美丽的星期六,我被我的开发者的地牢躲在我疲惫的骨头里。我把电视放在我面前,而维基百科放在右边,在那里我懒洋洋地在看着它们之间切换。
答案 1 :(得分:0)
让bezier曲线上的点为A和B.将Vector 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
答案 2 :(得分:0)
你需要一些数学。您可以找到切线,法线和副法线矢量,然后就可以找到角度。如果您仍然感兴趣,请告诉我,我有关于此主题的一些细节。