2014-10-02 2 views
0

수학에서 나쁘지 않다고 생각합니다. 간단한 수학 거리 수식을 코드로 변환하는 것이 어려울 것이라고 생각합니다. 하기. 나는 분명히 그렇게하지 않는다. 간단히 말해서, 두 개의 3D 점 사이의 거리를 계산해야하고 어떤 이유로 든 수식이 올바르게 작동하지 않습니다. 나는 그것이 잘못 작성했는지 또는 무언가가 꺼져있는지를 알지 못합니다. 왜냐하면 여러 번 작성했기 때문에 여전히 올바르게 작동하지 않기 때문입니다.0의 값을 반환하는 Math.pow 및 Math.sqrt 수식

이것은 내가 모든 변수는 루프와 (I 중첩 for 루프를 사용하고 모두 0으로하는 테스트의 두 가지 방법, 쓰기, 시도했습니다

public class Distance 
{ 
    Distance() {} 

    double d; 
    double x1, x2, y1, y2, z1, z2; 

    public void setD (double d) 
    { 
     this.d = d; 
    } 

    double distance() 
    { 
/*  return Math.sqrt (Math.pow ((x2 - x1), 2) 
           + Math.pow ((y2 - y1), 2) 
           + Math.pow ((z2 - z1), 2)); 

*/ 
     return Math.sqrt ((x2 - x1) * (x2 - x1) 
           + (y2 - y1) * (y2 - y1) 
           + (z2 - z1) * (z2 - z1)); 
    } 

} 

내 거리 공식을 가지고 내 public class Distance입니다 최대 3, 사용자 입력을 위해 쓰기 전에 테스트).

누구든지 내가 왜이 문제를 겪고 있는지 설명 할 수 있다면 많은 도움이 될 것입니다.

편집 : 사람들이 특정 값으로 초기화하라고 알려주고 있습니다. 나는 내가 테스트 루프에서 초기화했음을 확신한다. 명확성을 위해 게시해야한다는 것을 알았다.

class Distance_test 
{ 
    public static void main (String [] args) 
    { 
     Distance line = new Distance(); 

     double d; 

     for (double x1 = 0; x1 <= 2; x1++) 
     { 
      line.setD (x1); 
      d = line.distance(); 

      for (double x2 = 0; x2 <= 2; x2++) 
      { 
       line.setD (x2); 

       for (double y1 = 0; y1 <= 2; y1++) 
       { 
        line.setD (y1); 

        for (double y2 = 0; y2 <= 2; y2++) 
        { 
         line.setD (y2); 

         for (double z1 = 0; z1 <= 2; z1++) 
         { 
          line.setD (z1); 

          for (double z2 = 0; z2 <= 2; z2++) 
          { 
           line.setD (z2); 

          System.out.printf ("\n Distance of 3D line with points %.2f, %.2f, %.2f, %.2f, %.2f, %.2f is %.2f\n", x1, x2, y1, y2, z1, z2, line.distance()); 

          } 
         } 
        } 
       } 
      } 
     } 
    } 
} 

그리고 그래, 나는 그것이 조금 지저분한이다하지만 난 그냥 나는 그것이 더 좋은 모양에 도착하기 전에 먼저 작업을 얻으려고 생각하십니까.

+0

C#과 유사하지만 C++와 유사합니다. 또한, 'x1','x2','y1','y2','z1','z2'는 어디에 할당합니까? 이 변수들이 초기화되지 않았다면 그들은 모두 0으로 초기화 될 것입니다. –

+0

네, 다른 C++ 지정을하고 있었고 태그가 섞여서 죄송합니다. –

답변

2

x1, x2, y1, y2, z1, z2은 초기화되지 않았습니다. 계산 결과 d가 아니라 초기화해야합니다.

메모리가 맞다면 Java는 0으로 두배를 초기화합니다. C++ 일 경우 변수에 임의의 데이터가 포함되어 결과도 임의로 생성됩니다.

이외의 코드는 문제가 없습니다.

또한 클래스가 아닌 함수로 구현해야합니다. 당신은 어떤 입력을 얻습니다. 여러분은 결과를 만들어냅니다. 그것은 함수입니다.

double calculateDistance(double[] point1, double[] point2) 
{ 
x1 = point1[0]; // Or you can use enum or something for the index 
y1 = point1[1]; 
z1 = point1[2]; 

x2 = point2[0]; 
y2 = point2[1]; 
z2 = point2[2]; 

return Math.sqrt (Math.pow ((x2 - x1), 2) 
           + Math.pow ((y2 - y1), 2) 
           + Math.pow ((z2 - z1), 2)); 
} 

이 항목은 Java이므로 "MathFunctions"라는 고정 클래스 또는 그 라인을 따라 무언가를 래핑 할 수 있습니다.

0

이것은 확실히 C# 또는 Java이며 C++가 아닙니다.

x, y 및 z 변수에 대한 할당이 가장 큰 문제는 아닙니다. 그 값이 설정되지 않으면 그 값이 정의되지 않았거나 0 일 것으로 예상되어 결과가 0이 될 것입니다.

유효한 결과를 얻으려면 Pow 및 Sqrt 값을 설정해야합니다 .