基于矩阵变换的点移动与轨道绘制技术问询
解决矩阵变换点的轨道绘制问题
我瞅了你的代码,立马发现问题所在啦——你绘制散点的时候把x轴和y轴都用了record[:,1],这相当于所有点都落在y=x的直线上,当然看起来是直线了!另外,要展现点的移动轨道,光靠散点不够直观,得把连续的点用线连起来才行。
先给你改好的完整代码:
%matplotlib inline import matplotlib.pyplot as plt import numpy as np # 生成初始点和变换矩阵 x = np.random.randn(2) # 2维初始点 A = np.random.randn(2, 2) # 2x2变换矩阵 print('初始点x的内容:\n{}\n变换矩阵A的内容:\n{}'.format(x, A)) def action(pt, n): record = [pt] for i in range(n): pt = A @ pt record = np.vstack([record, pt]) # 绘制轨道:先画连续线条,再画散点 plt.plot(record[:, 0], record[:, 1], '-', alpha=0.5, label='轨道') plt.scatter(record[:, 0], record[:, 1], c=np.arange(len(record)), cmap='viridis', label='变换点') # 美化图表 plt.xlabel('X轴') plt.ylabel('Y轴') plt.title('矩阵变换下的点移动轨道') plt.legend() plt.axis('equal') # 保持坐标轴比例一致,避免轨道变形 # 调用函数,执行100次变换 action(x, 100)
关键修改点说明:
- 修正坐标取值:把
plt.scatter(record[:,1], record[:,1])改成了plt.scatter(record[:,0], record[:,1]),这样x轴用点的第一维数据,y轴用第二维,才是点的真实坐标。 - 添加轨道线条:用
plt.plot()绘制连续的折线,半透明的线条可以清晰展示点的移动路径;散点用颜色渐变来区分变换的先后顺序(c=np.arange(len(record))),能直观看到点的移动方向。 - 优化图表显示:加上坐标轴标签、标题、图例,并且用
plt.axis('equal')保证坐标轴比例一致,防止轨道因为坐标轴缩放变形。
额外小技巧:
如果想看到更有意思的轨道(比如螺旋线、椭圆轨迹),可以换一些特定的变换矩阵,比如:
- 旋转缩放矩阵:
A = np.array([[0.95, -0.1], [0.1, 0.95]]),点会沿着螺旋线向内收敛 - 纯旋转矩阵:
theta = np.pi/12; A = np.array([[np.cos(theta), -np.sin(theta)], [np.sin(theta), np.cos(theta)]]),点会绕原点做圆周运动
内容的提问来源于stack exchange,提问作者lwf
相关产品推荐
相关产品推荐

