如何旋转圆柱体而不会造成“剪切”外观

时间:2016-07-19 14:40:20

标签: python matplotlib

我在matplotlib中绘制了一个'泪滴'形状的圆柱体。为了获得泪滴形状,我绘制了从$(this)theta = 0的正常圆柱和从theta = pitheta = pi的椭圆。然而,我现在试图围绕它的轴“旋转”圆柱体,这可以通过theta = 2pi方便地给出。

我尝试使用旋转矩阵围绕z轴旋转Wikipedia给出: enter image description here

然而,当我尝试通过z-axis弧度旋转时,圆柱体变得非常毁容。 enter image description here

反正有没有阻止这种情况发生? 这是我的代码:

-pi/3

1 个答案:

答案 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