Descobri por acaso uma característica de C# que até então me escapara.
A função em si é bem simples, tenho que alterar uma rotação com o tempo.
Assim que a cena começa (t = 0) o objeto tem rotação de 10º.
Após 30 segundos (t=30) a rotação tem de ser 90º.
Um pouco de Álgebra Linear:
Podemos representar essa equação na seguinte expressão:
rotacao = 8 / 3 * t + 10;
Maravilha!
Só que não.
Quando a cena atinge a marca dos 30 segundos a rotação do objeto é 70º.
Chequei meus cálculos. Estão corretos.
Substituo t por 30 no papel: o resultado é 90
Jogo a fórmula na calculadora: 90
Google: 90
Eis que percebo que meus números não são float.
Faço uma pequena alteração na expressão:
rotacao = 8f / 3f * t + 10f;
Funciona!
Uma vez que números inteiros não possuem casas decimais, em casos de divisão o C# trás uma aproximação, ignorando o resto da divisão.
Na prática, minha fórmula inicial foi calculada da seguinte forma:
Atenção aos tipos dos números que você utiliza.
A função em si é bem simples, tenho que alterar uma rotação com o tempo.
Assim que a cena começa (t = 0) o objeto tem rotação de 10º.
Após 30 segundos (t=30) a rotação tem de ser 90º.
Um pouco de Álgebra Linear:
Podemos representar essa equação na seguinte expressão:
rotacao = 8 / 3 * t + 10;
Maravilha!
Só que não.
Quando a cena atinge a marca dos 30 segundos a rotação do objeto é 70º.
Chequei meus cálculos. Estão corretos.
Substituo t por 30 no papel: o resultado é 90
Jogo a fórmula na calculadora: 90
Google: 90
Eis que percebo que meus números não são float.
Faço uma pequena alteração na expressão:
rotacao = 8f / 3f * t + 10f;
Funciona!
POR QUE O COMPORTAMENTO ESTRANHO?
Por padrão, números são tratados como Inteiros pelo C#.Uma vez que números inteiros não possuem casas decimais, em casos de divisão o C# trás uma aproximação, ignorando o resto da divisão.
Na prática, minha fórmula inicial foi calculada da seguinte forma: