나는 C# (아래 조각)에 벡터 클래스를 가지고있다. 제 문제는 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;
}
}
x, y 및 z를 초기화 한 적이 있습니까? 귀하의 예에서는 0을 분명히 반환합니다. – Leif
Math.Pow를 사용하는 대신 x * x + y * y + z * z를 사용하는 것이 좋습니다. 더 짧고 빠릅니다 ... – Spudd86