gpt4 book ai didi

java - 尝试计算两个物体位置之间的距离

转载 作者:行者123 更新时间:2023-12-02 04:14:33 30 4
gpt4 key购买 nike

我有这两个实例变量,它们在对象的构造函数中设置为:

    (int)(Math.random()*100);

这两个实例变量是:

    private double xPos;
private double yPos;

该类称为 Soldier,我还有其他三个类继承自 Soldier(目前只有构造函数)

我现在得到的输出是:

我的名字是:Cavalier 我的位置:(45.0,56.0)

我的名字是:弩手我的位置:(15.0,91.0)

我的名字是:Halberdier 我的位置:(67.0,8.0)

我正在尝试计算对象的 x 和 y 位置的距离

我目前正在尝试的方法是:

    protected Soldier distanceBetween(Soldier x, Soldier y){
double distBetween = (x.xPos - y.xPos)+(x.yPos-y.yPos);
return this;

}

我试图实现的方法是将继承自 Soldier 的两个对象放入 distBetween 参数中,例如我使用的名称:戟兵,骑士和弩手。

当我调用这个方法时:

    cavalier.distanceBetween(cavalier,crossbowman);

我希望它计算 x 和 y 坐标之间的距离

我如何实现这一目标?

最佳答案

完全错误。

您需要返回一个值,而不是士兵。

这是更一般的:

public static double distanceBetween(double x1, double y1, double x2, double y2) {
double dx = Math.abs(x2-x1);
double dy = Math.abs(y2-y1);
if (dx > dy) {
double r = dy/dx;
return dx*Math.sqrt(1.0 + r*r);
} else {
double r = dx/dy;
return dy*Math.sqrt(1.0 + r*r);
}
}

^ 运算符不是求幂;这是异或。

您可以通过以下方式重写此方法:

public static double distanceBetween(Soldier s1, Solder s2) {
return distanceBetween(s1.xPos, s1.yPos, s2.xPos, s2.yPos);
}

既然你遇到了麻烦,我就给你解释一下:

/**
* Distance calc
* User: mduffy
* Date: 11/1/2015
* Time: 9:58 AM
* @link http://stackoverflow.com/questions/33462961/trying-to-calculate-the-distance-between-the-position-of-two-objects/33463222?noredirect=1#comment54712511_33463222
*/
public class Soldier {

public final double xPos;
public final double yPos;

public static void main(String[] args) {
Soldier s = new Soldier(0, 0);
Cavalier c = new Cavalier(3, 4);
System.out.println(String.format("distance: %f10.3", s.distanceBetween(c)));
}

public Soldier(double xPos, double yPos) {
this.xPos = xPos;
this.yPos = yPos;
}

public double distanceBetween(Soldier s) {
return distanceBetween(this.xPos, this.yPos, s.xPos, s.yPos);
}

public static double distanceBetween(double x1, double y1, double x2, double y2) {
double dx = Math.abs(x2-x1);
double dy = Math.abs(y2-y1);
if (dx > dy) {
double r = dy/dx;
return dx*Math.sqrt(1.0 + r*r);
} else {
double r = dx/dy;
return dy*Math.sqrt(1.0 + r*r);
}
}

public static double distanceBetween(Soldier s1, Soldier s2) {
return distanceBetween(s1.xPos, s1.yPos, s2.xPos, s2.yPos);
}
}

class Cavalier extends Soldier {
public Cavalier(double x, double y) {
super(x, y);
}
}

如果您想要不同的距离计算方法(例如欧几里得、曼哈顿、 PIL 逊、球面等),您可以拥有一个接口(interface),让您可以通过添加新的实现来更改它:

public interface DistanceCalculator {
double distance(double x1, double y1, double x2, double y2);
}

现在您可以通过添加新代码而不是修改现有代码来轻松切换。

关于java - 尝试计算两个物体位置之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33462961/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com