我需要创建用于计算两点之间的距离的类。我坚持,我是一个总的初学者。这里是我的类:

package org.totalbeginner.tutorial;

public class Point {

    public double x;
    public double y;

    Point(double xcoord, double ycoord){
        this.x = xcoord;
        this.y = ycoord;
    }

    public double getX() {
        return x;
    }

    public double getY() {
        return y;
    }    
}

第二类。

package org.totalbeginner.tutorial;

public class Line {

    double x;
    double y;

    Point p1 = new Point(2.0,2.0);
    Point p2 = new Point(4.0,4.0);
    Point mp = new Point(x,y);

    public void midpoint() {
        x = (p1.getX() + p2.getX()) / 2;
        y = (p1.getY() + p2.getY()) / 2;
    }
}

我不知道如何既定义点之间得到一个点目标(中点)。

我可以创建点对象,但我不知道如何通过位于这两个点对象之间我midpoint()方法返回一个点对象。

有帮助吗?

解决方案

在一个平面上的两个点(X1,Y1)和(X2,Y2)之间的距离是:

    ____________________
   /       2          2
 \/ (y2-y1)  + (x2-x1)

但是,如果你想要的是你的两个点的中点,你应该改变你的中点功能:

public Point midpoint (Point p1, Point p2) {
    return new Point ((p1.getX() + p2.getX()) / 2, (p1.getY() + p2.getY()) / 2);
}

这将返回设置为给定两个点的中间点一个全新的点对象(而不必与任何其他数学担心自己)。而且,由于你的第二类是一条线,你只需要两个端点来形容的话,那么我会做一些小的改动。

首先Point.java

class Point {
    double x, y;
    Point (double xcoord, double ycoord) {
        this.x = xcoord;
        this.y = ycoord;
    }
    public double getX() { return x; }
    public double getY() { return y; }
}

然后Line.java

public class Line {
    Point p1, p2;
    Line (Point point1, Point point2) {
        this.p1 = point1;
        this.p2 = point2;
    }
    public Point midpoint() {
        return new Point ((p1.getX()+p2.getX())/2, (p1.getY()+p2.getY())/2);
    }
    public double abstand() {
        return Math.sqrt(
            (p1.getX() - p2.getX()) *  (p1.getX() - p2.getX()) + 
            (p1.getY() - p2.getY()) *  (p1.getY() - p2.getY())
        );
    }
    static public void main (String args[]) {
        Line s = new Line (new Point(2.0, 2.0), new Point(5.0, 6.0));
        Point mp = s.midpoint();
        System.out.println ("Midpoint = (" + mp.getX() + "," + mp.getY() + ")");
        double as = s.abstand();
        System.out.println ("Length   = " + as);
    }
}

这两个文件,编译的和与端点2,25,6(经典3/4/5直角三角形的斜边)运行时,产生正确的:

Midpoint = (3.5,4.0)
Length   = 5.0

其他提示

简单Pythag ...根(DX ^ 2 + DY ^ 2)

Math.sqrt(Math.pow((p2.getX() - p1.getX()), 2) + Math.pow((p2.getY() - p1.getY()), 2))
 X
 +
 |\
 | \
a|  \c
 |   \
 |    \
 +-----+ 
    b   Y

想象X和Y是在一个平面上的点。然后aX.y - Y.ybY.x - X.xc的长度的距离,并且是三角形的斜边的长度。它是使用计算

sqrt(a^2 + b^2);

既然你所见,我们平方ab,他们的标志是不相关的 - 它会回落到相同。因此,这种方法始终工作,在那里有史以来点所在。

查找的 Pythagorean theorem

你真的需要的距离,或者是你想只得到中点?因为从您的代码段,它看起来像你只是想创建一个新的点在两个现有点之间的中点处。

如果你真的只是中点后,你并不真的需要一个完整的二等(即“行”)来实现这一目标。既然你正在努力寻找的东西也是一个点,是有意义的一个构造函数添加到您现有的Point类,像这样..

Point(Point a, Point b)
{
  x = (a.x + b.x) / 2;
  y = (a.y + b.y) / 2;
}

..然后,在别处假设你已经拥有你想要使用此一对夫妇点,请使用构造函数这样的:

Point p1 = new Point(2,2);
Point p2 = new Point(4,4);
Point midpoint = new Point(p1, p2);

如果你真的想两点之间的距离,这不是真正要么点的属性,所以是有意义的使用应该是一个静态方法,像这样

public static double distance(Point a, Point b)
{
  double dx = a.x - b.x;
  double dy = a.y - b.y;
  return Math.sqrt(dx * dx + dy * dy);
}

和回调用代码,你可以用这种方式:

Point p1 = new Point(2,2);
Point p2 = new Point(4,4);
System.out.println("Distance between them is " + Point.distance(p1, p2));

可以使用数学函数对这样的:

public Point midpoint() {
    //Calculate the difference between the old and new x/y
    double dx = p1.getX() - p2.getX();
    double dy = p1.getY() - p2.getY();

    double newX = Math.pow(dx, 2D);
    double newY = Math.pow(dz, 2D);
    return new Point(newX, newZ);
}

<强> Math.pow 处理与负值等问题为你, 使用Math.pow给你一个安全的方法,因为它有很多的支票内建成。

您可以使用勾股定理下,如其他说。下面是从视觉上笔画演示的钨笔画演示计划

替代文字http://demonstrations.wolfram.com/DistanceBetweenTwoPoints /HTMLImages/index.en/popup_5.jpg

在你的第二个类,它看起来像你想设置用于构建您的x变量ymp的值。你所有的公式是正确的,但你需要考虑的顺序的一切都被执行。在代码中,因为它是,它创造了xy变量,它开始时为0,那么各种Points。 xy仍然为0,所以mp设置为Point(0, 0)

你可能想要做的是改变的的返回类型midpointPoint,所以,当你调用该函数,你得到一个Point。然后,你可以创建你计算值的新Point对象。它应该看起来更像是这样的:

public Point midpoint() {
    // calculate the middle x and y
    double x = (p1.getX() + p2.getX()) / 2;
    double y = (p1.getY() + p2.getY()) / 2;
    // now make a new Point with those values, and return it
    return new Point(x, y);
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top