簡體   English   中英

計算3D中兩點之間的距離

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM