c++ - Direct3D 中的利萨如图形

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

我在 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));

最佳答案

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

关于c++ - Direct3D 中的利萨如图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33018372/

相关文章:

c++ - 使用统一初始化构造对象的简单程序编译失败

c++ - 如何解开 C++ lambda 的错位名称?

c++ - 为什么右值不能分配给 constexpr 引用变量

c++ - 绘图时忽略颜色

c++ - 创建交换链失败

c++ - 您如何找到程序中最不优化的部分?

c++ - 编译器构造 : Handle references to unordered symbols

c++ - 为什么 OpenCV 的级联分类器检测会给出太大的输出?

c++ - push_back on 2D std::vector< std::vector<char*>> value made all the values are the same

c# - 在哪里可以获得 Microsoft.DirectX.dll?