Direct3D中的Lissajous数字

时间:2015-10-08 14:15:53

标签: c++ c++11 directx direct3d direct3d11

我在DirectX中制作了一个立方体,但现在我希望立方体能够移动。我希望这个立方体以Lissajous模式移动。但出于某种原因,无论我输入我的立方体的变量是什么,只是制作圆圈而不是利萨茹的形象。

我不熟悉这个功能,而且我一直在寻找答案,但我似乎无法解决我的问题。所以我可能在函数中犯了一个错误,或者我可能完全错误。

这是我用来计算位置的代码,其中m_Angle每帧都会改变,因此立方体一直在移动。

    float scale = 3.f;
    float valueA = 1.0f;
    float valueB = 2.0f;
    float valueX = scale * valueA * sin(m_Angle + ((valueB - 1) / valueB)*(XM_PIDIV2));
    float valueZ = scale * valueB * sin(m_Angle);
    m_pColoredCube_1->SetPos(XMFLOAT3(valueX, 0.0f, valueZ));

1 个答案:

答案 0 :(得分:0)

Liassajous数字只是不同振荡的干扰。振荡可以描述为:

y(t) = amplitude * sin(2 * PI * frequency * t + phase)

在您的情况下,tm_Angle

然后,您为xz组件设置了不同的振荡(也可能为y组件设置了不同的振荡)。如果将两个频率设置为相等(就像您所做的那样),则会得到一个圆或椭圆,具体取决于相位。你想要做的是:

float frequencyRatio = ...;
float phaseDifference = ...;
float valueX = scale * sin(m_Angle * frequencyRatio + phaseDifference);
float valueZ = scale * sin(m_Angle);

如果您设置frequencyRatio = 2.0fphaseDifference = 0,则会显示以下数字:

Lissajous 2:1

frequencyRatio = 5.0f / 4.0fphaseDifference = 0

enter image description here