(高い)ライン&等値面を行うには、暗黙のと同等の機能をMathWorks社のMATLAB

二次元の等値面に関連忌まわしい完全なセットは、図中、三次元空間と、暗黙的な関数(ライン)上で行いました。

2次元、3次元の物体は、表面点であると考えられる関数の値がゼロで表さ図陰関数の構造を作ることであり、同一であり、表示され、その後、密閉容積の外側(等高線(表面)領域を算出します)全空間(容積)の面積の割合として。

I.2次元平面輪郭陰関数

図を用いて2次元平面上の輪郭contourf機能を実現することができます。また、他の方法の数を持っている必要があります。

機能使用\(Z = \ COS(X )* \ COS(Y)+0.5 \)を

図中の(高い)ラインの1当量を用いて作られた充填。

clear all;
clc;
% 给出定义域,生成网格。
x = 0:0.01:2*pi;
y = 0:0.01:2*pi;
[X, Y] = meshgrid(x, y);

% 给出隐函数表达式
Z = cos(X).*cos(Y)+0.5;

% 做等值线图
ax = figure;
[M, C] = contourf(X, Y, Z);
axis off;

C.LineWidth = 1;
C.ShowText = 'on';

生成された画像である:

バイナリ関数の極値の方法によれば、\(\ FRAC {\部分{Z} \}部分Xは\)、\ (\ FRAC {\部分} Z {\部分} Yは\)に等しいです。 0、および\(\ FRAC {\部分^ 2 F} {\部分のx ^ 2} \ FRAC {\部分^ 2 F} {\部分Y ^ 2} - (\ FRAC {\部分^ 2 F} {\ X部分\部分Y})^ 2> 0 \)、X、極値点の関数としてY \(\ FRAC {\部分^部分2 F} {\ X ^ 2} と\ FRAC {\部分^ 2 F} {\部分Yは^ 2} 最小値が0以上であり、0より大きく、最大値関数の最大値は(0、0)、(\)が決定 \ $ PI、\(\ PI \) )、関数値1.5。最小点は、(0、\(\ PI \) )、(\(\ PI \)、0)、関数値-0.5。
画像は、Yであり、最大値と最小値の点、及びxの周期関数から見ることができる(2 \ PI \)\

2.同等の機能値(高い)線で作られた充填0

修正上記の呼び出しcontourfオフShowText方法により、フォーム。

...
[M, C] = contourf(X, Y, Z, [0, 0]);
...
C.ShowText = 'off';

得られた画像は、以下:

上記画像を使用し、従って、境界輪郭に作られていないmax画像の境界を増大させる機能を。

...
% 给出隐函数表达式
Z = max(max(cos(X).*cos(Y)+0.5, X.*(X-2*pi+0.01)), ...
    Y.*(Y-2*pi+0.01));
...

画像が行われた後:

なぜ使用\(X *(X-。 2 * PI + 0.01)\) と\(ザ・Y- *(Y-PI-2 + 0.01 *)\。)、2PIを使用しない場合ためX、Yが0.01を減少させ、境界は時間が原因である可能性があり作りは、閉じ描か同様のMATLAB座って右開区間にプロットされています。

もう一つの問題は、私は内部の輪郭充填ではなく、外部のパディングを達成したい、充填です。
以下に示すように、常に白である色のグラデーションを、セットカラーマップによる方法を見つけることができませんでした長い時間を検索します。

map = [0 0 0;
        1 1 1];
colormap(ax, map);

得られた画像です。

最後に見つかった、カラーマップは、私は描いたので、画像の輪郭との間に充填されている\(Z = 0 \)の輪郭を、それが唯一の外部輪郭を充填することができます。
次のようにコードを変更します。

...
[M, C] = contourf(X, Y, Z ,[-0.5, 0]);    % 因为最小值为-0.5
axis off;
...
map = [0, 0.6, 1;
        1, 1, 1];
colormap(ax, map);

画像を取得するには:

3.外部輪郭は、総面積のパーセンテージを得ました

離散的なデータが使用されるので、すべてのノード0、すなわち、すべてのノードとの空隙が占める面積のおおよその割合で割るの合計よりも大きいです。

...
lenX = length(x);
lenY = length(y);
tot = lenX * lenY;
num_in_con = 0;
for i=1:1:lenX
    for j=1:1:lenY
        if (Z(i, j) > 0)
            num_in_con = num_in_con + 1;
        end
    end
end

per = num_in_con / tot;

得られた結果per=0.8160;

II。3次元の等値面陰関数

おすすめ

転載: www.cnblogs.com/AIxiaodi/p/12512425.html