Direct3D 中的利萨如图形
Lissajous figure in Direct3D
我在 DirectX 中制作了一个立方体,但现在我想让立方体四处移动。我希望这个立方体以李萨如模式移动。但出于某种原因,无论我输入什么变量,我的立方体都只会生成圆圈而不是李萨如图形。
我不熟悉这个功能,我一直在寻找答案,但似乎无法解决我的问题。所以可能是我在函数中犯了错误,或者我做的一切都完全错误。
这是我用来计算位置的代码,其中 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));
利亚萨如图形只是不同振荡的干涉。振荡可以描述为:
y(t) = amplitude * sin(2 * PI * frequency * t + phase)
在你的例子中,t
是 m_Angle
。
然后为 x
和 z
组件设置不同的振荡(也可能为 y
组件)。如果您将两个频率设置为相等(就像您所做的那样),您会得到一个圆形或椭圆形,具体取决于相位。您要做的是:
float frequencyRatio = ...;
float phaseDifference = ...;
float valueX = scale * sin(m_Angle * frequencyRatio + phaseDifference);
float valueZ = scale * sin(m_Angle);
如果设置frequencyRatio = 2.0f
和phaseDifference = 0
,则得到下图:
或 frequencyRatio = 5.0f / 4.0f
和 phaseDifference = 0
:
我在 DirectX 中制作了一个立方体,但现在我想让立方体四处移动。我希望这个立方体以李萨如模式移动。但出于某种原因,无论我输入什么变量,我的立方体都只会生成圆圈而不是李萨如图形。
我不熟悉这个功能,我一直在寻找答案,但似乎无法解决我的问题。所以可能是我在函数中犯了错误,或者我做的一切都完全错误。
这是我用来计算位置的代码,其中 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));
利亚萨如图形只是不同振荡的干涉。振荡可以描述为:
y(t) = amplitude * sin(2 * PI * frequency * t + phase)
在你的例子中,t
是 m_Angle
。
然后为 x
和 z
组件设置不同的振荡(也可能为 y
组件)。如果您将两个频率设置为相等(就像您所做的那样),您会得到一个圆形或椭圆形,具体取决于相位。您要做的是:
float frequencyRatio = ...;
float phaseDifference = ...;
float valueX = scale * sin(m_Angle * frequencyRatio + phaseDifference);
float valueZ = scale * sin(m_Angle);
如果设置frequencyRatio = 2.0f
和phaseDifference = 0
,则得到下图:
或 frequencyRatio = 5.0f / 4.0f
和 phaseDifference = 0
: