У меня есть векторный класс в С# (фрагмент ниже). Моя проблема в том, что когда я вызываю GetMagnitude(), он всегда возвращает 0.0f - даже при запущенном отладчике, и я проверяю, что Sq имеет допустимое значение, как только он будет передан обратно в другую функцию (например: Normalize()), он возвращает 0.0f. Может кто-нибудь объяснить это и помочь мне исправить это? Я предполагаю, что это имеет какое-то отношение к преобразованию double- > float, но я просто не могу это понять.
public class float3
{
public float x;
public float y;
public float z;
public float GetMagnitude()
{
float SumSquares = (float)( Math.Pow(x, 2) + Math.Pow(y, 2) + Math.Pow(z, 2));
float Sq = (float)Math.Sqrt(SumSquares);
return Sq;
}
public void Normalize()
{
float inverse = 1.0f / GetMagnitude();
x *= inverse;
y *= inverse;
z *= inverse;
}
}
Я только что проверил ваш код с этой настройкой, и он отлично работал:
void Main()
{
var myData = new float3
{
x = 1,
y = 1,
z = 1
};
float result = myData.GetMagnitude();
}
Получаю результат 1.73...
Возможно ли, что проблема в другом месте? Не могли бы вы создать небольшое консольное приложение и вставить этот код, чтобы изолировать его?