在我的当前OpenGL项目中,我正在尝试使链条的链接紧贴Bezier曲线的轮廓。我应该如何找到曲线上两点之间的角度,以便我可以定位链条的链接,使它们沿着曲线运动。
这里是曲线和链条的图片,我需要一种方法来旋转链接,使它们沿着曲线移动。
有人知道如何做到这一点吗?
有人知道如何做到这一点吗?
这在网上很难找到。它必须是那些知道的人密切保持的秘密。哦,你可以找到数学公式,但如果你不是数学家,解释它们会很有趣。那么一个可怜的开发者该怎么办?回到学校。
我花了几天时间研究这个问题。我费尽了心思(当我的头骨受到足够的敲打后),我谷歌搜索了一番。然后,在一个明亮美丽的星期六,我躲在开发者的地下室休息我的疲惫骨头。我面前有电视,右边有维基百科,我懒洋洋地在两者之间切换。
让你的贝塞尔曲线上的点为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
这里需要一些数学。您可以找到切向量、法向量和副法向量,然后找到角度。如果您仍然感兴趣,请告诉我,我有关于这个主题的一些细节。