You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于矩阵变换的点移动与轨道绘制技术问询

解决矩阵变换点的轨道绘制问题

我瞅了你的代码,立马发现问题所在啦——你绘制散点的时候把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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:15:55