2013-05-02 112 views
0

我目前正在绘制2个彼此重叠的独立3维无定形斑点。我已经通过变形一个单位圆创建了斑点(正如您在下面提供的代码中看到的那样)。我的问题是:是否有一种简单的方法来隔离重叠区域?我需要隔离重叠的区域,然后以不同的颜色(例如反过来绿色区域)来清楚地显示重叠的位置。我实际的程序有许多重叠的形状,但是为了简单起见,我已经产生了以下代码来说明什么,我试图做的:在三维形状之间查找重叠区域

% Create Sphere with 100 points 
N = 100;     % sphere grid points 
[X,Y,Z] = sphere(N);  % get x,y,z coordinates for sphere 
num=size(X,1)*size(X,2); % get total amount of x-coordinates (m*n) 

% Loop through every x-coordinate and apply scaling if applicable 
for k=1:num    % loop through every coordinate 
    value=X(k);   % store original value of X(k) as value 
    if value<0   % compare value to 0 
     X(k)=0.3*value; % if < 0, scale value 
    end 
end 

% Loop through every z-coordinate and apply scaling if applicable 
for k=1:num    % loop through every coordinate 
    value=Z(k);   % store original value of X(k) as value 
    if value>0   % compare value to 0 
     Z(k)=0.3*value; % if < 0, scale value 
    end 
end 

mesh(X,Y,Z,'facecolor','y','edgecolor','y','facealpha',... 
    0.2,'edgealpha',0.2); 
hold on 
mesh(-1*(X-1),Y,Z,'facecolor','r','edgecolor','r','facealpha',... 
    0.2,'edgealpha',0.2); 
hold off 
axis equal 

我不necessarliy找代码,只是一个有效的算法或过程来达到理想的结果,因为我需要将这个结果调整到更复杂的程序中。

回答

1

在绘制对象时维护整数数组(n维),增加数组中的每个对应点。完成后,循环访问数组,每个元素> 1在两个或多个对象之间有重叠,使用数组坐标根据重叠数为对象着色。

+0

嗯,我可以看到如果这是有效的,如果我的形状有内点,但目前我只有表面点。你知道一个简单的方法,我可以人为地产生内点吗? – anonymous 2013-05-02 16:43:27

+0

@工程师您将需要通过对3D模型进行采样并将其从表面更改为体积来创建阵列。 – denver 2013-05-02 17:11:16

0

我已经在二维与MATLAB内置函数inpolygon找出重叠区域。但是,它本身不支持3D。我建议你试试inhull功能,你可以在文件交换中找到here。请注意它只支持凸包。

如果这不帮助你,也许你会在this的讨论中找到一些灵感。