JAVA和Delphi中的数学函数给出不同的结果

Norgepaul

我正在尝试将开放式街道地图的纬度/经度转换为像素位置。在Java中找到了这个例子当我将代码转换为Delphi时,X结果是正确的,但Y结果略有不足。

Java代码:

double lon = -89.08805;
double lat = 30.6393;
double zoom = 6; // 6.5156731549786215 would be possible too

double lon_rad = Math.toRadians(lon);
double lat_rad = Math.toRadians(lat);
double n = Math.pow(2.0, zoom);

double tileX = ((lon + 180) / 360) * n;
double tileY = (1 - (Math.log(Math.tan(lat_rad) + 1.0/Math.cos(lat_rad)) / Math.PI)) * n / 2.0;

System.out.println("tileX = "+tileX+" tileY = "+tileY);

德尔福代码:

function LatLngToTilePixels(Lat, Lng: Double; ZoomLevel: Integer): TPointF;
var
  lon_rad, lat_rad, n: Double;
  TileX, TileY: Double;
begin
  lon_rad := DegToRad(Lng);
  lat_rad := DegToRad(Lat);

  n := Power(2.0, ZoomLevel);

  Result.X := ((Lng + 180) / 360) * n;
  Result.Y := (1 - (Math.Log10(Math.tan(lat_rad) + 1.0/cos(lat_rad)) / PI)) * n / 2.0;
end;

使用示例中给出的输入(lat = 30.6393,lng = -89.08805,zoom = 6),结果为:

JAVA:

tileX = 16.162124444444444

tileY = 26.273150713795616

德尔福:

tileX = 16.1621244444444

tileY = 29.5128609563099 <---错误的结果

我觉得问题可能出在math.log电话上。JAVA使用日志,但是Delphi使用log10。我已经尝试过log2,但是结果甚至更糟。

法比安

您使用不同底数的对数:

Java: base e,即自然对数,请参见Math.log(double)

德尔福:显然以10为底

您可以使用以下公式来计算不支持的底数的对数:

log_a(b) = log_x(b) / log_x(a)

AFAIKLn在delphi中有一个函数,可以计算自然对数,至少在此处列出

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JAVA和Delphi中的数学函数给出不同的结果

来自分类Dev

acf 函数和 ggAcf 函数给出不同的结果

来自分类Dev

MATLAB和SciPy对'buttord'函数给出不同的结果

来自分类Dev

For循环和Lapply:相同的函数给出不同的结果

来自分类Dev

在Java中重新编写JavaScript函数给出不同的结果

来自分类Dev

+0.0和-0.0上的哪些操作和函数给出不同的算术结果?

来自分类Dev

与手工计算相比,R中的glht函数给出不同的结果

来自分类Dev

R的{pracma}和{numDeriv}库中的grad函数给出错误的结果

来自分类Dev

LOOKUP函数给出奇怪的结果

来自分类Dev

简单的函数给出结果为NaNs?

来自分类Dev

函数给出错误的结果

来自分类Dev

pow() 函数给出错误的结果

来自分类Dev

匹配函数给出错误的结果

来自分类Dev

为什么这两个golang整数转换函数给出不同的结果?

来自分类Dev

为什么matplotlib(python)中的cohere函数给出的答案与MATLAB中的mscohere函数不同?

来自分类Dev

JavaScript中的函数给出错误

来自分类Dev

Armadillo库中的sort_index()函数给出错误的结果

来自分类Dev

Armadillo库中的sort_index()函数给出错误的结果

来自分类Dev

C ++ .length()函数给出错误的结果

来自分类Dev

Google表格VALUE函数给出错误的结果

来自分类Dev

php max()函数给出错误的结果

来自分类Dev

为什么这个阶乘函数给出错误的结果?

来自分类Dev

布尔函数给出不正确的结果

来自分类Dev

PHP DateInterval 函数给出错误的周数结果

来自分类Dev

scipy.integrate 的 Odeint 函数给出错误的结果

来自分类Dev

为什么statsmodels的关联和自相关函数在Python中给出不同的结果?

来自分类Dev

Python递归函数给出不同的错误或正确的输出

来自分类Dev

按位移位和字节强制转换在Java和C#中给出不同的结果

来自分类Dev

按位移位和字节强制转换在Java和C#中给出不同的结果

Related 相关文章

  1. 1

    JAVA和Delphi中的数学函数给出不同的结果

  2. 2

    acf 函数和 ggAcf 函数给出不同的结果

  3. 3

    MATLAB和SciPy对'buttord'函数给出不同的结果

  4. 4

    For循环和Lapply:相同的函数给出不同的结果

  5. 5

    在Java中重新编写JavaScript函数给出不同的结果

  6. 6

    +0.0和-0.0上的哪些操作和函数给出不同的算术结果?

  7. 7

    与手工计算相比,R中的glht函数给出不同的结果

  8. 8

    R的{pracma}和{numDeriv}库中的grad函数给出错误的结果

  9. 9

    LOOKUP函数给出奇怪的结果

  10. 10

    简单的函数给出结果为NaNs?

  11. 11

    函数给出错误的结果

  12. 12

    pow() 函数给出错误的结果

  13. 13

    匹配函数给出错误的结果

  14. 14

    为什么这两个golang整数转换函数给出不同的结果?

  15. 15

    为什么matplotlib(python)中的cohere函数给出的答案与MATLAB中的mscohere函数不同?

  16. 16

    JavaScript中的函数给出错误

  17. 17

    Armadillo库中的sort_index()函数给出错误的结果

  18. 18

    Armadillo库中的sort_index()函数给出错误的结果

  19. 19

    C ++ .length()函数给出错误的结果

  20. 20

    Google表格VALUE函数给出错误的结果

  21. 21

    php max()函数给出错误的结果

  22. 22

    为什么这个阶乘函数给出错误的结果?

  23. 23

    布尔函数给出不正确的结果

  24. 24

    PHP DateInterval 函数给出错误的周数结果

  25. 25

    scipy.integrate 的 Odeint 函数给出错误的结果

  26. 26

    为什么statsmodels的关联和自相关函数在Python中给出不同的结果?

  27. 27

    Python递归函数给出不同的错误或正确的输出

  28. 28

    按位移位和字节强制转换在Java和C#中给出不同的结果

  29. 29

    按位移位和字节强制转换在Java和C#中给出不同的结果

热门标签

归档