我有两个点p1(x1,y1,z1)和p2(x2,y2,z2)。我想在以p1为中心的半径为r的圆上采样点,该圆所在的平面与矢量p2-p1垂直(因此p2-p1将是该平面的法向量)。我有在XOY平面使用极坐标系统采样的代码,但苦于如何推广到不同于(0,0,1)的法线
rho = np.linspace(0, 2*np.pi, 50)
r = 1
x = np.cos(rho) * r
y = np.sin(rho) * r
z = np.zeros(rho.shape)
我有两个点p1(x1,y1,z1)和p2(x2,y2,z2)。我想在以p1为中心的半径为r的圆上采样点,该圆所在的平面与矢量p2-p1垂直(因此p2-p1将是该平面的法向量)。我有在XOY平面使用极坐标系统采样的代码,但苦于如何推广到不同于(0,0,1)的法线
rho = np.linspace(0, 2*np.pi, 50)
r = 1
x = np.cos(rho) * r
y = np.sin(rho) * r
z = np.zeros(rho.shape)
2条答案
按热度按时间rqdpfwrv1#
首先,您需要在圆的平面中定义两个基本向量。
第一个是正交于法线
n = p2-p1
的任意矢量选择具有最大幅值的法线分量和具有第二幅值的分量。
交换它们的值,取最大值的反,并使第三个分量为零(注意,结果与法线的点积为零,因此它们是正交的)
例如,如果
n.y
最大,n.z
次之,则使然后使用矢量积计算第二个基矢量
规范化向量
v
和u
。使用向量形式上的中心点p1
圈出点:或在组件中:
8cdiaqws2#
假设我们有一个向量n,我们想找到一个以圆心p1为圆心、半径为r、与n正交的点组成的圆。