如何找到贝塞尔曲线上两点之间的角度?

发布于 2024-07-25 23:58:11 字数 227 浏览 7 评论 0原文

在我当前的 OpenGL 项目中,我试图使链条的链接紧贴贝塞尔曲线的轮廓。 如何找到曲线上两点之间的角度,以便我可以定位链条的链接,使它们沿着曲线移动。

这里是曲线和链条的图片,我需要一些旋转链接的方法,以便他们遵循曲线。

这里有人知道该怎么做吗?

In my current OpenGL project I am trying to make the links of a chain hug the contours of a Bezier curve. How can I find the angle between two points on the curve so that I can position the links of the chain so that they follow the curve.

Here is a picture of the curve and chain, I need some way of rotating the links so that they follow the curve.

Does anybody here know how to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

半枫 2024-08-01 23:58:11

也许类似 this 就是您所需要的。

如何计算贝塞尔曲线的切线< /p>

这个在网上很难找到。 这一定是知情者所保守的秘密。 哦,你可以找到数学公式,但如果你不是数学家,解释它们会很有趣。 那么,一个贫穷的开发商该怎么办呢? 回学校吧。

我花了几天时间为这个问题绞尽脑汁。 我用谷歌搜索了我的大脑(一旦我的头骨被充分撞击,这就更容易了)。 然后在一个阳光明媚的星期六,我躲在开发人员的地牢里休息我疲惫的骨头。 我的面前是电视,右边是维基百科,我懒洋洋地在观看它们之间切换。

继续阅读...

Maybe something like this is what you need.

How to calculate the tangent to a Bezier curve

This is hard to find online. It must be a secret closely held by those who know. Oh you can find the math formulae, but have fun interpreting them if you are not a mathematician. So what is a poor developer to do? Go back to school.

I spent a couple days bashing my skull over this one. I googled my brains out (which was easier once my skull was sufficiently bashed). Then one bright beautiful Saturday, I was holed up in my developer's dungeon resting my weary bones. I had the TV on in front of me and Wikipedia to the right and there I was lazily switching between watching them both.

Continue Reading...

路弥 2024-08-01 23:58:11

令贝塞尔曲线上的点为 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

Let the points on your bezier curve be A and B. Normalize the Vector AB so it has length 1. Let this be AB_norm. Then use asin(AB_norm.y) or acos(AB_norm.x) to get the angle. An angle of 0 degrees is a horizontal vector to the right, then. C-style pseudocode follows:

 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
甜是你 2024-08-01 23:58:11

你需要一些数学知识。 您可以找到切线、法线和副法线向量,然后可以找到角度。 如果您仍然感兴趣,请告诉我,我有关于此主题的一些详细信息。

You need some math here. You can find tangent, normal, and binormal vectors, and then you can find the angle. If you are still interested let me know, I have some details on this topic.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文