题
我需要创建用于计算两点之间的距离的类。我坚持,我是一个总的初学者。这里是我的类:
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,2
和5,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是在一个平面上的点。然后a
是X.y - Y.y
和b
是Y.x - X.x
。 c
的长度的距离,并且是三角形的斜边的长度。它是使用计算
sqrt(a^2 + b^2);
既然你所见,我们平方a
和b
,他们的标志是不相关的 - 它会回落到相同。因此,这种方法始终工作,在那里有史以来点所在。
你真的需要的距离,或者是你想只得到中点?因为从您的代码段,它看起来像你只是想创建一个新的点在两个现有点之间的中点处。
如果你真的只是中点后,你并不真的需要一个完整的二等(即“行”)来实现这一目标。既然你正在努力寻找的东西也是一个点,是有意义的一个构造函数添加到您现有的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
变量y
和mp
的值。你所有的公式是正确的,但你需要考虑的顺序的一切都被执行。在代码中,因为它是,它创造了x
和y
变量,它开始时为0,那么各种Point
s。 x
和y
仍然为0,所以mp
设置为Point(0, 0)
。
你可能想要做的是改变的的返回类型的midpoint
到Point
,所以,当你调用该函数,你得到一个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);
}