我想知道如何编写一个java方法,找到最接近给定Seg段列表的Double。我无法弄清楚如何继续......任何建议或代码演示都会非常有用。
例如:假设我有一个线段 - > [X1,X2]。我需要的是返回X,如果它位于此线段上。否则,如果给定值,则返回x1或x2,在这种情况下" X"是x1或x2的最近值。示例:[2.1,4.2]。 X = 1。结果应该是2.1因为接近1。 提前致谢。这是我的代码:
public class LineSegment {
private Point p1;
private Point p2;
public Point getP1() {
return p1;
}
public Point getP2() {
return p2;
}
public LineSegment(Point p1, Point p2) {
this.p1 = p1;
this.p2 = p2;
}
// Find X or the closest value to X
private Double findNearestX(Double x, List<LineSegment> lSeg) {
Double max = Double.MAX_VALUE;
double closest;
// Get X in case it's inside the list
for (LineSegment ls : lSeg)
if (lSeg.contains(x))
return x;
// otherwise...what to do next!
return null;
}
}
答案 0 :(得分:0)
似乎您正在考虑一维问题而您的Point
只是一个坐标。
制作一个列表(或数组)A[]
段结尾以及开始/结束属性(Coord, IsStart)
按Coord
字段
使用二分搜索(适用于Delphi版本here之类的不精确巧合),在此列表中找到X
的位置,获取两个neigbour索引,选择最接近的坐标。结果 - iBest
索引
如果X
位于最近端的段内,则返回X,否则结束坐标:
if (A[iBest].IsStart and X >= A[iBest].Coord) or
((not A[iBest].IsStart) and X <= A[iBest].Coord))
return X
else
return A[iBest].Coord)