阿伟看到了一本比较有趣的书,是关于《计算几何》的,2008年由北清派出版。很好奇
它里面讲了些什么,就来看看啦。
正剧开始:
星历2016年09月25日 11:26:01, 银河系厄尔斯星球中华帝国江南行省。
[工程师阿伟]正在和[机器小伟]一起研究[计算几何]]。
<span style="font-size:18px;">#
>>>
顶点数量: 8
顶点集: [Point([6, 9]), Point([2.4, 5.4]), Point([0.8, 3.8]), Point([1.33, 3]), Point([2, 3]), Point([6, 3]), Point([6, 3.86]), Point([3.33, 5])]
边集: [SegLine([2.4, 5.4], [6, 9]), SegLine([0.8, 3.8], [2.4, 5.4]), SegLine([1.33, 3], [0.8, 3.8]), SegLine([1.33, 3], [2, 3]), SegLine([2, 3], [6, 3]), SegLine([6, 3], [6, 3.86]), SegLine([6, 3.86], [3.33, 5]), SegLine([3.33, 5], [6, 9])]
边集
[1.33, 3]: [Point([2, 3]), Point([0.8, 3.8])], len =2
[2, 3]: [Point([1.33, 3]), Point([6, 3])], len =2
[6, 3]: [Point([2, 3]), Point([6, 3.86])], len =2
[0.8, 3.8]: [Point([1.33, 3]), Point([2.4, 5.4])], len =2
[6, 3.86]: [Point([6, 3]), Point([3.33, 5])], len =2
[3.33, 5]: [Point([6, 3.86]), Point([6, 9])], len =2
[2.4, 5.4]: [Point([0.8, 3.8]), Point([6, 9])], len =2
[6, 9]: [Point([3.33, 5]), Point([2.4, 5.4])], len =2
顶点集
[Point([1.33, 3]), Point([2, 3]), Point([6, 3]), Point([0.8, 3.8]), Point([6, 3.86]), Point([3.33, 5]), Point([2.4, 5.4]), Point([6, 9])]
>>>
>>>
操作用时:3.159e-02 s
[[3.48, 4.51], [3.73, 4.51], [2.23, 4.13], [2.21, 4.32], [3.07, 4.26], [2.73, 4.51], [5.22, 2.3], [5.72, 2.41], [1.09, 4.99], [4.13, 3.26], [5.62, 1.19], [5.67, 2.11], [5.48, 1.62], [6.12, 1.29], [5.98, 1.73], [6.1, 1.16], [6.4, 0.25], [6.38, 0.17], [6.27, 0.67], [6.06, 0.98]]
>>>
def tmp3():
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 = [];
#计时开始
startTime = time.clock();
for i in range(len_path):
poly = Polygon(path[i]);
poly.genVertexTree();
centerArray.append(poly.centerPoint());
#计时结束
endTime = time.clock();
#打印结果
print('操作用时:{0:.3e} s'.format(endTime-startTime));
print(centerArray);
#</span>
<span style="font-size:18px;">//
if (1) {
var r = 20;
config.setSector(1,1,1,1);
config.graphPaper2D(0, 0, r);
config.axis2D(0, 0, 250, 1.2);
//坐标轴设定
var scaleX = 2*r, scaleY = 2*r;
var spaceX = 2, spaceY = 2;
var xS = -10, xE = 10;
var yS = -10, yE = 10;
config.axisSpacing(xS, xE, spaceX, scaleX, 'X');
config.axisSpacing(yS, yE, spaceY, scaleY, 'Y');
var transform = new Transform();
//顶点
var a = [];
for (var i = 0; i < $vertex.length; i++) {
a.push($vertex[i][0]);
}
//显示变换
if (a.length > 0) {
a = transform.scale(transform.translate(a, 0, 0), scaleX/spaceX, scaleY/spaceY);
}
var lable = [];
for (var i = 0; i < 100; i++) {
lable.push(i.toFixed(0));
}
/*
//边集
var b = [];
for (var i = 0; i < $seg.length; i++) {
b.push([a[$seg[i][0]], a[$seg[i][1]]]);
}
var edges = b.length;
for (var i = 0; i < edges; i++) {
shape.multiLineDraw([].concat(b[i]), 'red');
}*/
var colorArray = ['red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'purple'];
var seg = [];
var idx = xGlobal;
var len = $path2.length;
plot.setLineWidth(3);
seg = transform.scale(transform.translate($path2[idx%len], 0, 0), scaleX/spaceX, scaleY/spaceY);
shape.multiLineDraw([].concat(seg), 'pink');
cPoint = transform.scale(transform.translate($center, 0, 0), scaleX/spaceX, scaleY/spaceY);
shape.pointDraw([].concat([cPoint[idx%len]]), 'red');
/*
//次要顶点
var b = [];
for (var i = 0; i < 6; i++) {
b = [].concat($pointType[n][i]);
//显示变换
if (b.length > 0) {
b = transform.scale(transform.translate(b, 0, 0), scaleX/spaceX, scaleY/spaceY);
shape.pointDraw([].concat(b), colorArray[(i-1)%7]);
}
}*/
//主要顶点
shape.pointDraw([].concat(a), 'blue', 1, 1, lable);
}
//</span>
下面各图中红色的为中心点,橙色的为凹顶点,事实证明,中心点的位置与多边形的凹凸性,与顶点的凹凸性,没有任何关系。
路径: [[6, 9], [2.4, 5.4], [0.8, 3.8], [1.33, 3], [2, 3], [6, 3], [6, 3.86], [3.33, 5]]
凹点: [[3.33, 5]]
凸点: [[6, 9], [2.4, 5.4], [0.8, 3.8], [1.33, 3], [6, 3], [6, 3.86]]
路径: [[6, 9], [2.4, 5.4], [0.8, 3.8], [1.33, 3], [2, 3], [3.33, 5], [6, 3.86], [8, 3]]
凹点: [[3.33, 5], [6, 3.86]]
凸点: [[6, 9], [2.4, 5.4], [0.8, 3.8], [1.33, 3], [2, 3], [8, 3]]
路径: [[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]]
凹点: [[0.8, 3.8], [2, 3], [3.33, 5]]
凸点: [[6, 9], [2.4, 5.4], [0, 3], [1.5, 1.5], [1.78, 2.33]]
路径: [[6, 9], [2.4, 5.4], [0.8, 3.8], [0, 3], [1.33, 3], [1.78, 2.33], [2, 3], [3.33, 5]]
凹点: [[0.8, 3.8], [1.33, 3], [2, 3], [3.33, 5]]
凸点: [[6, 9], [2.4, 5.4], [0, 3], [1.78, 2.33]]
路径: [[6, 9], [2.4, 5.4], [0.8, 3.8], [0, 3], [1.33, 3], [2, 3], [6, 3], [6, 3.86]]
凹点: [[0.8, 3.8]]
凸点: [[6, 9], [2.4, 5.4], [0, 3], [6, 3]]
路径: [[6, 9], [2.4, 5.4], [0.8, 3.8], [0, 3], [1.33, 3], [2, 3], [3.33, 5], [6, 3.86]]
凹点: [[0.8, 3.8], [3.33, 5]]
凸点: [[6, 9], [2.4, 5.4], [0, 3], [2, 3], [6, 3.86]]
路径: [[6, 9], [2.4, 5.4], [3.33, 5], [2, 3], [6, 3], [6, -3], [8, -7], [8, 3]]
凹点: [[3.33, 5], [6, 3]]
凸点: [[6, 9], [2.4, 5.4], [2, 3], [6, -3], [8, -7], [8, 3]]
路径: [[6, 9], [2.4, 5.4], [3.33, 5], [6, 3.86], [6, 3], [6, -3], [8, -7], [8, 3]]
凹点: [[6, 3.86]]
凸点: [[6, 9], [2.4, 5.4], [3.33, 5], [6, -3], [8, -7], [8, 3]]
路径: [[6, 9], [2.4, 5.4], [-6, 9], [-0.37, 2.56], [0, 3], [1.33, 3], [2, 3], [3.33, 5]]
凹点: [[2.4, 5.4], [0, 3], [3.33, 5]]
凸点: [[6, 9], [-6, 9], [-0.37, 2.56], [2, 3]]
路径: [[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], [3.33, 5], [2, 3], [1.78, 2.33], [3.67, -0.5], [4.29, 0.43], [6, 3]]
路径: [[6, 9], [3.33, 5], [2, 3], [6, 3], [6, -3], [5.67, -3.5], [8, -7], [8, 3]]
凹点: [[6, 3], [6, -3]]
凸点: [[6, 9], [3.33, 5], [2, 3], [5.67, -3.5], [8, -7], [8, 3]]
路径: [[6, 9], [3.33, 5], [2, 3], [6, 3], [6, -3], [8, -7], [8, 3], [6, 3.86]]
凹点: [[6, 3], [6, 3.86]]
凸点: [[6, 9], [3.33, 5], [2, 3], [6, -3], [8, -7], [8, 3]]
路径: [[6, 9], [3.33, 5], [2, 3], [6, 3], [4.5, 0], [6, -3], [8, -7], [8, 3]]
凹点: [[6, 3]]
凸点: [[6, 9], [3.33, 5], [2, 3], [4.5, 0], [8, -7], [8, 3]]
路径: [[6, 9], [3.33, 5], [6, 3.86], [6, 3], [6, -3], [5.67, -3.5], [8, -7], [8, 3]]
凹点: [[6, 3.86], [6, -3]]
凸点: [[6, 9], [3.33, 5], [5.67, -3.5], [8, -7], [8, 3]]
路径: [[6, 9], [3.33, 5], [6, 3.86], [6, 3], [4.5, 0], [6, -3], [8, -7], [8, 3]]
凹点: [[6, 3.86], [6, 3]]
凸点: [[6, 9], [3.33, 5], [4.5, 0], [8, -7], [8, 3]]
路径: [[6, 9], [6, 3.86], [6, 3], [4.29, 0.43], [4.5, 0], [6, -3], [8, -7], [8, 3]]
凹点: [[6, 3]]
凸点: [[6, 9], [4.29, 0.43], [4.5, 0], [8, -7], [8, 3]]
路径: [[6, 9], [6, 3.86], [6, 3], [6, -3], [5.56, -3.33], [5.67, -3.5], [8, -7], [8, 3]]
凹点: [[6, -3]]
凸点: [[6, 9], [5.56, -3.33], [5.67, -3.5], [8, -7], [8, 3]]
路径: [[6, 9], [6, 3.86], [6, 3], [6, -3], [5.67, -3.5], [5.35, -3.97], [8, -7], [8, 3]]
凹点: [[6, -3], [5.67, -3.5]]
凸点: [[6, 9], [5.35, -3.97], [8, -7], [8, 3]]
路径: [[6, 9], [6, 3.86], [6, 3], [4.5, 0], [6, -3], [5.67, -3.5], [8, -7], [8, 3]]
凹点: [[6, 3], [6, -3]]
凸点: [[6, 9], [4.5, 0], [5.67, -3.5], [8, -7], [8, 3]]
路径: [[6, 9], [6, 3.86], [6, 3], [4.5, 0], [4, -1], [6, -3], [8, -7], [8, 3]]
凹点: [[6, 3], [6, -3]]
凸点: [[6, 9], [4, -1], [8, -7], [8, 3]]
<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]]
凹点: [[3.33, 5]]
凸点: [[6, 9], [2.4, 5.4], [0.8, 3.8], [1.33, 3], [6, 3], [6, 3.86]]
路径: [[6, 9], [2.4, 5.4], [0.8, 3.8], [1.33, 3], [2, 3], [3.33, 5], [6, 3.86], [8, 3]]
凹点: [[3.33, 5], [6, 3.86]]
凸点: [[6, 9], [2.4, 5.4], [0.8, 3.8], [1.33, 3], [2, 3], [8, 3]]
路径: [[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]]
凹点: [[0.8, 3.8], [2, 3], [3.33, 5]]
凸点: [[6, 9], [2.4, 5.4], [0, 3], [1.5, 1.5], [1.78, 2.33]]
路径: [[6, 9], [2.4, 5.4], [0.8, 3.8], [0, 3], [1.33, 3], [1.78, 2.33], [2, 3], [3.33, 5]]
凹点: [[0.8, 3.8], [1.33, 3], [2, 3], [3.33, 5]]
凸点: [[6, 9], [2.4, 5.4], [0, 3], [1.78, 2.33]]
路径: [[6, 9], [2.4, 5.4], [0.8, 3.8], [0, 3], [1.33, 3], [2, 3], [6, 3], [6, 3.86]]
凹点: [[0.8, 3.8]]
凸点: [[6, 9], [2.4, 5.4], [0, 3], [6, 3]]
路径: [[6, 9], [2.4, 5.4], [0.8, 3.8], [0, 3], [1.33, 3], [2, 3], [3.33, 5], [6, 3.86]]
凹点: [[0.8, 3.8], [3.33, 5]]
凸点: [[6, 9], [2.4, 5.4], [0, 3], [2, 3], [6, 3.86]]
路径: [[6, 9], [2.4, 5.4], [3.33, 5], [2, 3], [6, 3], [6, -3], [8, -7], [8, 3]]
凹点: [[3.33, 5], [6, 3]]
凸点: [[6, 9], [2.4, 5.4], [2, 3], [6, -3], [8, -7], [8, 3]]
路径: [[6, 9], [2.4, 5.4], [3.33, 5], [6, 3.86], [6, 3], [6, -3], [8, -7], [8, 3]]
凹点: [[6, 3.86]]
凸点: [[6, 9], [2.4, 5.4], [3.33, 5], [6, -3], [8, -7], [8, 3]]
路径: [[6, 9], [2.4, 5.4], [-6, 9], [-0.37, 2.56], [0, 3], [1.33, 3], [2, 3], [3.33, 5]]
凹点: [[2.4, 5.4], [0, 3], [3.33, 5]]
凸点: [[6, 9], [-6, 9], [-0.37, 2.56], [2, 3]]
路径: [[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], [3.33, 5], [2, 3], [1.78, 2.33], [3.67, -0.5], [4.29, 0.43], [6, 3]]
路径: [[6, 9], [3.33, 5], [2, 3], [6, 3], [6, -3], [5.67, -3.5], [8, -7], [8, 3]]
凹点: [[6, 3], [6, -3]]
凸点: [[6, 9], [3.33, 5], [2, 3], [5.67, -3.5], [8, -7], [8, 3]]
路径: [[6, 9], [3.33, 5], [2, 3], [6, 3], [6, -3], [8, -7], [8, 3], [6, 3.86]]
凹点: [[6, 3], [6, 3.86]]
凸点: [[6, 9], [3.33, 5], [2, 3], [6, -3], [8, -7], [8, 3]]
路径: [[6, 9], [3.33, 5], [2, 3], [6, 3], [4.5, 0], [6, -3], [8, -7], [8, 3]]
凹点: [[6, 3]]
凸点: [[6, 9], [3.33, 5], [2, 3], [4.5, 0], [8, -7], [8, 3]]
路径: [[6, 9], [3.33, 5], [6, 3.86], [6, 3], [6, -3], [5.67, -3.5], [8, -7], [8, 3]]
凹点: [[6, 3.86], [6, -3]]
凸点: [[6, 9], [3.33, 5], [5.67, -3.5], [8, -7], [8, 3]]
路径: [[6, 9], [3.33, 5], [6, 3.86], [6, 3], [4.5, 0], [6, -3], [8, -7], [8, 3]]
凹点: [[6, 3.86], [6, 3]]
凸点: [[6, 9], [3.33, 5], [4.5, 0], [8, -7], [8, 3]]
路径: [[6, 9], [6, 3.86], [6, 3], [4.29, 0.43], [4.5, 0], [6, -3], [8, -7], [8, 3]]
凹点: [[6, 3]]
凸点: [[6, 9], [4.29, 0.43], [4.5, 0], [8, -7], [8, 3]]
路径: [[6, 9], [6, 3.86], [6, 3], [6, -3], [5.56, -3.33], [5.67, -3.5], [8, -7], [8, 3]]
凹点: [[6, -3]]
凸点: [[6, 9], [5.56, -3.33], [5.67, -3.5], [8, -7], [8, 3]]
路径: [[6, 9], [6, 3.86], [6, 3], [6, -3], [5.67, -3.5], [5.35, -3.97], [8, -7], [8, 3]]
凹点: [[6, -3], [5.67, -3.5]]
凸点: [[6, 9], [5.35, -3.97], [8, -7], [8, 3]]
路径: [[6, 9], [6, 3.86], [6, 3], [4.5, 0], [6, -3], [5.67, -3.5], [8, -7], [8, 3]]
凹点: [[6, 3], [6, -3]]
凸点: [[6, 9], [4.5, 0], [5.67, -3.5], [8, -7], [8, 3]]
路径: [[6, 9], [6, 3.86], [6, 3], [4.5, 0], [4, -1], [6, -3], [8, -7], [8, 3]]
凹点: [[6, 3], [6, -3]]
凸点: [[6, 9], [4, -1], [8, -7], [8, 3]]
操作用时:5.985e-01 s
[[3.48, 4.51], [3.73, 4.51], [2.23, 4.13], [2.21, 4.32], [3.07, 4.26], [2.73, 4.51], [5.22, 2.3], [5.72, 2.41], [1.09, 4.99], [4.13, 3.26], [5.62, 1.19], [5.67, 2.11], [5.48, 1.62], [6.12, 1.29], [5.98, 1.73], [6.1, 1.16], [6.4, 0.25], [6.38, 0.17], [6.27, 0.67], [6.06, 0.98]]
[[[3.33, 5]], [[3.33, 5], [6, 3.86]], [[0.8, 3.8], [2, 3], [3.33, 5]], [[0.8, 3.8], [1.33, 3], [2, 3], [3.33, 5]], [[0.8, 3.8]], [[0.8, 3.8], [3.33, 5]], [[3.33, 5], [6, 3]], [[6, 3.86]], [[2.4, 5.4], [0, 3], [3.33, 5]], [], [[6, 3], [6, -3]], [[6, 3], [6, 3.86]], [[6, 3]], [[6, 3.86], [6, -3]], [[6, 3.86], [6, 3]], [[6, 3]], [[6, -3]], [[6, -3], [5.67, -3.5]], [[6, 3], [6, -3]], [[6, 3], [6, -3]]]
>>>
#计算中心点
def centerPoint(self):
xCenter = 0;
yCenter = 0;
for i in range(self.vertNum):
p_ = self.vertex[i].value();
xCenter += p_[0];
yCenter += p_[1];
return [round(xCenter/self.vertNum, 2), round(yCenter/self.vertNum, 2)];
#判断三角形是顺时针还是逆时针
def judgeClockwise(self, P1, P2, P3):
#三个点都是[x, y]形式,即投影在平面上
x1, y1, x2, y2, x3, y3 = P1[0], P1[1], P2[0], P2[1], P3[0], P3[1];
cross = (x2-x1)*(y3-y1)-(y2-y1)*(x3-x1);
if (cross > 0):
#逆时针
return 1;
elif (cross < 0):
#顺时针
return -1;
else:
return 0;
#判断凹多边形,顶点的凹凸性
def judgeConcavePolygon(self, array):
newArray = array;
vertexNum = len(newArray);
#多边形上的凹点
concavePoint = [];
#多边形上的凸点
convexPoint = [];
#返回矩阵
returnArray = [];
if (vertexNum >= 3):
for i in range(vertexNum):
P1 = newArray[(i-1+vertexNum)%vertexNum];
P2 = newArray[i%vertexNum];
P3 = newArray[(i+1)%vertexNum];
if (self.judgeClockwise(P1, P2, P3) < 0): #顺序不能错
#三角形是顺时针,是凹点
concavePoint.append(P2);
elif (self.judgeClockwise(P1, P2, P3) > 0): #顺序不能错
convexPoint.append(P2);
returnArray.append(newArray);
returnArray.append(concavePoint);
returnArray.append(convexPoint);
return returnArray;
else:
return [array, [], []];
def tmp3():
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):
poly = Polygon(path[i]);
#poly.genVertexTree();
centerArray.append(poly.centerPoint());
a = poly.judgeConcavePolygon(poly.getVertexValue());
concaveArray.append(a[1]);
print('路径:', a[0]);
print('凹点:', a[1]);
print('凸点:', a[2]);
print('\n');
#计时结束
endTime = time.clock();
#打印结果
print('操作用时:{0:.3e} s'.format(endTime-startTime));
print(centerArray);
print(concaveArray);
#</span>
<span style="font-size:18px;">//
$center = [[3.48, 4.51], [3.73, 4.51], [2.23, 4.13], [2.21, 4.32], [3.07, 4.26], [2.73, 4.51], [5.22, 2.3], [5.72, 2.41], [1.09, 4.99], [4.13, 3.26], [5.62, 1.19], [5.67, 2.11], [5.48, 1.62], [6.12, 1.29], [5.98, 1.73], [6.1, 1.16], [6.4, 0.25], [6.38, 0.17], [6.27, 0.67], [6.06, 0.98]];
$concave = [[[3.33, 5]], [[3.33, 5], [6, 3.86]], [[0.8, 3.8], [2, 3], [3.33, 5]], [[0.8, 3.8], [1.33, 3], [2, 3], [3.33, 5]], [[0.8, 3.8]], [[0.8, 3.8], [3.33, 5]], [[3.33, 5], [6, 3]], [[6, 3.86]], [[2.4, 5.4], [0, 3], [3.33, 5]], [], [[6, 3], [6, -3]], [[6, 3], [6, 3.86]], [[6, 3]], [[6, 3.86], [6, -3]], [[6, 3.86], [6, 3]], [[6, 3]], [[6, -3]], [[6, -3], [5.67, -3.5]], [[6, 3], [6, -3]], [[6, 3], [6, -3]]];
$path2 = [[[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]]]
if (1) {
var r = 20;
config.setSector(1,1,1,1);
config.graphPaper2D(0, 0, r);
config.axis2D(0, 0, 250, 1.2);
//坐标轴设定
var scaleX = 2*r, scaleY = 2*r;
var spaceX = 2, spaceY = 2;
var xS = -10, xE = 10;
var yS = -10, yE = 10;
config.axisSpacing(xS, xE, spaceX, scaleX, 'X');
config.axisSpacing(yS, yE, spaceY, scaleY, 'Y');
var transform = new Transform();
//顶点
var a = [];
for (var i = 0; i < $vertex.length; i++) {
a.push($vertex[i][0]);
}
//显示变换
if (a.length > 0) {
a = transform.scale(transform.translate(a, 0, 0), scaleX/spaceX, scaleY/spaceY);
}
var lable = [];
for (var i = 0; i < 100; i++) {
lable.push(i.toFixed(0));
}
/*
//边集
var b = [];
for (var i = 0; i < $seg.length; i++) {
b.push([a[$seg[i][0]], a[$seg[i][1]]]);
}
var edges = b.length;
for (var i = 0; i < edges; i++) {
shape.multiLineDraw([].concat(b[i]), 'red');
}*/
var colorArray = ['red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'purple'];
var seg = [];
var idx = xGlobal;
var len = $path2.length;
plot.setLineWidth(3);
seg = transform.scale(transform.translate($path2[idx%len], 0, 0), scaleX/spaceX, scaleY/spaceY);
shape.multiLineDraw([].concat(seg), 'pink');
//主要顶点
shape.pointDraw([].concat(a), 'blue', 1, 1, lable);
cPoint = transform.scale(transform.translate($center, 0, 0), scaleX/spaceX, scaleY/spaceY);
shape.pointDraw([].concat([cPoint[idx%len]]), 'red');
concavePoint = transform.scale(transform.translate($concave[idx%len], 0, 0), scaleX/spaceX, scaleY/spaceY);
shape.pointDraw([].concat(concavePoint), 'orange');
/*
//次要顶点
var b = [];
for (var i = 0; i < 6; i++) {
b = [].concat($pointType[n][i]);
//显示变换
if (b.length > 0) {
b = transform.scale(transform.translate(b, 0, 0), scaleX/spaceX, scaleY/spaceY);
shape.pointDraw([].concat(b), colorArray[(i-1)%7]);
}
}*/
}
//</span>
本节到此结束,欲知后事如何,请看下回分解。