我在matplotlib中绘制了一个'泪滴'形状的圆柱体。为了获得泪滴形状,我绘制了从$(this)
到theta = 0
的正常圆柱和从theta = pi
到theta = pi
的椭圆。然而,我现在试图围绕它的轴“旋转”圆柱体,这可以通过theta = 2pi
方便地给出。
我尝试使用旋转矩阵围绕z轴旋转Wikipedia给出:
然而,当我尝试通过z-axis
弧度旋转时,圆柱体变得非常毁容。
反正有没有阻止这种情况发生? 这是我的代码:
-pi/3
答案 0 :(得分:2)
您的轮播存在缺陷:要计算Y1[i]
,您需要X1[i]
的旧值,但您已经更新了它。你可以试试像
X1[i], Y1[i] = cos(a)*X1[i]-sin(a)*Y1[i], sin(a)*X1[i]+cos(a)*Y1[i]
如果你想让矩阵乘法更明显(并修复bug),你也可以做以下事情(请仔细检查矩阵是否正确,乘法是否正确,我没有测试这个):
rotation_matrix = np.array([[cos(a), -sin(a)], [sin(a), cos(a)]])
x, y = zip(*[(x,y) @ rotation_matrix for x,y in zip(x,y)])
@
在3.5中是新的,对于numpy数组,它被定义为矩阵乘法。如果您的版本低于3.5,则可以使用np.dot
。
zip(*...)
是获取一对列表而不是一对列表所必需的。另请参阅this answer