多边形平滑算法-ChaikinSmoothing
时间:2021-08-08
本文章向大家介绍多边形平滑算法-ChaikinSmoothing,主要包括多边形平滑算法-ChaikinSmoothing使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1 import math 2 3 # visualisation 4 import matplotlib.pyplot as plt 5 import matplotlib.lines as lines 6 # visualisation 7 8 def Sum_points(P1, P2): 9 x1, y1 = P1 10 x2, y2 = P2 11 return x1+x2, y1+y2 12 13 def Multiply_point(multiplier, P): 14 x, y = P 15 return float(x)*float(multiplier), float(y)*float(multiplier) 16 17 def Check_if_object_is_polygon(Cartesian_coords_list): 18 if Cartesian_coords_list[0] == Cartesian_coords_list[len(Cartesian_coords_list)-1]: 19 return True 20 else: 21 return False 22 23 class Object(): 24 25 def __init__(self, Cartesian_coords_list): 26 self.Cartesian_coords_list = Cartesian_coords_list 27 28 def Find_Q_point_position(self, P1, P2): 29 Summand1 = Multiply_point(float(3)/float(4), P1) 30 Summand2 = Multiply_point(float(1)/float(4), P2) 31 Q = Sum_points(Summand1, Summand2) 32 return Q 33 34 def Find_R_point_position(self, P1, P2): 35 Summand1 = Multiply_point(float(1)/float(4), P1) 36 Summand2 = Multiply_point(float(3)/float(4), P2) 37 R = Sum_points(Summand1, Summand2) 38 return R 39 40 def Smooth_by_Chaikin(self, number_of_refinements): 41 refinement = 1 42 copy_first_coord = Check_if_object_is_polygon(self.Cartesian_coords_list) 43 while refinement <= number_of_refinements: 44 self.New_cartesian_coords_list = [] 45 46 for num, tuple in enumerate(self.Cartesian_coords_list): 47 if num+1 == len(self.Cartesian_coords_list): 48 pass 49 else: 50 P1, P2 = (tuple, self.Cartesian_coords_list[num+1]) 51 Q = obj.Find_Q_point_position(P1, P2) 52 R = obj.Find_R_point_position(P1, P2) 53 self.New_cartesian_coords_list.append(Q) 54 self.New_cartesian_coords_list.append(R) 55 56 if copy_first_coord: 57 self.New_cartesian_coords_list.append(self.New_cartesian_coords_list[0]) 58 59 self.Cartesian_coords_list = self.New_cartesian_coords_list 60 refinement += 1 61 return self.Cartesian_coords_list 62 63 if __name__ == "__main__": 64 Cartesian_coords_list = [(1, 1), 65 (1, 3), 66 (4, 5), 67 (5, 1), 68 (2, 0.5), 69 (1, 1),] 70 71 obj = Object(Cartesian_coords_list) 72 Smoothed_obj = obj.Smooth_by_Chaikin(number_of_refinements=5) 73 74 # visualisation 75 x1 = [i for i, j in Smoothed_obj] 76 y1 = [j for i, j in Smoothed_obj] 77 x2 = [i for i, j in Cartesian_coords_list] 78 y2 = [j for i, j in Cartesian_coords_list] 79 plt.plot(range(7), range(7), 'w', alpha=0.7) 80 myline = lines.Line2D(x1, y1, color='r') 81 mynewline = lines.Line2D(x2, y2, color='b') 82 plt.gca().add_artist(myline) 83 plt.gca().add_artist(mynewline) 84 plt.show()
个人学习记录
原文地址:https://www.cnblogs.com/jeshy/p/15114956.html
- jQuery选择器大全(48个代码片段+21幅图演示)2
- 神经网络-感知器
- NSNotificationCenter 通知的使用方法详解你要知道的KVC、KVO、Delegate、Notification都在这里
- Protocol与Delegate 使用方法详解你要知道的KVC、KVO、Delegate、Notification都在这里
- iOS多线程——你要知道的GCD都在这里你要知道的iOS多线程NSThread、GCD、NSOperation、RunLoop都在这里
- NSCopying和NSCoding对象序列化反序列化基础详解你要知道的NSCopying、NSCoding协议及对象序列化和反序列化都在这里
- KVO 正确使用姿势进阶及底层实现你要知道的KVC、KVO、Delegate、Notification都在这里
- iOS多线程——你要知道的NSOperation都在这里你要知道的iOS多线程NSThread、GCD、NSOperation、RunLoop都在这里
- iOS多线程——你要知道的NSThread都在这里你要知道的iOS多线程NSThread、GCD、NSOperation、RunLoop都在这里
- KVO、Delegate、Notification 区别及相关使用场景你要知道的KVC、KVO、Delegate、Notification都在这里
- Core ML简介及实时目标检测及Caffe TensorFlow coremltools模型转换
- iOS网络——NSURLSession详解及SDWebImage源码解析你要知道的NSURLSession都在这里
- BZOJ3585: mex(主席树)
- 01.LoT.UI 前后台通用框架分解系列之——小图片背景全屏显示(可自动切换背景)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 详解 Vue 目录及配置文件之 config 目录
- Nginx 搭建静态资源服务
- vue 使用自定义字体
- vue 跨域问题
- Shell 递归查找文件
- element-ui 实现嵌套表格
- Leetcode 第23场双周赛A 5360. 统计最大组的数目 (手速题,map)
- Java 水题系列(4)数组合并
- SpringBoot 整合 SpringDataJPA
- Codeforces Beta Round #51 C. Pie or die(博弈 思维)
- SpringDateJPA 系列之 JPA 中的相关操作
- python Turtle 画出“精美碎花小清新树”快来拿代码!
- SpringDataJPA 系列之 JPA 简介
- Leetcode 264. 丑数 II (数论,三指针,类dp)
- Leetcode 628. 三个数的最大乘积 (数学)