如何创建垂直于坐标平面的线
How do I create a line that is perpendicular to a plane of coordinates
我有三个数据集(numpy 数组),坐标(X、Y 和 X)代表一个平面。我需要创建一条垂直于平面的线。
我从另一个文件中获取了数据,因为我不能轻易地与你分享,我创建了一个随机的pandas数据集,我用来生成数据面的代码如下:
cor_CTV = pd.DataFrame(np.random.randint(0,100,size=(100, 3)), columns = list('xyz'))
linear_data = np.c_[cor_CTV["x"], cor_CTV["y"], cor_CTV["z"]]
mn = np.min(linear_data, axis=0)
mx = np.max(linear_data, axis=0)
X,Y = np.meshgrid(np.linspace(mn[0], mx[0], 20), np.linspace(mn[1], mx[1], 20))
XX = X.flatten()
YY = Y.flatten()
A = np.c_[linear_data[:,0], linear_data[:,1], np.ones(linear_data.shape[0])]
C,_,_,_ = scipy.linalg.lstsq(A, linear_data[:,2])
Z = C[0]*X + C[1]*Y + C[2]
如果有人能帮助我,我将不胜感激。
可以使用任意两个非共线点的相对位置的叉积:
O = np.array([X[0][0], Y[0][0], Z[0][0]]) # Corner to be used as the origin
V1 = np.array([X[1][0], Y[1][0], Z[1][0]]) - O # Relative vectors
V2 = np.array([X[0][1], Y[0][1], Z[0][1]]) - O
V1 = V1 / scipy.linalg.norm(V1) # Normalise vectors
V2 = V2 / scipy.linalg.norm(V2)
# Take the cross product
perp = np.cross(V1, V2)
示例结果:
[ 0.18336919 -0.0287231 -0.98260979]
我有三个数据集(numpy 数组),坐标(X、Y 和 X)代表一个平面。我需要创建一条垂直于平面的线。
我从另一个文件中获取了数据,因为我不能轻易地与你分享,我创建了一个随机的pandas数据集,我用来生成数据面的代码如下:
cor_CTV = pd.DataFrame(np.random.randint(0,100,size=(100, 3)), columns = list('xyz'))
linear_data = np.c_[cor_CTV["x"], cor_CTV["y"], cor_CTV["z"]]
mn = np.min(linear_data, axis=0)
mx = np.max(linear_data, axis=0)
X,Y = np.meshgrid(np.linspace(mn[0], mx[0], 20), np.linspace(mn[1], mx[1], 20))
XX = X.flatten()
YY = Y.flatten()
A = np.c_[linear_data[:,0], linear_data[:,1], np.ones(linear_data.shape[0])]
C,_,_,_ = scipy.linalg.lstsq(A, linear_data[:,2])
Z = C[0]*X + C[1]*Y + C[2]
如果有人能帮助我,我将不胜感激。
可以使用任意两个非共线点的相对位置的叉积:
O = np.array([X[0][0], Y[0][0], Z[0][0]]) # Corner to be used as the origin
V1 = np.array([X[1][0], Y[1][0], Z[1][0]]) - O # Relative vectors
V2 = np.array([X[0][1], Y[0][1], Z[0][1]]) - O
V1 = V1 / scipy.linalg.norm(V1) # Normalise vectors
V2 = V2 / scipy.linalg.norm(V2)
# Take the cross product
perp = np.cross(V1, V2)
示例结果:
[ 0.18336919 -0.0287231 -0.98260979]