[英]Calculating distance between two points in 3D
我的任務是創建主類,在其中我將任何點的值初始化為(0,0,0)並且能夠分別訪問和改變所有三個值(x,y,z)。 為此,我使用了getter和setter。 我的下一個任務是在我的主類(我稱之為“distanceTo”)中創建一個計算兩點之間距離的方法。
如何創建方法“ distanceTo
”,通過獲取x,y,z坐標來計算兩點之間的距離? 我假設我的答案將與sqrt((x1-x2)^2+(y1-y2)^2+(z1-z2)^2)
但我不知道如何在我的方法中寫出我的主要課程,如果我的要點直到我的第二個測試點課程才定義
到目前為止我只有兩點,但我正在尋找一個更一般的答案(所以如果我創建三個點,p1 p2和p3,我可以計算p1和p2之間的距離或p2和p3之間的距離或距離在p1和p3之間。
我的主要課程:
package divingrightin;
public class Point3d {
private double xCoord;
private double yCoord;
private double zCoord;
public Point3d(double x, double y, double z){
xCoord = x;
yCoord = y;
zCoord = z;
}
public Point3d(){
this (0,0,0);
}
public double getxCoord() {
return xCoord;
}
public void setxCoord(double xCoord) {
this.xCoord = xCoord;
}
public double getyCoord() {
return yCoord;
}
public void setyCoord(double yCoord) {
this.yCoord = yCoord;
}
public double getzCoord() {
return zCoord;
}
public void setzCoord(double zCoord) {
this.zCoord = zCoord;
}
//public double distanceTo(double xCoord, double yCoord, double zCoord ){
}
我的班級有測試點:package divingrightin;
public class TestPoints {
public static void main(String[] args) {
Point3d firstPoint = new Point3d();
firstPoint.setxCoord(2.2);
firstPoint.setyCoord(1);
firstPoint.setzCoord(5);
//System.out.println(firstPoint.getxCoord());
Point3d secondPoint = new Point3d();
secondPoint.setxCoord(3.5);
secondPoint.setyCoord(22);
secondPoint.setzCoord(20);
}
}
public double distanceTo(Point3d other) {
return Math.sqrt(Math.pow(this.xCoord-other.getxCoord(), 2)
+ Math.pow(this.yCoord-other.getyCoord(), 2)
+ Math.pow(this.zCoord-other.getzCoord(), 2));
}
將其添加到Point3d類。 當你需要在TestPoints類中計算距離時,你會做類似的事情
double distance = firstPoint.distanceTo(secondPoint);
正如@Dude在評論中指出的那樣,你應該寫一個方法:
public double distanceTo(Point3d p) {
return Math.sqrt(Math.pow(x - p.getxCoord(), 2) + Math.pow(y - p.getyCoord(), 2) + Math.pow(z - p.getzCoord(), 2));
}
然后,如果你想獲得2點之間的距離你只需要打電話:
myPoint.distanceTo(myOtherPoint);
//or if you want to get the distance to some x, y, z coords
myPoint.distanceTo(new Point3d(x,y,z);
你甚至可以使方法靜態並給它2分進行比較:
public static double getDistance(Point3d p1, Point3d p2) {
return Math.sqrt(Math.pow(p1.getxCoord() - p2.getxCoord(), 2) + ...
}
PS我的第一個答案:)
根據您想要實現的目標,您有兩種可能的方法。
您可以將“distanceTo”方法放在Point3D類中:
public class Point3d {
...
public double distanceTo(Point3d ) {
return Math.sqrt( Math.pow(this.x - that.x, 2) + Math.pow(this.y - that.y, 2) + Math.pow(this.z - that.z, 2));
}
在這種情況下,您始終將第一個點用作第一個參數,將任何其他點用作要計算距離的點。
或者,您可以擁有一個生活在某處的通用distanceTo方法(例如在您的Program類中,您有main方法),它需要兩個點並計算它們之間的距離:
public class Program {
static public void main(String[] args) {}
public double distanceTo(Point3d p1, Point3d p2) {
return Math.sqrt( Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2) + Math.pow(p1.z - p2.z, 2));
}
}
哪一個更好? 取決於你如何在常見情況下使用它們:)
只需使用吸氣劑
float distance = Math.sqrt(Math.pow(secondPoint.getXCoord() - firstPoint.getXCoord()), 2) + ...)
兩個想法。
添加一個:
public double distanceTo(Point3d otherPoint) {
// return distance by using this.getxCoord(), this.getyCoord(), etc.
// and otherPoint.getxCoord(), otherPoint.getyCoord()
}
你的Point3d
類的方法。 然后,在main
方法結束時,您可以執行以下操作:
System.out.println(firstPoint.distanceTo(secondPoint));
System.out.println(tenthPoint.distanceTo(ninthPoint));
或者,向主TestPoints
類添加靜態方法:
public static double distanceBetween(Point3d point1, Point3d point2) {
// return distance by using point1.getxCoord(), etc. and point2.getxCoord()
}
然后,在main
方法結束時,您可以執行以下操作:
System.out.println(distanceBetween(firstPoint, secondPoint));
System.out.println(distanceBetween(tenthPoint, ninthPoint));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.