假设我有一个n3D 点列表存储在一个 Numpy 数组中(3, n)。我想在该列表中找到所有 4 个点的集合,使 4 个点共面。我怎样才能做到这一点?
例如,给定一个points包含 8 个顶点的数组(无特定顺序)在 3D 空间中围绕任意角度旋转的立方体:
points = np.array([[ 0.8660254 , 0.8660254 , 0. , 0.3660254 , -0.5 , 0.3660254 , 0. , -0.5 ],
[ 0.35355339, -0.35355339, 0.70710678, -0.25881905, 0.09473435, -0.96592583, 0. , -0.61237244],
[ 1.06066017, 0.35355339, 0.70710678, 1.67303261, 1.31947922, 0.96592583, 0. , 0.61237244]])
我如何找到位于立方体每个面的角落的 6 组 4 个顶点?具体来说,我正在寻找一个完全矢量化的基于 Numpy/Scipy 的解决方案。
编辑:正如 ShlomiF 指出的那样,立方体的顶点实际上有 12 个共面组,包括沿着立方体的面对角线位于平面上的顶点。
这是我用来生成的代码points:
import numpy as np
import scipy.linalg as spl
def rot(axis, theta):
return spl.expm(np.cross(np.eye(len(axis)), axis/spl.norm(axis)*theta))
rot3 = rot((1,0,0), np.pi/4) @ rot((0,1,0), np.pi/3) @ rot((0,0,1), np.pi/2)
points = np.array([[1, 0, 1, 1, 1, 0, 0, 0],
[0, 0, 0, 1, 1, 1, 0, 1],
[1, 1, 0, 1, 0, 1, 0, 0]])
points = rot3 @ points
开心每一天1111
海绵宝宝撒
相关分类