Длина стрелки в сфере Блоха - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь построить что-то, называемое сфера Блоха. Это представляет состояние квантовых битов в форме стрелки в сфере, радиус которой равен 1,0.

Я написал коды ниже.

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
from itertools import product, combinations

print("Put angle theta and phi, 0≤theta≤180, 0≤phi≤360")
theta = input("theta:")
phi = input("phi:")
theta = float(theta)
phi = float(phi)
X = np.sin(phi)
Y = np.sin(theta)
Z = np.cos(theta)

class quantum_gates:
def __init__(self,X,Y,Z):
    self.X = float(X)
    self.Y = float(Y)
    self.Z = float(Z)

    if theta <0 or theta >180 or phi < 0 or phi >360:
        print("Put the value of angles again")
    else:
        fig = plt.figure()
        ax = fig.gca(projection='3d')
        ax.set_aspect("equal")
        u, v = np.mgrid[0:2*np.pi:20j, 0:np.pi:10j]
        x = np.cos(u)*np.sin(v)
        y = np.sin(u)*np.sin(v)
        z = np.cos(v)
        ax.set_xlabel('y')
        ax.set_ylabel('x')
        ax.set_zlabel('z')
        ax.plot_wireframe(y, x, z, color="black")
        ax.quiver(0,0,0,Y,X,Z,color="red",length=1.0)

Когда я ставлю (тэта, фи) = (30,0), наконечник стрелки достигает поверхности сферы. Однако, когда я ставлю (theta, phi) = (30,30), наконечник стрелки выходит за пределы сферы.

Изображение текущей ситуации можно посмотреть по ссылке ниже.

An arrow tip reaching outside of the sphere

1 Ответ

0 голосов
/ 08 ноября 2018

Полагаю, вы неправильно выполняете преобразование координат. X, Y и Z должны быть рассчитаны следующим образом ( ссылка на Википедию ):

X = np.sin(theta) * np.cos(phi)
Y = np.sin(theta) * np.sin(phi)
Z = np.cos(theta)

Кроме того, пустые тригонометрические функции принимают значения в радианах. Таким образом, тета должна быть в диапазоне [0, пи], фи должна быть в диапазоне [0, 2 * пи). Для перевода градусов в радианы вы можете использовать numpy.radians().

...