- 老师答疑区
- 帖子详情
老师参与
样条曲线MATLAB代码改用Python写出错
澄碧钓徒
发表于2019年08月08日
<p><code class="brush:python;toolbar:false" >from numpy import *
from matplotlib.pyplot import *
c = array([0, 1, 2, -2, -1, 0, 0, 0.3, 2.5, 2.5, 4.7, 5])
v1 = array([1, 0]).T
v2 = array([1, 0]).T
l = 0.254 / 2
nc = len(c)
rc = array([c[:][0] - dot(v1, l), c[:][0] + dot(v1, l), \
c[:][1:(nc - 2)], c[:][nc - 1] - dot(v2, l), \
c[:][nc - 1], c[:][nc - 1] - dot(v2, l)])
n = len(rc)
s = linspace(0, 1, 101)
f1s = (1 - s) ** 3 / 6
f2s = (3 * s ** 3 - 6 * s ** 2 + 4) / 6
f3s = (3 * s ** 3 + 3 * s ** 2 + 3 * s + 1) / 6
f4s = s ** 3 / 6
figure(1)
mycolor = "mbc"
plot(rc[0][:], rc[1][:], "r*")
show()
for i in range(n - 3):
p = dot(rc[:][i], f1s) + dot(rc[:][i + 1], f2s) + \
dot(rc[:][i + 2], f3s) + dot(rc[:][i + 3], f4s)
plot(p[0][:], p[1][:], mycolor[i % 3])
show()</code></p><p><img src="https://nos.netease.com/edu-image/1d62b404de724842ab4d0a0d9e6c23b3.PNG" /></p><p>用惯了Anaconda后MATLAB就不怎么用了,按说这个地方Python的matplotlib和numpy库用法跟MATLAB非常类似,Python数组下标从0开始索引肯定要减1,<strong>我估计问题会不会是出在f1s~f4s四个函数的幂运算上?PPT上MATLAB的是点幂,numpy.dot()方法对应MATLAB的矩阵相乘而乘号(*)相当于MATLAB的点乘,那么MATLAB的点除、点幂跟numpy库怎么对应啊?</strong><br /></p>
5
回复