[从头学数学] 第278节 [计算几何] 多边形周长和面积
2016-09-26 10:07
375 查看
剧情提要:
阿伟看到了一本比较有趣的书,是关于《计算几何》的,2008年由北清派出版。很好奇
它里面讲了些什么,就来看看啦。
正剧开始:
星历2016年09月26日 09:58:10, 银河系厄尔斯星球中华帝国江南行省。
[工程师阿伟]正在和[机器小伟]一起研究[计算几何]]。
![](http://img.blog.csdn.net/20160926095637439)
![](http://img.blog.csdn.net/20160926095643554)
<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>
![](http://img.blog.csdn.net/20160926095804112)
路径: [[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']
![](http://img.blog.csdn.net/20160926095911448)
路径: [[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']
![](http://img.blog.csdn.net/20160926095940894)
路径: [[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']
![](http://img.blog.csdn.net/20160926100011372)
路径: [[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']
![](http://img.blog.csdn.net/20160926100044982)
路径: [[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']
![](http://img.blog.csdn.net/20160926100106795)
路径: [[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']
![](http://img.blog.csdn.net/20160926100127551)
路径: [[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']
![](http://img.blog.csdn.net/20160926100145723)
路径: [[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']
![](http://img.blog.csdn.net/20160926100206125)
路径: [[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']
![](http://img.blog.csdn.net/20160926100224688)
路径: [[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']
![](http://img.blog.csdn.net/20160926100244942)
路径: [[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']
![](http://img.blog.csdn.net/20160926100305673)
路径: [[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']
![](http://img.blog.csdn.net/20160926100325533)
路径: [[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']
![](http://img.blog.csdn.net/20160926100405723)
路径: [[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']
![](http://img.blog.csdn.net/20160926100424706)
路径: [[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']
![](http://img.blog.csdn.net/20160926100444832)
路径: [[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']
![](http://img.blog.csdn.net/20160926100516817)
路径: [[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']
![](http://img.blog.csdn.net/20160926100541068)
路径: [[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']
![](http://img.blog.csdn.net/20160926100600209)
路径: [[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']
![](http://img.blog.csdn.net/20160926100618053)
路径: [[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']
本节到此结束,欲知后事如何,请看下回分解。
阿伟看到了一本比较有趣的书,是关于《计算几何》的,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']
本节到此结束,欲知后事如何,请看下回分解。
相关文章推荐
- [从头学数学] 第284节 [计算几何] 生成随机多边形
- [从头学数学] 第275节 [计算几何] 多边形顶点的五种类型
- [从头学数学] 第277节 [计算几何] 任意多边形的内角
- [从头学数学] 第286节 [计算几何] 多边形的布尔运算(上)
- [从头学数学] 第287节 [计算几何] 多边形的布尔运算(中)
- [从头学数学] 第273节 [计算几何] 多边形求交集
- [从头学数学] 第288节 [计算几何] 多边形的布尔运算(下)
- [从头学数学] 第283节 [计算几何] 多边形的单调块划分
- [从头学数学] 第269节 [计算几何] 点在多边形内
- 程序设计几何图形、矩形、圆形、正方形几种类型, 能够利用接口和多态性计算几何图形的面积和周长并显示。
- poj 1265 Area【计算几何:叉积计算多边形面积+pick定理计算多边形内点数+计算多边形边上点数】
- HDU 5230 (计算几何 圆和多边形面积交)
- [从头学数学] 第274节 [计算几何] 顶点树
- 南阳理工 题目3:多边形重心问题(计算几何,求多边形面积+重心)
- hdu 2528:Area(计算几何,求线段与直线交点 + 求多边形面积)
- [从头学数学] 第264节 [计算几何] 点和线段
- OpenCV轮廓、多边形逼近、关键点、周长和面积、边界框、矩、轮廓树、凹凸包、几何直方图、匹配
- 通过程序设计几何图形(Shape)、矩形(Rectangle)、圆形(Circle)、正方形(Square)几种类型,能够利用接口和多态性计算几何图形的面积和周长并显示。
- 3.第二单元任务五实训:通过程序设计几何图形接口(Shape),实现类矩形(Rectangle)、圆形(Circle)、正方形(Square)几种类型,能够利用接口和多态性计算几何图形的面积和周长并显
- [几何]计算不规则多边形的面积、中心、重心