2010-01-15 10 views
2

나는 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; 
    } 
} 
+0

x, y 및 z를 초기화 한 적이 있습니까? 귀하의 예에서는 0을 분명히 반환합니다. – Leif

+0

Math.Pow를 사용하는 대신 x * x + y * y + z * z를 사용하는 것이 좋습니다. 더 짧고 빠릅니다 ... – Spudd86

답변

5

난 그냥이와 코드를 설정하고 그것을 완벽하게 작동 시험 :

void Main() 
{ 
    var myData = new float3 
    { 
     x = 1, 
     y = 1, 
     z = 1 
    }; 
    float result = myData.GetMagnitude(); 
} 

내가 결과 1.73 ...

이 문제가 다른 것을 가능을 얻을? 작은 콘솔 앱을 만들고 코드를 삽입하여 코드를 분리 할 수 ​​있습니까?

+0

테스트를 거쳤습니다. 그것과 그것은 잘 일했다. – AaronLS

+1

매우 당혹 스럽네요. 네가 옳았고 내 검사가 아니었나 봐. 수업은 배웠다. 코드를 잘못했다고 주장하기 전에 다른 모든 것들을 제거하십시오. 사과하고 고마워. – User2400

관련 문제