如何旋转始终与圆形路径相切的对象?

How to rotate an object always tangent to a circular path?

我最近开始学习计算机图形学,需要一些帮助。

我正在尝试以一种始终与路径相切的方式重现“棒”围绕圆形路径的旋转。我提供了一张图片来帮助说明所需的行为:

我尝试了一些方法,但从未成功过。下面是我最近测试的 gif 动图,其中小立方体代表棒应该绕着旋转但与路径相切的圆形路径。

我应用于对象世界矩阵的变换:

XMMATRIX mScale = XMMatrixScaling(0.3f, 0.3f, 0.3f);
XMMATRIX mOrbit = XMMatrixRotationY(-t * 2.0f);
XMMATRIX mDistance = XMMatrixTranslation(2.0f, 0.0f, 0.0f);
g_World1 = mScale * mDistance * mOrbit;

XMMATRIX mScale2 = XMMatrixScaling(4.0f, 0.3f, 0.3f);
XMMATRIX mOrbit2 = mOrbit;
XMMATRIX mDistance2 = XMMatrixTranslation(2.0f, 0.0f, 0.0f);
XMMATRIX mPosition2 = XMMatrixTranslation(2.0f, 0.0f, 0.0f);
g_World2 = mScale2 * mDistance2 * mOrbit2 * mPosition2;

你能帮我解决一下 directions/hints 我应该寻找什么来解决这个问题吗?

更新:

重现此步骤的步骤:

a) 下载项目Direct3D11Tutorials
b) 打开教程 5
c) 求出两个立方体的“世界矩阵”,用本post.

中提到的矩阵替换

谢谢!

我可以通过转换操纵杆的 Z 坐标而不是 X 来重现我想要的行为:

//small cube as reference
XMMATRIX mScale = XMMatrixScaling(0.1f, 0.1f, 0.1f);    
g_World1 = mScale;

//stick rotating around the small cube
XMMATRIX mScale2 = XMMatrixScaling(3.0f, 0.3f, 0.3f);
XMMATRIX mOrbit2 = XMMatrixRotationY(-t * 2.0f);
XMMATRIX mDistance2 = XMMatrixTranslation(0.0f, 0.0f, 3.0f);
g_World2 = mScale2 * mDistance2 * mOrbit2;

结果:

如果有人有其他更好的方法,请告诉我。