2014-10-02 441 views
0

所以我不认为我在数学上不好,我不认为如果我知道我是什么时,将简单的数学距离公式转换成代码就是困难的这样做。这显然我没有。长话短说,我应该计算两个3D点之间的距离,出于某种原因,我的公式无法正常工作。我不知道我是不是写错了,或者是写了什么,因为我已经写了好几遍,但仍然无法正常工作。Math.pow和Math.sqrt公式返回值为0

这是我的public class Distance,里面有我的距离公式

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)); 
    } 

} 

我试图写它两种方式,(我使用嵌套循环for均用于测试为0,所有的变量循环最多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. – 2014-10-02 22:38:39

+0

对不起,我正在做另一个C++任务,并且我的标记混淆了。 – 2014-10-02 22:48:56

回答

2

x1, x2, y1, y2, z1, z2未初始化。你应该初始化它们,而不是d,这是你计算的结果。

如果内存为我服务,Java将双精度初始化为零,如果这是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.

您需要设置那些进入Pow和Sqrt以获取有效结果的值。