大家好,我在看马士兵老师的视频时,对一道题不是很明白,原题是这样的:
定义一个点(point)类,用来表示三维空间的点(有三个坐标)。要求如下:
1.可以生成具有特定坐标的点对象
2.提供可以设置三个坐标的方法
3.提供可以计算该“点”距原点距离平方的方法下面是提供的原代码,虽然有原代码,我还是不太明白。可能是数学底子太差了吧,我就一点一点分析题意,“用来表示三维空间的点”,那么什么是三维空间呢?三维空间的点用图形又该怎样表示呢?算这个点距原点之间的距离的平方,为什么又要用(x - p.x)*(x - p.x) + (y - p.y)*(y - p.y) + (z - p.z)*(z - p.z)呢?
大家可能觉得太简单,可我确实不会,请说得详细一点,通俗一点,好让人能够看懂,愿大家教我!class Point {
double x, y, z;

Point(double _x, double _y, double _z) {
x = _x;
y = _y;
z = _z;
}

void setX(double _x) {
x = _x;
}

double getDistance(Point p) {
return (x - p.x)*(x - p.x) + (y - p.y)*(y - p.y) + (z - p.z)*(z - p.z);
}

}public class TestPoint {
public static void main(String[] args) {
Point p = new Point(1.0, 2.0, 3.0);
Point p1 = new Point(0.0, 0.0, 0.0);
System.out.println(p.getDistance(p1));

p.setX(5.0);
System.out.println(p.getDistance(new Point(1.0, 1.0, 1.0)));
}
}

解决方案 »

  1.   

    (x - p.x)*(x - p.x) + (y - p.y)*(y - p.y) + (z - p.z)*(z - p.z); 这个如果再开方就是三维图形中两个点的距离了。所以你不是程序问题,而是数学不懂。
      

  2.   

    System.out.println(p.getDistance(p1)); 
    这输出的不是p到原点的距离,而是p到p1点的距离
      

  3.   

    那么什么是三维空间呢?
    三维空间有长宽高构成,三维空间的长、宽、高三条轴是说明在三维空间中的物体相对原点O的距离关系(x - p.x)*(x - p.x) + (y - p.y)*(y - p.y) + (z - p.z)*(z - p.z)
    三维空间两点的角力公式是double d=sqrt((x - p.x)*(x - p.x) + (y - p.y)*(y - p.y) + (z - p.z)*(z - p.z))你程序中的那个错了,没开开平方 
      

  4.   

    什么是三维空间?找到你家的墙角那一点,把那当做原点,地面跟墙角那点连接的有两条线吧,那就是x轴和y轴,另一条线(也就是2面墙相交的线)就是z轴,这就是一个3维空间,你屋中的任何一点,都可以通过这x轴,y轴,z轴确定下来,至于那个公式,你要是不懂得话,你可以先考虑屋中任何一点到墙角的距离(原点),这个距离的平方也就是它到x轴,y轴和z轴的距离的平方和,即x*x + y * y + z * z,你把这个想明白了,空间中的2点距离是一样的
      

  5.   

    首先一个空间的点,是由x,y,z这三个轴来定义坐标的,这个不难理解。如果一个点的坐标是(a,b,c),另外一个点的坐标是(j,k,l),那么这两个点的距离应该是他们坐标差的平方和的正二次方根。所以距离的平方就是坐标差的平方和。这个你要是实在理解不了,就记住吧。因此距离s*s = (a-j)*(a-j) + (b-k)*(b-k) + (c-l)*(c-l)。有了这个知识储备,再回到你的这个类Point上面来,一个点,自然就要定义3个属性,分别对应三个轴的坐标,而对于getDistance(Point p),它的意义在于,你本身这个点与点p的距离,点p的坐标你是知道的,是p.x, p.y和p.z;而自己这个点的坐标,也是知道的。所以套用上面的公式就ok了。还有一点 良好的面向对象设计是不提倡直接利用对象的引用去访问对象的属性的  所以不要用p.x这种形式,最好写一个方法去get三个坐标。