2015-10-08 4 views
1

Я сделал куб в DirectX, но теперь я хочу, чтобы куб перемещался. Я хочу, чтобы этот куб перемещался по шаблону Лиссажу. Но по какой-то причине независимо от того, какие переменные я вхожу в свой куб, просто создаются круги вместо фигуры Лиссажу.Lissajous figure in Direct3D

Я не знаком с этой функцией, и я искал ответы, но я не могу исправить свою проблему. Так может быть, я допустил ошибку в функции, или, может быть, я делаю все совершенно неправильно.

Это код, который я использую для вычисления позиции, где 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)); 

ответ

0

Liassajous цифры - всего лишь интерференция различных колебаний. Колебания могут быть описаны как:

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, вы получите следующий рисунок:

Lissajous 2:1

Или для frequencyRatio = 5.0f/4.0f и phaseDifference = 0:

enter image description here

+0

Большое спасибо за объяснение, еще один вопрос ты gh, если вы измените разность фаз, что именно на графике изменится? Или это диапазон оси х? – user3678781

+0

Фаза приводит к виду вращения фигуры. То есть если у вас коэффициент частоты 1 и разность фаз Pi/2, вы получаете круг. Если вы увеличиваете разность фаз, кружок преобразуется в диагональную линию (как если бы вы смотрели на круг со стороны, где он плоский). Просто [попробуйте] (http://www.wolframalpha.com/input/?i=ParametricPlot%5B%7BSin%5B2*Pi+*+3t+%2B+Pi%2F2%5D%2CSin%5B2+*+Pi+* + T% 5D% 7D% 2C% 7Bt% 2C0% 2C1% 7D% 5D). –

+0

Это точно объясняет, почему в некоторых попытках сделать фигуру она просто пошла слева направо – user3678781