gpt4 book ai didi

arrays - 找到两个数据集之间的交集

转载 作者:太空宇宙 更新时间:2023-11-03 19:33:01 25 4
gpt4 key购买 nike

我正在生成两个类似于此的数组:

[x,y,z] = sphere;
A=[x,y,z]
B=[x+0.5,y+0.5,z+0.5]

第二个数组与第一个数组有偏移。

我想找到这两个数组 A 和 B 的交集空间。

我在这种情况下使用了 sphere 函数,但是否可以对不一定是球形的任何两个数据数组执行此操作。有办法做到这一点吗?

我正在为我正在寻找的内容添加一张图片。我想找到这两个区域之间的交集。但这些值不一定与您看到的相同。

如果我有每个空间的极限的方程式,这会使问题变得更容易吗?

enter image description here

最佳答案

我在评论中说可以使用 convhullinpolygon 来解决这个问题,只有 inpolygon 似乎不适用于3D 多边形。我们将使用 delaunayTriangulationpointLocation 来获得结果

完整代码:

[x,y,z] = sphere;
A=[x(:),y(:),z(:)];
B=[x(:)+0.5,y(:)+0.5,z(:)+0.5];

tess1=delaunayTriangulation(A); % delaunay Triangulation of points set A
tess2=delaunayTriangulation(B); % delaunay Triangulation of points set B

Tmp=[A;B];

% Point location searches for the triangles in the given delaunay
% triangulation that contain the points specified in Tmp, here Tmp is
% the reunion of sets A and B and we check for both triangulations
ids1=~isnan(pointLocation(tess1,Tmp));
ids2=~isnan(pointLocation(tess2,Tmp));

% ids1&ids2 is a logical array indicating which points
% in Tmp are in the intersection
IntersectPoints=Tmp(ids1&ids2,:);


plot3(A(:,1),A(:,2),A(:,3),'+b'); hold on
plot3(B(:,1),B(:,2),B(:,3),'+g');
plot3(IntersectPoints(:,1),IntersectPoints(:,2),IntersectPoints(:,3),'*r')

输出:

enter image description here

编辑 - 一个二维示例:

[x,y,z] = sphere;
A=[x(:),y(:)];
B=[x(:)+0.5,y(:)+0.5];

tess1=delaunayTriangulation(A); % delaunay Triangulation of points set A
tess2=delaunayTriangulation(B); % delaunay Triangulation of points set B

Tmp=[A;B];

% Point location searches for the triangles in the given delaunay
% triangulation that contain the points specified in Tmp, here Tmp is
% the reunion of sets A and B and we check for both triangulations
ids1=~isnan(pointLocation(tess1,Tmp));
ids2=~isnan(pointLocation(tess2,Tmp));

% ids1&ids2 is a logical array indicating which points
% in Tmp are in the intersection
IntersectPoints=Tmp(ids1&ids2,:);


plot(A(:,1),A(:,2),'+b'); hold on
plot(B(:,1),B(:,2),'+g');
plot(IntersectPoints(:,1),IntersectPoints(:,2),'*r');

输出:

enter image description here

编辑2:

如果您希望您的代码自动适应 2D 或 3D 数组,您只需要修改绘图调用即可。只需编写一个 if 语句来检查 A 和 B 中的列数

关于arrays - 找到两个数据集之间的交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37717543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com