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

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()


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

matplotlib在三维坐标系下获取x,y,z坐标及旋转角度_第1张图片

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

matplotlib在三维坐标系下获取x,y,z坐标及旋转角度_第2张图片

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

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

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

 

你可能感兴趣的:(matplotlib,python)