问题描述
我在 3d 中有一些点,想对它们进行某种推断。我的点在常规的 x
和 y
网格中并且有一些分裂。我想推断出分裂之外的点。我复制了一个具有三个分割的简化数据集。我推断出第一个分裂的末端、中间分裂的两侧和第三个分裂的前侧。在 10
分割的情况下,我推断第一个的末端侧,分割数的两侧 2
到 9
和最后一个的正面。这些是我的坐标(x
、y
和 z
):
surf_points=[[np.array([[1.,19.,4.],[1.,20.,[2.,4.5],[3.,4.]]),\
np.array([[4.,3.2],[4.,3.],[5.,3.1],[6.,3.1]]),\
np.array([[7.,4.1],[7.,4.2]])]]
目前,每个split先在x
方向排序,然后在y
方向排序。我将其更改为首先基于 y
排序,然后使用 this solution 排序 x
。然后 surf_points
将是:
[[np.array([[1.,\
np.array([[4.,\
np.array([[7.,4.2]])]]
第一次分割外推
对于第一次拆分,我想在每个 y
网格的末尾添加两个点。第一个 y
网格是 19
,第二个是 20
。新点的 x
和 y
是固定和定义的:(3.,19.)
和 (4.,19.)
。 z
值是根据每个 y
网格中存在的前两个点计算得出的。如果网格中只有一个点,我只需复制那个点的 z
。第一个 y
网格有两个点,z
值为 4.
和 4.5
。第一个外推点是该网格中的第三个,其 z
将计算为 4.5 + (4.5-4)/2 = 4.75
(z of last point + (z of last point - z of one point before the last)/2
) 并且对于第二个外推点,我更新最后一个点和最后一个点之前的点将其设为 4.75 + (4.75-4.5)/2 = 4.875
。因此,第一个 y
网格的两个外推点将是 (3.,4.75)
和 (4.,4.875)
。我对第二个 y
网格 (20
) 执行相同操作。这个网格有三个点,另外两个点是 (4.,20,3.75 #4+(4-4.5)/2)
和 (5.,3.625# 3.75+(3.75-4.)/2)
。这四点会在第一次分裂结束时加上。
中间分裂外推
对于中间分裂,我在前侧添加四个点,在末端添加四个点。端侧与第一次拆分的端侧完全相同。对于前侧 x
和 y
外推点的值将小于现有值。它们将在第一个 (2.,19.)
网格中为 (3.,19.)
和 y
,在第二个 (2.,20.)
网格中为 (3.,20.)
和 y
。我首先开始计算第二个点的 z
为 (z of first point + (z of first point - z of second point)/2
)。它将从现有的下两个点计算为 3.2 + (3.2-3.)/2.
,这使得 3.3
然后使用这个 3.3
值来计算这个网格中第一个点的 z 值 3.3 + (3.3-3.2)/2.
这使得3.35
。我对第二个 y
网格执行相同操作。
上次分割外推
对于最后一个分割,我想复制我为第二个分割的正面所做的事情,但它在每个 y
网格中只有一个点,我只复制外推值的值。
最后应该将新的外推点添加到以前的点中,我希望我的列表如下:
all_points=[[np.array([[1.,\
[3.,4.75],4.875],3.75],3.625]]),\
np.array([[2.,3.3],3.35],2.923],2.95],\
[4.,\
[7.,3.15],[8.,3.175],\
np.array([[5.,4.2],4.2]])]]
为了澄清我的问题,上传了一个无花果。在图中,每个分割的外推点用不同的颜色和符号显示。 我非常感谢在 Python 中将我的想法写成算法的任何帮助。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)