matplotlib在三维坐标系下获取x,y,z坐标及旋转角度

该代码示例展示了如何在Python中使用matplotlib库创建一个三维坐标系,并监听鼠标移动事件。当鼠标在图像上移动时,程序会实时打印出鼠标在三维坐标系中的坐标值。同时,当图像被旋转时,可以获取到旋转角度(roll,elev,azim)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D


# 鼠标移动事件的响应函数
def onclick(event):

    # 获取事件的x,y坐标
    x, y = event.xdata, event.ydata
    # print('x={}, y={}'.format(x, y))

    # 如果x和y是None的话,表示鼠标没有在figure里面移动
    # 如果x和y不是None的话,表示鼠标在figure里面移动,这时需要对x,y进行解析得到鼠标在三维坐标下的位移
    if x is not None and y is not None:

        # format_coord(x, y) 是 class Axes3D(Axes): 中的子函数
        # 该函数会返回 鼠标在 坐标系内的坐标值,因为该程序创建了一个三维坐标系,所以返回的是三维数值
        # 该函数返回值的 类型是字符串型
        sting = ax.format_coord(x, y)
        print(sting)
        print(type(sting))


if __name__ == '__main__':

    # 创建一个空白画布
    fig = plt.figure()

    # 创建一个鼠标移动事件
    fig.canvas.mpl_connect('motion_notify_event', onclick)

    # 创建一个子图
    ax = Axes3D(fig)
    fig.add_axes(ax)

    ax.set_xlabel('X Axes')
    ax.set_ylabel('Y Axes')
    ax.set_zlabel('Z Axes')

    # 在三维坐标系中随便画一条直线
    ax.plot3D(np.array([1, 10]), np.array([1, 10]), np.array([1, 10]), color='black')

    plt.show()


效果如下,当鼠标在图像内移动时,事件响应函数会实时打印鼠标在三维坐标系内的坐标点。

 当鼠标拖动图像进行旋转时,事件响应函数打印的就是旋转角度

在三维坐标系下,旋转角度可以直接通过

# print(ax.roll)
# print(ax.elev)
# print(ax.azim)

获得,roll,elev,azim是 Axes3D()中的变量。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值