问题描述
我在 3d 空间中有一堆点(x
、y
和 z
),我想从中提取一些点。我复制了一个带有两个链接在一起的数组的简化示例:
all_points=[[np.array([[6.8,1.,0.1],[6.8,3.,6.,\
[4.8,2.],[4.8,\
[3.8,3.],[3.8,\
[2.8,4.1],[2.8,4.1]]),\
np.array([[5.,[5.,\
[4.,[4.,\
[6.,[6.,\
[7.,4.],[7.,\
[3.,[3.,4.]])]]
首先,我想检查数组是否正常。如果我根据 z
值对普通数组进行排序,则 srted 数组的 x
值将增加或减少。第一个阵列(上图中的蓝点)清楚地显示了一个正常的集合。对于普通数组,我只做一个简单的任务并导出显示它们角的四个点(在我的图中用黄色和绿色箭头显示)。这些点是根据 x
、y
和 z
的最小值和最大值找到的。以下代码给了我法线的四个角:
four_corners=[]
for points in all_points:
for sub_points in points:
sorted_sub=np.sort(sub_points.view('i8,i8,i8'),order=['f2','f1'],axis=0).view('float')
le_st=sorted_sub[np.where(sorted_sub[:,2] == sorted_sub[0,2])]
le_st=len(le_st)
le_en=sorted_sub[np.where(sorted_sub[:,2] == sorted_sub[-1,2])]
le_en=len(le_en)
cor=np.array([sorted_sub[0,:],sorted_sub[int((le_st-1)),sorted_sub[-1,sorted_sub[-le_en,:]])
four_corners.append(cor)
在异常集合中(我的无花果中的黑色方块)通常有些点非常接近正常集合(可以定义一个限制),然后它们就会消失。我想通过创建两个平面来提取四个点。第一个平面是使用为法线点找到的四个角点中的三个创建的。第二个表面是使用不接近正常点的异常点的每三个点创建的(在我的图中用红线突出显示)。然后,我想找到两个曲面的交线,并在x
(z
和y
)的最小值和最大值中找到1
和6
十字路口。我所有角点(正常或异常)的 y
值是最小值或最大值。其他两个点是通过将来自法线平面的具有较高 y
值(由黄色箭头突出显示)的两个角点的 z
和 z
值代入方程异常集平面。我只知道如何基于 this solution 创建表面。实际上,我可能有几个正常和异常的集合,它们都与正常相关联。在此之前,我非常感谢在 Python 中做我想做的事情的任何帮助和贡献。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)