毕达哥拉斯定理用于计算两点之间的距离。序言

Posted

技术标签:

【中文标题】毕达哥拉斯定理用于计算两点之间的距离。序言【英文标题】:Pythagorean theorem for calculating distance between two points. Prolog 【发布时间】:2021-12-02 17:13:26 【问题描述】:

我们都知道勾股定理的公式是:a2 + b2 = c2。我想实现这个公式,用于计算两点之间的距离。这是我的城市坐标数据(以公里为单位):

city(amsterdam, 121.813/487.362).
city(breda, 112.095/398.291).
city(eindhoven, 161.871/382.839).
city(groningen, 233.871/582.030).
city(haarlem, 103.690/488.416).
city(hertogenbosch, 149.225/412.119).
city(leeuwarden, 182.605/583.855).
city(maastricht, 176.830/318.793).
city(rotterdam, 92.548/437.734).
city(utrecht, 135.923/456.419).
city(zwolle, 203.252/503.130).

为此我实现了一个程序,但它似乎不起作用:

estimate(State/NextState, Estimate) :-
    city(State, X/Y),
    city(NextState, X1/Y1),
    X2 is X1 - X,
    Y2 is Y1 - Y,
    Estimate is X2^2 + Y2^2,
    DifferentVar is sqrt(Estimate),
    estimate(State/NextState, DifferentVar).

如果这样的查询返回 false:

?- estimate(amsterdam/utrecht, X).
false.

?- estimate(utrecht/amsterdam, X).
false.

这个我也试过了,还是不行:

estimate(State/NextState, Estimate) :-
    city(State, X/Y),
    city(NextState, X1/Y1),
    Estimate is sqrt((X1 - X)^2 + sqrt(Y1 - Y)^2).

我检查了每个“子目标”,但找不到错误或错误的实现。在我看来,似乎每个“子目标”都已达到,但它仍然返回错误。如果有人能进一步帮助我,我将不胜感激!

【问题讨论】:

【参考方案1】:

估计规则应该是:

estimate(State/NextState, Estimate) :-
    city(State, X/Y),
    city(NextState, X1/Y1),
    X2 is X1 - X,
    Y2 is Y1 - Y,
    Estimate is sqrt(X2^2 + Y2^2).

请注意,只有最后一行发生了变化(接下来的 2 行已被删除)。

【讨论】:

以上是关于毕达哥拉斯定理用于计算两点之间的距离。序言的主要内容,如果未能解决你的问题,请参考以下文章

使用sql oracle计算地理点之间的距离

如何用C语言计算两点之间距离

坐标轴上两点间距离公式是啥?

python平面上的两点间距离计算?

基础概念--欧式距离

ARCGis中怎样计算两点间的距离