使用matplotlib绘制周转圆时代码无法正常运行问题求助
代码问题分析
- 循环内每次都调用
plt.figure()和plt.subplots()新建画布,导致每个圆被绘制在独立窗口,无法叠加出周转圆效果 plt.Circle()的圆心参数要求传入标量坐标,但原代码中prevx/prevy会被赋值为数组类型(因为theta是数组,三角函数计算输出为数组),参数类型不匹配会报错phaseList的相位值用的是角度单位,但numpy的np.cos()/np.sin()接收弧度值作为输入,相位计算错误- 没有绘制最终的周转圆轨迹曲线,只有圆的轮廓
修正后可运行代码
import matplotlib.pyplot as plt import numpy as np freqList = [1,2,3] ampList = [1,2,4] # 相位统一转为弧度单位 phaseList = np.deg2rad([0,10,20]) # 提前创建唯一画布与坐标轴 fig, ax = plt.subplots() circles = [] # 初始化总轨迹坐标数组 total_x = np.zeros(150) total_y = np.zeros(150) # 当前周转圆的圆心标量坐标,初始在原点 current_center_x = 0 current_center_y = 0 theta = np.linspace(0, 2*np.pi, 150) for i in range(len(freqList)): # 绘制当前层级周转圆 circle = plt.Circle((current_center_x, current_center_y), ampList[i], fill=False) ax.add_patch(circle) # 计算当前圆周运动的偏移量 offset_x = ampList[i] * np.cos(theta * freqList[i] + phaseList[i]) offset_y = ampList[i] * np.sin(theta * freqList[i] + phaseList[i]) # 累加到总轨迹中 total_x += offset_x total_y += offset_y # 更新下一层周转圆的圆心,取初始时刻的端点即可 current_center_x += offset_x[0] current_center_y += offset_y[0] # 绘制最终的合运动轨迹 ax.plot(total_x, total_y, c='r') plt.axis("equal") plt.xlim(-10, 10) plt.ylim(-10, 10) plt.show()
逻辑说明
- 所有图形元素都绘制在同一个坐标系下,保证周转圆的层级叠加效果
- 单独维护周转圆的圆心标量值,避免参数类型不匹配报错
- 相位单位统一转换为弧度,保证三角函数计算结果正确
- 累加每个圆周运动的偏移值得到最终的合运动轨迹,完整呈现周转圆效果
内容的提问来源于stack exchange,提问作者vito
相关产品推荐
相关产品推荐

