B样条曲线绘制

1.B样条曲线原理

  • 看书,有点懒

2. 固定基函数进行测试

# 固定了B样条基函数def B_curve_uni(V,n):   # V存储坐标点,V = [[x], [y]]   # n为曲线次数U = np.linspace(0,1,100)X = V[0]Y = V[1]n = 3 # 测试只用n=3coef_matrix = 1/6*np.matrix([[1,4,1,0],[-3,0,3,0],[3,-6,3,0],[-1,3,-3,1]])if len(X) < n+1:return '型值点个数不够'else:# n+1个点绘制一条曲线段,len(x)-n为需要绘制的曲线段数x = []y = []fig = plt.figure()plt.plot(X,Y,marker='o',markerfacecolor='white')for i in range(len(X)-n):         for u in U:x.append((np.matrix([1,u,np.power(u,2),np.power(u,3)])*coef_matrix*(np.matrix(X[i:i+n+1]).T))[0,0])y.append((np.matrix([1,u,np.power(u,2),np.power(u,3)])*coef_matrix*(np.matrix(Y[i:i+n+1]).T))[0,0])plt.plot(x,y)plt.plot([x[0],x[100],x[200],x[-1]],[y[0],y[100],y[200],y[-1]],'o')plt.xticks(fontsize=14)plt.yticks(fontsize=14)plt.show()
V = [[0,0,2,3,2,1],[1,3,3,2,1,1]]
# V = [[0,0,2],[1,3,3]]
B_curve_uni(V,3)

3.B样条曲线绘制(基函数随曲线次数改变)

def N(i,k,T,t):  # 曲线N_ikif k == 0:if t<T[i] or t>T[i+1]:return 0else:return 1else:result = (t-T[i])/(T[i+k]-T[i])*N(i,k-1,T,t) + (T[i+k+1]-t)/(T[i+k+1]-T[i+1])*N(i+1,k-1,T,t)return resultdef main(n,V,V_num):T = np.linspace(0,1,n+V_num+1)  # T存储节点t_x = np.linspace(0,1,160) # t_x存储每一个t值X = V[0]Y = V[1]x = [] # 用来存储曲线的x值y = [] # 用来存储曲线的y值for i in range(V_num-n):  # for循环用作获取第几条曲线段的数值result = pd.DataFrame(t_x,columns=['t'])for j in range(n+1):result1 = []for t in t_x:result1.append(N(i+j,n,T,t))result['N_{0}{1}'.format(i+j,n)] = result1  # 将N_ij存入dataframe# 把Dataframe中 T[i+n]<=t<=T[i+n+1] 的数据取出来 保存为 matrix, 然后用matrix*np.matrix(X[i:i+n+1]).T获取曲线的x值# lambda x: x>T[i+n] and x<T[i+n+1] 很奇怪,用 >= 或 <= 曲线有时会有问题 比如 V = [[0,0,2,3,2,1],[1,3,3,2,1,1]]Ni_matrix = np.matrix(result[result['t'].apply(lambda x: x>=T[i+n] and x<=T[i+n+1])].iloc[:,1:]) # Ni_matrix 是一个 t_ba*j 维矩阵x = x+((Ni_matrix*np.matrix(X[i:i+n+1]).T).T).tolist()[0]y = y+((Ni_matrix*np.matrix(Y[i:i+n+1]).T).T).tolist()[0]fig = plt.figure()plt.plot(X,Y,marker='o',markerfacecolor='white')plt.plot(x,y)plt.show()if __name__ == '__main__':n = int(input('请输入曲线的次数:'))V_num = int(input('请输入控制顶点个数:'))V = [[1,1,1.5,3,3.8,3.2,5,8,8],[0,0,2.6,3,2.2,-0.3,-0.8,2,2]]   # 有重复型值点坐标main(n,V,V_num)

【Python】B样条曲线绘制相关推荐

  1. python采用Basemap绘制完美中国地图(包括绘制边界框,随机点等)

    python采用Basemap绘制完美中国地图(包括绘制边界框,随机点等) 1. 效果图 2. 原理 2.1 依赖模块及安装 2.2 工程目录 2.3 依赖文件latlng.txt 经纬度 3 源码 ...

  2. 使用Python,Opencv绘制调色板及圆形来模拟霓虹的渐变效果

    使用Python,Opencv绘制调色板及圆形来模拟霓虹的渐变效果 1. 效果图 2. 源码 参考 这篇博客将使用python,opencv绘制调色板及圆形来模拟霓虹的渐变效果. 1. 效果图 可以构 ...

  3. python使用matplotlib绘制一条正弦曲线(plot函数可视化sine plot)

    python使用matplotlib绘制一条正弦曲线(plot函数可视化sine plot) 目录 python使用matplotlib绘制一条正弦曲线(plot函数可视化sine plot) #导入 ...

  4. Python使用matplotlib绘制透明背景的可视化图像并保存透明背景的可视化结果(transparent background)

    Python使用matplotlib绘制透明背景的可视化图像并保存透明背景的可视化结果(transparent background) 目录

  5. Python使用matplotlib绘制分组对比柱状图(bar plot)可视化时汉语(中文)标签显示成了框框□□、什么情况、我们有解决方案

    Python使用matplotlib绘制分组对比柱状图可视化时(bar plot)汉语(中文)标签显示成了框框□□.什么情况.我们有解决方案 目录

  6. Python使用matplotlib绘制数据去重前后的柱状图对比图(在同一个图中显示去重操作之后同一数据集的变化情况)

    Python使用matplotlib绘制数据去重前后的柱状图对比图(在同一个图中显示去重操作之后同一数据集的变化情况) #仿真数据 import pandas as pd import numpy a ...

  7. Python使用matplotlib绘制柱状图(bar plot)实战:水平条形图、垂直条形图、分组条形图、堆叠条形图

    Python使用matplotlib绘制柱状图(bar plot)实战:水平条形图.垂直条形图.分组条形图.堆叠条形图 目录

  8. Python把matplotlib绘制的水平条形图(horizontal bar)转化为竖直的柱状图(vertical bar)实战

    Python把matplotlib绘制的水平条形图(horizontal bar)转化为竖直的柱状图(vertical bar)实战 目录

  9. python使用matplotlib绘制水平条形图并在条形图上添加实际数值标签实战

    python使用matplotlib绘制水平条形图并在条形图上添加实际数值标签实战 # 绘制水平条形图进行模型对比 x_labels = ["LogisticRegression" ...

  10. Python可视化matplotlib绘制三维可视化图形(Three-Dimensional)

    Python可视化matplotlib绘制三维可视化图形(Three-Dimensional) Matplotlib最初设计时只考虑二维可视化绘图.大约在1.0版本发布的时候,在Matplotlib的 ...

最新文章

  1. Django之路——6 Django的模型层(一)
  2. java 表现层:jsp、freemarker、velocity
  3. Django之初步实现登录功能,APP及ORM
  4. 途牛网站无线架构变迁实践
  5. rabbitmq java文档_《RabbitMQ官方文档》订阅与发布
  6. Sales Organization with Fiscal Year
  7. 装箱问题(洛谷-P1049)
  8. 适合本科生的AI比赛目录
  9. JAVA时间操作类常用方法汇总
  10. 【Leetcode】Remove Duplicates from Sorted Array II
  11. bug是什么意思详细介绍
  12. 《你不可不知的50个建筑学知识》之哥特式建筑 1
  13. eclipse as 项目编码修改
  14. 江兴华老师在武汉讲座
  15. Fractions (水)
  16. 基于财务预测的基本面因子的分析
  17. SQl函数: 1.取整函数
  18. Android Fragment 使用解析
  19. 岚图高管解读近50亿融资:东风跟投9亿 考虑后续IPO
  20. Locust使用手册--Locust配置

热门文章

  1. 5G 技术特点与应用
  2. 重温张欣穗购书衷心与申霞艳,张鸿等名师座谈《千万与春住》二零一九年六月二十四日
  3. cp 出现 omitting directory
  4. 一阶线性常微分方程解法
  5. esxi - 加装vmware titan xp显卡配置
  6. AR涂涂乐⭐六、 UGUI精灵格式、自动延迟截图、优化“4”、移出扫描框终止截图进程
  7. 云联惠创业经营者认证_广州公安打掉云联惠涉传销组织 零壹财经曾发文警示...
  8. markdown提示错误HTML Rendering Error: An error occurred with the HTML rendering component
  9. 如何修复cdn服务器异常,cdn服务器连接异常怎么解决
  10. 上海小i机器人创始人:并非炒作 Siri几乎完全侵权