2017-11-20 3 views
1

私は、次の例については、「ギャップのない」アルファ形状を生成するためにトラブルを抱えています:MATLAB:ギャップのあるアルファシェイプ?

% surface points from: https://stackoverflow.com/questions/10655393 
aminor = 1.; % Torus minor radius 
Rmajor = 3.; % Torus major radius 
sd = 24; 
theta = linspace(-pi, pi, sd) ; % Poloidal angle 
phi = linspace(0., 2.*pi, 2*sd) ; % Toroidal angle 
[t, p] = meshgrid(phi, theta); 
x = (Rmajor + aminor.*cos(p)) .* cos(t); 
y = (Rmajor + aminor.*cos(p)) .* sin(t); 
z = aminor.*sin(p); 

私はあなたが見ることができるように、アルファがあるべき

alpha = 1; 
shp = alphaShape(x(:),y(:),z(:), alpha); 
plot(shp); 

とアルファ形状を作成しています所望のサーフェスポイント間のすべての距離をカバーするのに十分な大きさですが、返されるアルファシェイプにはいくつかのギャップが含まれています。

私には何が欠けていますか?

トーラスそれがあるべきよう:私は問題があなたのアルファ半径がに(またはいくつかの許容範囲内)正確に等しいなってしまうということだと思いますalphaShape alphashape with gaps

答えて

3

から torus as it should be

結果あなたのサーフェスポイントのいくつかが、より大きいである必要があります。これはalpha = 1.1;と私の作品:documentation for the alpha radius argument(強調鉱山)から

enter image description here

注意これを:

デフォルトアルファ半径は、アルファ形状を生成する最小アルファ半径a = criticalAlpha(shp,'all-points')、ありますそのはすべての点を囲みます

+0

私はアルファがすべての隣接点間の距離をカバーするのに十分に大きいと確信しています。ギャップに規則的なパターンがなく、ノード距離との関係を示すことになる。 – thengineer

+1

ギャップに一般的なパターンがあります:極値(より外側の頂点、上下の頂点、チューブが結合する頂点)で頻繁に発生します。今度は['' Alpha''](https://www.mathworks.com/help/matlab/ref/alphashape.html#inputarg_a)プロパティの別の抜粋に注意してください: "アルファ半径はアルファの半径ですディスクや球が点を掃引してアルファの形を作ります」この場合、アルファは、ポイントを1つの連続ストリップに結合するためにトロイダルのスライス全体を囲む必要がある球の半径です。 – gnovice

+0

...ええと、私はこのアルファ値の適切な定義を知らなかった。今やギャップは完全に意味をなさない(「1.0」でトーラスの小さな半径が与えられると)。 – thengineer

関連する問題