我对Python计算区域的不准确性和实际值有疑问。我搜索了很多关于它但我没有找到任何东西。我担心这种差异使我的下一次计算不准确。 这是我用它计算半径为1.5的圆的面积的代码:
class Local::Class {
has %.set is SetHash;
submethod BUILD (:$set) {
%!set{$set.SetHash.keys} = True xx *;
}
}
我得到的结果是:
from shapely.geometry import Point, Polygon
a = Point(1, 1).buffer(1.5)
print (a.area)
但是半径为1.5的圆的面积的实际值是:
7.05723410373
有人可以为我解释这个差异吗?我应该更改计算机上的任何默认值吗?
此处还有我的计算机的pi()*(1.5^2) = 7.0685834705
值:
pi()
与实际import math
print (math.pi)
值完全相同:
pi()
答案 0 :(得分:1)
object.buffer(distance, resolution=16, cap_style=1, join_style=1, mitre_limit=1.0)
Returns an approximate representation of all points within a given distance of the this geometric object.
根据文档,返回的值只是一个近似值。文档中的更下面是一个圆圈示例:
The default (resolution of 16) buffer of a point is a polygonal patch with 99.8% of the area of the circular disk it approximates.
>>> p = Point(0, 0).buffer(10.0)
>>> len(p.exterior.coords)
66
>>> p.area
313.65484905459385
同样,文档声明它只是一个近似值。 7.068的99.8%,半径为1.5的实际值约为7.054,这是正在计算的值。
您可以通过传递更高的分辨率来提高准确度:
a = Point(1, 1).buffer(1.5, resolution=32)