您的位置:首页 > 其它

[从头学数学] 第278节 [计算几何] 多边形周长和面积

2016-09-26 10:07 375 查看
剧情提要:
阿伟看到了一本比较有趣的书,是关于《计算几何》的,2008年由北清派出版。很好奇
它里面讲了些什么,就来看看啦。

正剧开始:

星历2016年09月26日 09:58:10, 银河系厄尔斯星球中华帝国江南行省。

[工程师阿伟]正在和[机器小伟]一起研究[计算几何]]。





<span style="font-size:18px;">#
>>>
路径: [[6, 9], [2.4, 5.4], [0.8, 3.8], [1.33, 3], [2, 3], [6, 3], [6, 3.86], [3.33, 5], [6, 9]]
各顶点内角: [11.2769, 180.0, 101.4755, 123.5245, 180.0, 90.0, 113.1208, 280.6023]
周长: 21.556
面积: [10.6061, 'anti-clockwise']

路径: [[6, 9], [2.4, 5.4], [0.8, 3.8], [1.33, 3], [2, 3], [3.33, 5], [6, 3.86], [8, 3], [6, 9]]
各顶点内角: [63.4349, 180.0, 101.4755, 123.5245, 123.6239, 259.4969, 180.1469, 48.2973]
周长: 22.79
面积: [17.4599, 'anti-clockwise']

路径: [[6, 9], [2.4, 5.4], [0.8, 3.8], [0, 3], [1.5, 1.5], [1.78, 2.33], [2, 3], [3.33, 5], [6, 9]]
各顶点内角: [11.2769, 180.0, 180.0, 90.0, 63.6418, 179.5362, 195.4459, 180.0992]
周长: 19.399
面积: [7.4925, 'anti-clockwise']

路径: [[6, 9], [2.4, 5.4], [0.8, 3.8], [0, 3], [1.33, 3], [1.78, 2.33], [2, 3], [3.33, 5], [6, 9]]
各顶点内角: [11.2769, 180.0, 180.0, 45.0, 236.113, 52.065, 195.4459, 180.0992]
周长: 18.539
面积: [6.21445, 'anti-clockwise']

路径: [[6, 9], [2.4, 5.4], [0.8, 3.8], [0, 3], [1.33, 3], [2, 3], [6, 3], [6, 3.86], [6, 9]]
各顶点内角: [45.0, 180.0, 180.0, 45.0, 180.0, 180.0, 90.0, 180.0]
周长: 20.485
面积: [18.0, 'anti-clockwise']

路径: [[6, 9], [2.4, 5.4], [0.8, 3.8], [0, 3], [1.33, 3], [2, 3], [3.33, 5], [6, 3.86], [6, 9]]
各顶点内角: [45.0, 180.0, 180.0, 45.0, 180.0, 123.6239, 259.4969, 66.8792]
周长: 20.93
面积: [12.8519, 'anti-clockwise']

路径: [[6, 9], [2.4, 5.4], [3.33, 5], [2, 3], [6, 3], [6, -3], [8, -7], [8, 3], [6, 9]]
各顶点内角: [63.4349, 68.2729, 280.351, 56.3761, 270.0, 153.4349, 26.5651, 161.5651]
周长: 39.302
面积: [36.404, 'anti-clockwise']

路径: [[6, 9], [2.4, 5.4], [3.33, 5], [6, 3.86], [6, 3], [6, -3], [8, -7], [8, 3], [6, 9]]
各顶点内角: [63.4349, 68.2729, 179.8479, 246.8792, 180.0, 153.4349, 26.5651, 161.5651]
周长: 36.663
面积: [31.2559, 'anti-clockwise']

路径: [[6, 9], [2.4, 5.4], [-6, 9], [-0.37, 2.56], [0, 3], [1.33, 3], [2, 3], [3.33, 5], [6, 9]]
各顶点内角: [11.2769, 248.1986, 25.6407, 81.2215, 229.9392, 180.0, 123.6239, 180.0992]
周长: 32.57
面积: [22.82, 'anti-clockwise']

路径: [[6, 9], [3.33, 5], [2, 3], [1.78, 2.33], [3.67, -0.5], [4.29, 0.43], [6, 3], [6, 3.86], [6, 9]]
各顶点内角: [33.7231, 179.9008, 164.5541, 128.0852, 67.4268, 179.9485, 146.3614, 180.0]
周长: 21.524
面积: [19.956, 'anti-clockwise']

路径: [[6, 9], [3.33, 5], [2, 3], [6, 3], [6, -3], [5.67, -3.5], [8, -7], [8, 3], [6, 9]]
各顶点内角: [52.1581, 179.9008, 56.3761, 270.0, 213.4248, 112.9229, 33.6523, 161.5651]
周长: 38.339
面积: [35.17, 'anti-clockwise']

路径: [[6, 9], [3.33, 5], [2, 3], [6, 3], [6, -3], [8, -7], [8, 3], [6, 3.86], [6, 9]]
各顶点内角: [33.7231, 179.9008, 56.3761, 270.0, 153.4349, 26.5651, 113.2677, 246.7323]
周长: 39.0
面积: [28.87, 'anti-clockwise']

路径: [[6, 9], [3.33, 5], [2, 3], [6, 3], [4.5, 0], [6, -3], [8, -7], [8, 3], [6, 9]]
各顶点内角: [52.1581, 179.9008, 56.3761, 296.56510000000003, 126.8699, 180.0, 26.5651, 161.5651]
周长: 38.716
面积: [38.51, 'anti-clockwise']

路径: [[6, 9], [3.33, 5], [6, 3.86], [6, 3], [6, -3], [5.67, -3.5], [8, -7], [8, 3], [6, 9]]
各顶点内角: [52.1581, 79.3977, 246.8792, 180.0, 213.4248, 112.9229, 33.6523, 161.5651]
周长: 35.701
面积: [30.0219, 'anti-clockwise']

路径: [[6, 9], [3.33, 5], [6, 3.86], [6, 3], [4.5, 0], [6, -3], [8, -7], [8, 3], [6, 9]]
各顶点内角: [52.1581, 79.3977, 246.8792, 206.5651, 126.8699, 180.0, 26.5651, 161.5651]
周长: 36.077
面积: [33.3619, 'anti-clockwise']

路径: [[6, 9], [6, 3.86], [6, 3], [4.29, 0.43], [4.5, 0], [6, -3], [8, -7], [8, 3], [6, 9]]
各顶点内角: [18.4349, 180.0, 213.6386, 120.3318, 179.4645, 180.0, 26.5651, 161.5651]
周长: 33.716
面积: [27.1375, 'anti-clockwise']

路径: [[6, 9], [6, 3.86], [6, 3], [6, -3], [5.56, -3.33], [5.67, -3.5], [8, -7], [8, 3], [6, 9]]
各顶点内角: [18.4349, 180.0, 180.0, 233.1301, 93.9647, 179.253, 33.6523, 161.5651]
周长: 33.282
面积: [23.21555, 'anti-clockwise']

路径: [[6, 9], [6, 3.86], [6, 3], [6, -3], [5.67, -3.5], [5.35, -3.97], [8, -7], [8, 3], [6, 9]]
各顶点内角: [18.4349, 180.0, 180.0, 213.4248, 180.8242, 104.5784, 41.1725, 161.5651]
周长: 33.518
面积: [24.26755, 'anti-clockwise']

路径: [[6, 9], [6, 3.86], [6, 3], [4.5, 0], [6, -3], [5.67, -3.5], [8, -7], [8, 3], [6, 9]]
各顶点内角: [18.4349, 180.0, 206.5651, 126.8699, 239.9899, 112.9229, 33.6523, 161.5651]
周长: 33.836
面积: [27.66, 'anti-clockwise']

路径: [[6, 9], [6, 3.86], [6, 3], [4.5, 0], [4, -1], [6, -3], [8, -7], [8, 3], [6, 9]]
各顶点内角: [18.4349, 180.0, 206.5651, 180.0, 108.4349, 198.4349, 26.5651, 161.5651]
周长: 34.097
面积: [28.0, 'anti-clockwise']

操作用时:1.060e+00 s
>>>

#面积计算
def areaCalc(self):
S = [];
len_ = self.vertNum;
vert = self.getVertexValue();

for i in range(len_):
y = vert[i][1];
dx = vert[(i-1)%len_][0]-vert[(i+1)%len_][0];
S.append(0.5*y*dx);

area = round(sum(S), 6);
if area < 0:
return [abs(area), 'clockwise'];
else:
return [area, 'anti-clockwise'];

#周长计算
def perimeterCalc(self):
L = 0;

len_ = self.vertNum;
vert = self.getVertexValue();

for i in range(len_):
x0, y0, x1, y1 = vert[i][0], vert[i][1], \
vert[(i+1)%len_][0], vert[(i+1)%len_][1];

L += ((x1-x0)**2+(y1-y0)**2)**0.5;

return round(L, 3);

def tmp4():
path = [[[6, 9], [2.4, 5.4], [0.8, 3.8], [1.33, 3], [2, 3], [6, 3], [6, 3.86], [3.33, 5], [6, 9]], [[6, 9], [2.4, 5.4], [0.8, 3.8], [1.33, 3], [2, 3], [3.33, 5], [6, 3.86], [8, 3], [6, 9]], [[6, 9], [2.4, 5.4], [0.8, 3.8], [0, 3], [1.5, 1.5], [1.78, 2.33], [2, 3], [3.33, 5], [6, 9]], [[6, 9], [2.4, 5.4], [0.8, 3.8], [0, 3], [1.33, 3], [1.78, 2.33], [2, 3], [3.33, 5], [6, 9]], [[6, 9], [2.4, 5.4], [0.8, 3.8], [0, 3], [1.33, 3], [2, 3], [6, 3], [6, 3.86], [6, 9]], [[6, 9], [2.4, 5.4], [0.8, 3.8], [0, 3], [1.33, 3], [2, 3], [3.33, 5], [6, 3.86], [6, 9]], [[6, 9], [2.4, 5.4], [3.33, 5], [2, 3], [6, 3], [6, -3], [8, -7], [8, 3], [6, 9]], [[6, 9], [2.4, 5.4], [3.33, 5], [6, 3.86], [6, 3], [6, -3], [8, -7], [8, 3], [6, 9]], [[6, 9], [2.4, 5.4], [-6, 9], [-0.37, 2.56], [0, 3], [1.33, 3], [2, 3], [3.33, 5], [6, 9]], [[6, 9], [3.33, 5], [2, 3], [1.78, 2.33], [3.67, -0.5], [4.29, 0.43], [6, 3], [6, 3.86], [6, 9]], [[6, 9], [3.33, 5], [2, 3], [6, 3], [6, -3], [5.67, -3.5], [8, -7], [8, 3], [6, 9]], [[6, 9], [3.33, 5], [2, 3], [6, 3], [6, -3], [8, -7], [8, 3], [6, 3.86], [6, 9]], [[6, 9], [3.33, 5], [2, 3], [6, 3], [4.5, 0], [6, -3], [8, -7], [8, 3], [6, 9]], [[6, 9], [3.33, 5], [6, 3.86], [6, 3], [6, -3], [5.67, -3.5], [8, -7], [8, 3], [6, 9]], [[6, 9], [3.33, 5], [6, 3.86], [6, 3], [4.5, 0], [6, -3], [8, -7], [8, 3], [6, 9]], [[6, 9], [6, 3.86], [6, 3], [4.29, 0.43], [4.5, 0], [6, -3], [8, -7], [8, 3], [6, 9]], [[6, 9], [6, 3.86], [6, 3], [6, -3], [5.56, -3.33], [5.67, -3.5], [8, -7], [8, 3], [6, 9]], [[6, 9], [6, 3.86], [6, 3], [6, -3], [5.67, -3.5], [5.35, -3.97], [8, -7], [8, 3], [6, 9]], [[6, 9], [6, 3.86], [6, 3], [4.5, 0], [6, -3], [5.67, -3.5], [8, -7], [8, 3], [6, 9]], [[6, 9], [6, 3.86], [6, 3], [4.5, 0], [4, -1], [6, -3], [8, -7], [8, 3], [6, 9]]]
len_path = len(path);

centerArray = [];
concaveArray = [];

#计时开始
startTime = time.clock();

for i in range(len_path):
path_ = path[i];
len_path_ = len(path_);
poly = Polygon(path_);

#生成顶点树
poly.genVertexTree();
#设置顶点凹凸性的属性
poly.setConcave();
#设置顶点的角度
poly.setAngle();

t = poly.getVertexTree();
angle = [];
for j in range(len_path_-1):
angle.append(t.find(Vertex(Point(path_[j]))).getVal().getAngle());

print('路径:', path[i]);
print('各顶点内角:', angle);
print('周长:',poly.perimeterCalc());
print('面积:', poly.areaCalc());

print('\n');

#计时结束
endTime = time.clock();

#打印结果
print('操作用时:{0:.3e} s'.format(endTime-startTime));

#</span>



路径: [[6, 9], [2.4, 5.4], [0.8, 3.8], [1.33, 3], [2, 3], [6, 3], [6, 3.86], [3.33, 5], [6, 9]]

各顶点内角: [11.2769, 180.0, 101.4755, 123.5245, 180.0, 90.0, 113.1208, 280.6023]

周长: 21.556

面积: [10.6061, 'anti-clockwise']



路径: [[6, 9], [2.4, 5.4], [0.8, 3.8], [1.33, 3], [2, 3], [3.33, 5], [6, 3.86], [8, 3], [6, 9]]

各顶点内角: [63.4349, 180.0, 101.4755, 123.5245, 123.6239, 259.4969, 180.1469, 48.2973]

周长: 22.79

面积: [17.4599, 'anti-clockwise']



路径: [[6, 9], [2.4, 5.4], [0.8, 3.8], [0, 3], [1.5, 1.5], [1.78, 2.33], [2, 3], [3.33, 5], [6, 9]]

各顶点内角: [11.2769, 180.0, 180.0, 90.0, 63.6418, 179.5362, 195.4459, 180.0992]

周长: 19.399

面积: [7.4925, 'anti-clockwise']



路径: [[6, 9], [2.4, 5.4], [0.8, 3.8], [0, 3], [1.33, 3], [1.78, 2.33], [2, 3], [3.33, 5], [6, 9]]

各顶点内角: [11.2769, 180.0, 180.0, 45.0, 236.113, 52.065, 195.4459, 180.0992]

周长: 18.539

面积: [6.21445, 'anti-clockwise']



路径: [[6, 9], [2.4, 5.4], [0.8, 3.8], [0, 3], [1.33, 3], [2, 3], [6, 3], [6, 3.86], [6, 9]]

各顶点内角: [45.0, 180.0, 180.0, 45.0, 180.0, 180.0, 90.0, 180.0]

周长: 20.485

面积: [18.0, 'anti-clockwise']



路径: [[6, 9], [2.4, 5.4], [0.8, 3.8], [0, 3], [1.33, 3], [2, 3], [3.33, 5], [6, 3.86], [6, 9]]

各顶点内角: [45.0, 180.0, 180.0, 45.0, 180.0, 123.6239, 259.4969, 66.8792]

周长: 20.93

面积: [12.8519, 'anti-clockwise']



路径: [[6, 9], [2.4, 5.4], [3.33, 5], [2, 3], [6, 3], [6, -3], [8, -7], [8, 3], [6, 9]]

各顶点内角: [63.4349, 68.2729, 280.351, 56.3761, 270.0, 153.4349, 26.5651, 161.5651]

周长: 39.302

面积: [36.404, 'anti-clockwise']



路径: [[6, 9], [2.4, 5.4], [3.33, 5], [6, 3.86], [6, 3], [6, -3], [8, -7], [8, 3], [6, 9]]

各顶点内角: [63.4349, 68.2729, 179.8479, 246.8792, 180.0, 153.4349, 26.5651, 161.5651]

周长: 36.663

面积: [31.2559, 'anti-clockwise']



路径: [[6, 9], [2.4, 5.4], [-6, 9], [-0.37, 2.56], [0, 3], [1.33, 3], [2, 3], [3.33, 5], [6, 9]]

各顶点内角: [11.2769, 248.1986, 25.6407, 81.2215, 229.9392, 180.0, 123.6239, 180.0992]

周长: 32.57

面积: [22.82, 'anti-clockwise']



路径: [[6, 9], [3.33, 5], [2, 3], [1.78, 2.33], [3.67, -0.5], [4.29, 0.43], [6, 3], [6, 3.86], [6, 9]]

各顶点内角: [33.7231, 179.9008, 164.5541, 128.0852, 67.4268, 179.9485, 146.3614, 180.0]

周长: 21.524

面积: [19.956, 'anti-clockwise']



路径: [[6, 9], [3.33, 5], [2, 3], [6, 3], [6, -3], [5.67, -3.5], [8, -7], [8, 3], [6, 9]]

各顶点内角: [52.1581, 179.9008, 56.3761, 270.0, 213.4248, 112.9229, 33.6523, 161.5651]

周长: 38.339

面积: [35.17, 'anti-clockwise']



路径: [[6, 9], [3.33, 5], [2, 3], [6, 3], [6, -3], [8, -7], [8, 3], [6, 3.86], [6, 9]]

各顶点内角: [33.7231, 179.9008, 56.3761, 270.0, 153.4349, 26.5651, 113.2677, 246.7323]

周长: 39.0

面积: [28.87, 'anti-clockwise']



路径: [[6, 9], [3.33, 5], [2, 3], [6, 3], [4.5, 0], [6, -3], [8, -7], [8, 3], [6, 9]]

各顶点内角: [52.1581, 179.9008, 56.3761, 296.56510000000003, 126.8699, 180.0, 26.5651, 161.5651]

周长: 38.716

面积: [38.51, 'anti-clockwise']



路径: [[6, 9], [3.33, 5], [6, 3.86], [6, 3], [6, -3], [5.67, -3.5], [8, -7], [8, 3], [6, 9]]

各顶点内角: [52.1581, 79.3977, 246.8792, 180.0, 213.4248, 112.9229, 33.6523, 161.5651]

周长: 35.701

面积: [30.0219, 'anti-clockwise']



路径: [[6, 9], [3.33, 5], [6, 3.86], [6, 3], [4.5, 0], [6, -3], [8, -7], [8, 3], [6, 9]]

各顶点内角: [52.1581, 79.3977, 246.8792, 206.5651, 126.8699, 180.0, 26.5651, 161.5651]

周长: 36.077

面积: [33.3619, 'anti-clockwise']



路径: [[6, 9], [6, 3.86], [6, 3], [4.29, 0.43], [4.5, 0], [6, -3], [8, -7], [8, 3], [6, 9]]

各顶点内角: [18.4349, 180.0, 213.6386, 120.3318, 179.4645, 180.0, 26.5651, 161.5651]

周长: 33.716

面积: [27.1375, 'anti-clockwise']



路径: [[6, 9], [6, 3.86], [6, 3], [6, -3], [5.56, -3.33], [5.67, -3.5], [8, -7], [8, 3], [6, 9]]

各顶点内角: [18.4349, 180.0, 180.0, 233.1301, 93.9647, 179.253, 33.6523, 161.5651]

周长: 33.282

面积: [23.21555, 'anti-clockwise']



路径: [[6, 9], [6, 3.86], [6, 3], [6, -3], [5.67, -3.5], [5.35, -3.97], [8, -7], [8, 3], [6, 9]]

各顶点内角: [18.4349, 180.0, 180.0, 213.4248, 180.8242, 104.5784, 41.1725, 161.5651]

周长: 33.518

面积: [24.26755, 'anti-clockwise']



路径: [[6, 9], [6, 3.86], [6, 3], [4.5, 0], [6, -3], [5.67, -3.5], [8, -7], [8, 3], [6, 9]]

各顶点内角: [18.4349, 180.0, 206.5651, 126.8699, 239.9899, 112.9229, 33.6523, 161.5651]

周长: 33.836

面积: [27.66, 'anti-clockwise']



路径: [[6, 9], [6, 3.86], [6, 3], [4.5, 0], [4, -1], [6, -3], [8, -7], [8, 3], [6, 9]]

各顶点内角: [18.4349, 180.0, 206.5651, 180.0, 108.4349, 198.4349, 26.5651, 161.5651]

周长: 34.097

面积: [28.0, 'anti-clockwise']

本节到此结束,欲知后事如何,请看下回分解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐