极坐标之间的距离

时间:2015-04-11 01:47:42

标签: java

如何找到极坐标与角度和半径之间的距离。 我知道公式是:

d = sqrt(r1^2 + r2^2 -2r1r2cos(theta2 - theta1)

当坐标只是角度和半径

时,如何编写它?

3 个答案:

答案 0 :(得分:2)

请阅读课程 - 你需要一个PolarPoint类,它有一个方法distanceFrom - 测试:

class PolarPoint {

    private double angle;
    private double radius;

    public PolarPoint(double angle, double radius) {
        this.angle = angle;
        this.radius = radius;
    }

    public double distanceFrom(PolarPoint other){
         double theta1 = this.angle;
         double theta2 = other.angle;
         double r1 = this.radius;
         double r2 = other.radius;
         return Math.sqrt(r1*r1 + r2*r2 - 2*r1*r2*Math.cos(theta2 - theta1));
   }

    public static void main (String[] args) {
        PolarPoint p1 = new PolarPoint(0, 0); // the origin
        PolarPoint p2 = new PolarPoint(Math.PI, 1); // (-1, 0)
        System.out.println(p1.distanceFrom(p2));
    }
}

作为旁注 - 角度和半径应该是最终的,以使其不可变。但我想从评论(即rotate())中可以看出这是一个可变的点 - 牦牛!

答案 1 :(得分:1)

这应该可以解决问题:

class PolarPoint {
    private double innerRadius;
    private double innerAngle;
    public PolarPoint(double radius,double angle) {
        innerRadius = radius;
        innerAngle = angle;
    }
    public double getRadius() {
        return innerRadius;
    }
    public double getAngle() {
        return innerAngle;
    }
   public double polarDistance(PolarPoint otherPoint) {
        return Math.sqrt(innerRadius*innerRadius + otherPoint.getRadius()*otherPoint.getRadius() -2*innerRadius*otherPoint.getRadius()*Math.cos(innerAngle-otherPoint.getAngle()));
    }
}

最后的polarDistance方法给出了PolarPoint对象与另一个PolarPoint之间的距离。请注意,角度θ必须以弧度为单位。

答案 2 :(得分:0)

public double PolarDistance(double r1,double theta1,double r2,double theta2) {
    return Math.sqrt(r1*r1 + r2*r2 -2*r1*r2*Math.cos(theta2 - theta1));
}

这应该有效。 r1和theta1是第一个点的坐标,r2和θ2是第二个点的坐标。