我想解决一个问题,我有一个坐标列表,并希望得到最接近点。如何将最小距离返回到某个点?
例如: 我得到了坐标[[1,2],[3,4],[10,3]],并希望得到最接近原点[0,0]的点。 [1,2]在这个例子中。
我写了这个:
list_min([H|T], Min):-
list_min(T, H, Min).
list_min([], H, H).
list_min([L|Ls], Min0, Min) :-
point(P),
distance(Min0,P,D0),
distance(L,P,D1),
Lower is min(D0, D1),
assert(candidate(Min0)),
assert(candidate(L)),
forall(candidate(X),distance(X,P,Lower)),
retractall(candidate(_)),
list_min(Ls, X, Min).
distance(A,B,D):-
A = [A1,A2],
B = [B1,B2],
Y is B2 - A2,
X is B1 - A1,
D is sqrt(X*X + Y*Y).
然而,看起来它总是在FORALL线失败。我做错了什么?有没有更好的方法来做到这一点?
真是一个奇怪的答案:四叉树在某些情况下是有用的,但真没用在这里。你的意思是K = 2的[K-D-Trees](http://en.wikipedia.org/wiki/K-d_tree)? – CapelliC