简体   繁体   English

给定空间中的一组点,请从集合中确定与空间中另一个点最接近的点(不在集合中)

[英]Given a set of points in space, determine that point from the set that is the closest to another point in space (that's not in the set)

I've been asked recently to implement two classes that represent Point2D points and Point3D points. 最近有人要求我实现代表Point2D点和Point3D点的两个类。 The distance and the other methods work fine, yet there's only one left that needs to be implemented and I can't figure out the algorithm. 距离和其他方法都可以正常工作,但是只剩下一个需要实现,我无法弄清楚该算法。 It's stated like this: 像这样说:

"Given a set of points in space, determine that point from the set that is the closest to another point in space (that's not in the set)" “给出空间中的一组点,从集合中确定最接近空间中另一个点(不在集合中)的那个点”

Below are the two classes. 下面是两个类。 Can anybody help me with the last needed algorithm? 有人可以帮我解决最后需要的算法吗?

    public class Point2D {
    protected double x;
    protected double y;

    public Point2D() { }

    public Point2D(double x, double y)
    {
        this.x = x;
        this.y = y;
    }

    public double getX() { return x; }
    public void setX(double x) { this.x = x; }
    public double getY() { return y; }
    public void setY(double y) { this.y = y; }

    public double Point2DDistance(Point2D punct)
    {
        double px = this.x - punct.x;
        double py = this.y - punct.y;

        return Math.sqrt((px * px) + (py * py));
    }

    public String toString() {
        return "(" + x + ", " + y + ")";
    } 
}

public class Point3D extends Point2D {
    private double z;

    public Point3D() { }

    public Point3D(double x, double y, double z)
    {
        super(x, y);
        this.z = z;
    }

    public double getZ() { return z; }
    public void setZ(double z) { this.z = z; }

    public double Point3DDistance(Point3D punct)
    {
        double pz = this.z - punct.z;

        return this.Point2DDistance(punct) + Math.sqrt(pz * pz);
    }

    public String toString() {
        return "(" + this.x + ", " + this.y + ", " + this.z + ")";
    }
}

Iterate through the points. 遍历各点。

For each point, 对于每个点

  • if this is the first point, set min_distance = the point's distance to the not-in-set point P , and copy this point to closestP , and 如果这是第一个点,则设置min_distance =该点到未设置点P的距离,然后将此点复制到closestP ,然后

  • otherwise, if this point's distance to P is less than min_distance , set min_distance to this point's distance, and copy this point to closestP . 否则,如果这一点的为P距离小于min_distance ,集min_distance这一点的距离,并复制此点closestP

Now closestP holds the closest point, and min_distance holds the distance it has from P . 现在, closestP保持最近的点, min_distance保持距P的距离。

Hurray! 欢呼!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM