[从头学数学] 第284节 [计算几何] 生成随机多边形
来源:互联网 发布:老外看网络玄幻小说 编辑:程序博客网 时间:2024/05/18 03:18
剧情提要:
阿伟看到了一本比较有趣的书,是关于《计算几何》的,2008年由北清派出版。很好奇
它里面讲了些什么,就来看看啦。
正剧开始:
星历2016年09月29日 12:35:32, 银河系厄尔斯星球中华帝国江南行省。
更多图片:
阿伟看到了一本比较有趣的书,是关于《计算几何》的,2008年由北清派出版。很好奇
它里面讲了些什么,就来看看啦。
正剧开始:
星历2016年09月29日 12:35:32, 银河系厄尔斯星球中华帝国江南行省。
[工程师阿伟]正在和[机器小伟]一起研究[计算几何]]。
<span style="font-size:18px;">#{Point([6, 9]), Point([-4, 5]), Point([2, -3]), Point([4, 1]), Point([0, 3]), Point([2, 3]), Point([8, -7]), Point([-2, -9]), Point([2, -7]), Point([-2, -5]), Point([6, 3]), Point([6, -3])}[[6, 9], [-4, 5], [2, -3], [4, 1], [0, 3], [2, 3], [8, -7], [-2, -9], [2, -7], [-2, -5], [6, 3], [6, -3]][[6, 3], [4, 1], [6, 9], [2, 3], [0, 3], [-4, 5], [-2, -5], [-2, -9], [2, -3], [2, -7], [8, -7], [6, -3]] #把给定的坐标点阵列数组[x, y],...按照距离它们的中心点的角度进行排列 #是为了把无序排列的闭合曲线上的点进行有序排列,后续可再经过连线形成 #可填充的闭合曲线 def angularSort(self, array): len0 = len(array); len1 = len(array[0]); if (len0 <= 0 or len1 != 2): return array; xTotal = yTotal = xCenter = yCenter = 0; for i in range(len0): xTotal += array[i][0]; yTotal += array[i][1]; xCenter = xTotal/len0; yCenter = yTotal/len0; x = y = xdiff = ydiff = 0; arrayB = []; for i in range(len0): x = array[i][0]; y = array[i][1]; xdiff = x - xCenter; ydiff = y - yCenter; if (abs(xdiff) < 1e-4): if (ydiff > 0): arrayB.append([x, y, math.pi/2]); else: arrayB.append([x, y, math.pi/2*3]); elif (xdiff >= 0 and ydiff > 0): #第一象限 arrayB.append([x, y, math.atan(abs(ydiff/xdiff))]); elif (xdiff < 0 and ydiff >= 0): #第二象限 arrayB.append([x, y, math.pi-math.atan(abs(ydiff/xdiff))]); elif (xdiff <= 0 and ydiff < 0): #第三象限 arrayB.append([x, y, math.pi+math.atan(abs(ydiff/xdiff))]); else: #第四象限 arrayB.append([x, y, math.pi*2-math.atan(abs(ydiff/xdiff))]); arrayB = sorted(arrayB, key = lambda a:(a[2], (a[0]-xCenter)**2+(a[1]-yCenter)**2)); retArray = []; for i in range(len(arrayB)): retArray.append(arrayB[i][:-1]); return retArray;def tmp7(): vertex = [[[-10, -9], 0], [[-2, -9], 1], [[2, -9], 2], [[2, -7], 3], [[8, -7], 4], [[-2, -5], 5], [[2, -3], 6], [[6, -3], 7], [[4, -1], 8], [[4, 1], 9], [[0, 3], 10], [[2, 3], 11], [[6, 3], 12], [[8, 3], 13], [[-4, 5], 14], [[0, 5], 15], [[-6, 9], 16], [[6, 9], 17]]; vertNum = len(vertex); pSet = set(); while (len(pSet) < 12): idx = random.randint(0, vertNum-1); pSet.add(Point(vertex[idx][0])); print(pSet); pList = list(pSet); for i in range(len(pList)): pList[i] = pList[i].value(); print(pList); transform = geo.Transform(); pList = transform.angularSort(pList); print(pList);#</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 colorArray = ['red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'purple'];var seg = [];plot.setLineWidth(5);seg = transform.scale(transform.translate($poly, 0, 0), scaleX/spaceX, scaleY/spaceY);shape.strokeDraw([].concat(seg), 'black');//主要顶点shape.pointDraw([].concat(a), 'blue', 1, 1, lable);cPoint = transform.scale(transform.translate($center, 0, 0), scaleX/spaceX, scaleY/spaceY);}//</span>
更多图片:
本节到此结束,欲知后事如何,请看下回分解。
0 0
- [从头学数学] 第284节 [计算几何] 生成随机多边形
- [从头学数学] 第263节 [计算几何] 线段生成
- [从头学数学] 第269节 [计算几何] 点在多边形内
- [从头学数学] 第273节 [计算几何] 多边形求交集
- [从头学数学] 第275节 [计算几何] 多边形顶点的五种类型
- [从头学数学] 第277节 [计算几何] 任意多边形的内角
- [从头学数学] 第278节 [计算几何] 多边形周长和面积
- [从头学数学] 第283节 [计算几何] 多边形的单调块划分
- [从头学数学] 第286节 [计算几何] 多边形的布尔运算(上)
- [从头学数学] 第287节 [计算几何] 多边形的布尔运算(中)
- [从头学数学] 第288节 [计算几何] 多边形的布尔运算(下)
- [从头学数学] 第270节 [计算几何] 例题数据生成
- [从头学数学] 第240节 计算几何 整装待发
- [从头学数学] 第267节 [计算几何] 路径规划
- [从头学数学] 第268节 [计算几何] 环形路径
- [从头学数学] 第271节 [计算几何] 凸包
- [从头学数学] 第274节 [计算几何] 顶点树
- [从头学数学] 第279节 [计算几何] 重心
- 总结android studio下载一个Android demo打开半天还在编译中
- [Mark] python 聚类分析 kmeans() 函数使用时报错
- 白话 Ruby 与 DSL 以及在 iOS 开发中的运用
- 设置任意条数的边框---android layout文件夹下面的layer-list.xml
- Tomcat中的Session小结
- [从头学数学] 第284节 [计算几何] 生成随机多边形
- 移动端笔记系列2--移动端样式和布局的坑
- ListView入门级单击,长按监听
- Instruments User Guide编程指南4-Profile You App's Performance
- float编码方式(来自sonikk的专栏)
- 阅读小结:Google's Neural Machine Translation System
- JDK chm帮助文档下载地址
- 探秘Java中的String、StringBuilder以及StringBuffer
- 下拉框默认选中