質問
2 点間の距離を計算するクラスを作成する必要があります。私は立ち往生していて、まったくの初心者です。私のクラスは次のとおりです。
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;
}
}
2番目のクラス。
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()
これら 2 つの点オブジェクトの間にあるメソッド。
解決
平坦面上の2点(x1、y1)と(x2、y2)との間の距離である
____________________
/ 2 2
\/ (y2-y1) + (x2-x1)
しかし、あなたが望むすべてはあなたの2点の中間点であるならば、あなたはあなたに中間点の機能を変更する必要があります:
public Point midpoint (Point p1, Point p2) {
return new Point ((p1.getX() + p2.getX()) / 2, (p1.getY() + p2.getY()) / 2);
}
このは(他の数学で自分自身を気にすることなく)与えられた2点の真ん中にセットポイントを持つブランドの新しいポイントオブジェクトを返します。 2番目のクラスはラインであるので、あなたはそれを記述するために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,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
二乗されている参照しているので、、それらの符号は関係ありません - それは同じに降りてくるだろう。したがって、このメソッドは常にポイントがどこにあるか、これまで、動作します。
あなたは本当に距離が必要です、またはあなただけの中点を取得しようとしていますか?あなただけの既存の2つの点の間の中間にある新しいポイントを作成したい好きなので、あなたのコードスニペットから、それは一種の見えます。
あなただけの中間点の後に本当にしている場合は、、あなたは本当にそれを達成するために全体の2級(すなわち、「行」)を必要としません。あなたが見つけようとしている事がポイントでもあるので、それはそうのように、既存の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);
あなたが本当に2点間の距離をしたい場合には、そのための静的メソッドを使用するように理にかなっているように、と、それは、実際にどちらかのポイントの属性ではありませんのようなので、
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を使用すると、内部に多くのチェックが組み込まれているため、安全な方法が提供されます。
ピタゴラスの定理が使えます, 、他の人が言ったように。以下は視覚的なデモです。 Wolframデモプロジェクト.
代替テキスト http://demonstration.wolfram.com/DistanceBetweenTwoPoints/HTMLImages/index.en/popup_5.jpg
x
変数を構築するために使用されているy
とmp
の値を設定しようとしているようあなたの第二のクラスでは、それが見えます。あなたのすべての数式は正しいですが、あなたはすべてが実行されたことをのための考慮する必要があります。そのままのコードでは、それは様々なx
s、その後、0として開始y
とPoint
変数を作成しています。 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);
}