如何在python中相交两个平面并导出相交的坐标

时间:2021-04-17 16:49:22

标签: python arrays algorithm geometry plane

我在 3d 空间中有一堆点(xyz),我想从中提取一些点。我复制了一个带有两个链接在一起的数组的简化示例:

all_points=[[np.array([[6.8,1.,0.1], [6.8,3.,0.1], [6.8,6.,0.1],\
                       [4.8,1.,2.], [4.8,3.,2.], [4.8,6.,2.],\
                       [3.8,1.,3.], [3.8,3.,3.], [3.8,6.,3.],\
                       [2.8,1.,4.1], [2.8,3.,4.1], [2.8,6.,4.1]]),\
             np.array([[5.,1.,2.], [5.,3.,2.], [5.,6.,2.],\
                       [4.,1.,3.], [4.,3.,3.], [4.,6.,3.],\
                       [6.,1.,3.], [6.,3.,3.], [6.,6.,3.],\
                       [7.,1.,4.], [7.,3.,4.], [7.,6.,4.],\
                       [3.,1.,4.], [3.,3.,4.], [3.,6.,4.]])]]

首先,我想检查数组是否正常。如果我根据 z 值对普通数组进行排序,则 srted 数组的 x 值将增加或减少。第一个阵列(上图中的蓝点)清楚地显示了一个正常的集合。对于普通数组,我只做一个简单的任务并导出显示它们角的四个点(在我的图中用黄色和绿色箭头显示)。这些点是根据 xyz 的最小值和最大值找到的。以下代码给了我法线的四个角:

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)

在异常集合中(我的无花果中的黑色方块)通常有些点非常接近正常集合(可以定义一个限制),然后它们就会消失。我想通过创建两个平面来提取四个点。第一个平面是使用为法线点找到的四个角点中的三个创建的。第二个表面是使用不接近正常点的异常点的每三个点创建的(在我的图中用红线突出显示)。然后,我想找到两个曲面的交线,并在xzy)的最小值和最大值中找到16十字路口。我所有角点(正常或异常)的 y 值是最小值或最大值。其他两个点是通过将来自法线平面的具有较高 y 值(由黄色箭头突出显示)的两个角点的 zz 值代入方程异常集平面。我只知道如何基于 this solution 创建表面。实际上,我可能有几个正常和异常的集合,它们都与正常相关联。在此之前,我非常感谢在 Python 中做我想做的事情的任何帮助和贡献。

enter image description here

0 个答案:

没有答案