通过指定圆心,圆所在平面的法线,半径来绘制三维空间中的圆:
import numpy as np
normal = [1,1,1]
centroid = [1,1,1]
radius = 2
def threeDimensionalCircle(centroid, normal, radius, numPoints = 50):
theta = np.linspace(0, 2*np.pi, numPoints)
x1= radius *np.cos( theta )
y1= radius *np.sin( theta )
z1=np.zeros( theta.shape[0] )
A1=np.arcsin(-normal[1]/np.sqrt(normal[1]**2+normal[2]**2))
B1 =np.arcsin(normal[0]/np.sqrt(normal[0]**2+normal[2]**2))
C1 = 0
Rx_A1 = [[1, 0, 0], [0, np.cos(A1), np.sin(A1)], [0, -np.sin(A1), np.cos(A1)] ]
Ry_B1=[[np.cos(B1), 0, -np.sin(B1)], [0, 1, 0], [np.sin(B1), 0, np.cos(B1)]]
Rz_C1=[[np.cos(C1), np.sin(C1), 0], [-np.sin(C1), np.cos(C1), 0], [0., 0., 1.]]
Rxyz1= np.linalg.multi_dot((Rz_C1, Ry_B1, Rx_A1, np.array([x1, y1, z1])))
rayEnd = np.zeros([len(theta), 3])
XC, YC, ZC = centroid[0], centroid[1], centroid[2]
rayEnd[:,0]=Rxyz1[0,:] + XC * np.ones(len(theta))
rayEnd[:,1]=Rxyz1[1,:] + YC * np.ones(len(theta))
rayEnd[:,2]=Rxyz1[2,:] + ZC * np.ones(len(theta))
return rayEnd
rayEnd = threeDimensionalCircle(centroid, normal, radius, numPoints = 50)
Comments | NOTHING