我有两组点,一组是分析数据,另一组将用于对分析数据进行后处理的结果。
黑色的分析数据是散乱的。
用于结果的点是红色的。
下面是同一张图上的两组点:
我的问题是:我将插值到红色点上,但是您可以看到有些红色点落在黑色数据集中的空洞区域内。插值会导致这些点出现非零值,但这些值在最终数据集中必须为零。
我一直在考虑几种策略,以使这些值归零。以下是一些无序的策略:
1. 找到一个凸包,其顶点仅包含黑色数据点,并且该凸集内只包含红色数据点。同时,该凸包的面积应最大化,同时满足这两个条件。
实现起来相当困难,主要是由于需要选择哪些黑色数据点应从迭代搜索凸包中排除。
编辑:分析数据包含x、y、z和3个电场分量值Ex、Ey和Ez。黑色数据集中的空洞位于金属内部,因此没有电势变化,或者换句话说,电场值都为零。
这张图片展示了使用scipy的griddata进行线性插值的Ex分量的单个z层。黑色椭圆是中央赛道形空洞边界的粗略指示器。您可以看到椭圆内部有红色和蓝色(表示x方向的+和- E场),应该为零(在此图中为浅绿色)。完成的数据将用于跟踪带电粒子的轨迹,因此如果其中一条粒子的路径实际上穿过了空洞,则进行跟踪的软件只能告诉电势是否保持不变,即它知道路径穿过了固体金属,并且会放弃该路径。 如果真空中存在电场,粒子跟踪软件不知道有某些结构存在,会导致问题发生。
黑色的分析数据是散乱的。
![从+Z视角查看的散点分析数据点。](https://istack.dev59.com/XFgRK.webp)
![常规网格结果数据点。](https://istack.dev59.com/2tUji.webp)
![输入图像描述](https://istack.dev59.com/8TtXI.webp)
我一直在考虑几种策略,以使这些值归零。以下是一些无序的策略:
1. 找到一个凸包,其顶点仅包含黑色数据点,并且该凸集内只包含红色数据点。同时,该凸包的面积应最大化,同时满足这两个条件。
实现起来相当困难,主要是由于需要选择哪些黑色数据点应从迭代搜索凸包中排除。
对于只有一个值(如1或0)的数据集,可以添加一个额外的维度,以使两者都可以成为同一数据集的一部分,但仍然可以区分开来。使用kNN(最近邻)算法选择虚空中仅红色点。基本思想是,虚空中的红色点将具有n(6?)个最近邻居,这些邻居在它们自己的集合中。仅通过虚空边界分离的红色数据点将具有不同数量的邻居,最后,距边界至少一步的红色点将具有几乎全部为黑色数据集邻居。我看到的现有算法返回索引或数组掩码,两者都是很好的解决方案。我还没有尝试过实现这个。
从用于创建黑色数据集的SolidWorks模型中手动提取边界点。在许多方面都不可行。这必须逐层手动完成,并且我展示的图片仅代表实际完整集的一小部分。
通过对我视觉确认感兴趣的一部分红色数据点进行多次细化,手动创建掩码。也不可行。除非我已经没有其他选择了。
编辑:分析数据包含x、y、z和3个电场分量值Ex、Ey和Ez。黑色数据集中的空洞位于金属内部,因此没有电势变化,或者换句话说,电场值都为零。
这张图片展示了使用scipy的griddata进行线性插值的Ex分量的单个z层。黑色椭圆是中央赛道形空洞边界的粗略指示器。您可以看到椭圆内部有红色和蓝色(表示x方向的+和- E场),应该为零(在此图中为浅绿色)。完成的数据将用于跟踪带电粒子的轨迹,因此如果其中一条粒子的路径实际上穿过了空洞,则进行跟踪的软件只能告诉电势是否保持不变,即它知道路径穿过了固体金属,并且会放弃该路径。 如果真空中存在电场,粒子跟踪软件不知道有某些结构存在,会导致问题发生。