1. 程式人生 > >Matlab函式:rand()+delaunay()

Matlab函式:rand()+delaunay()

轉載請註明出處!!!

- rand()

功能:隨機產生數的狀態,
格式:
1、rand(‘state’,s)
表示隨機產生數的狀態state,一般情況下不用指定狀態。
但是有書籍為了讓讀者能夠看到和他書本的同樣結果,採用了設定state。
示例:rand(‘state’,0)。作用在於如果指定狀態,產生隨機結果就相同了。
2、因為每次rand產生的隨機數都不同,為了得到與之前某個狀態相同的結果,用這個函式來產生該相同的隨機數。
示例:

>> rand('state',0);
>> x=rand(1,4);
>> y=rand
(1,4); >> x x = 0.9501 0.2311 0.6068 0.4860 >> y y = 0.8913 0.7621 0.4565 0.0185

delaunay()

函式:delaunay()
功能:三角剖分
格式:
TRI = delaunay(x,y);
TRI = delaunay(x,y,z);

示例 :

rand('state',0);
x = rand(1,4);
y = rand(1,4);
TRI = delaunay(x,y);
triplot(TRI,x,y);%繪圖
TRI =
     2
4 3 1 2 3 4 1 3

三角化
其中,TRI含義為:

2為右上點;

x(:,TRI(2))% 
ans =
    0.9501
>> y(:,TRI(2))
ans =
    0.8913

1為左上點;

x(:,TRI(1))
ans =
    0.2311
>> y(:,TRI(1))
ans =
    0.7621

3為左下點

x(:,TRI(3))
ans =
    0.4860
>> y(:,TRI(3))
ans =
    0.0185

4為中間點

x(:,TRI(4))
ans =
    0.4860
>> y(:,TRI(4))
ans =
    0.0185

因此:
每一行的三個元素代表頂點的索引,
即,第一個三角形是由第2個、第4個、第3個頂點構成,同理後面兩個三角形,
[x,y]就是四個頂點的座標,由rand函式產生。

delaunay()

三維示例:
四面體

>> clear
>> x=rand(4,3)
x =
    0.9218    0.9355    0.0579
    0.7382    0.9169    0.3529
    0.1763    0.4103    0.8132
    0.4057    0.8936    0.0099
>> a=x(:,1);
>> b=x(:,2);
>> c=x(:,3);
>> tri=delaunay(a,b,c);
>> trisurf(tri,a,b,c);
>> trisurf(tri,a,b,c);
>> [m,n]=size(tri)
m =
     1
n =
     4
>> tri %點的順序
tri =
     3     4     2     1
>> tri(1,3)
ans =
     2
>> tri(1,1)
ans =
     3
>> point_1=x(3,:)%第一個點座標
point_1 =
    0.1763    0.4103    0.8132
>> point_2=x(tri(1,2),:) %第二個點座標
point_2 =
    0.4057    0.8936    0.0099
>> point_3=x(tri(1,3),:) %第三個點座標
point_3 =
    0.7382    0.9169    0.3529
>> point_4=x(tri(1,4),:) %第四個點座標
point_4 =
    0.9218    0.9355    0.0579

三維

例子


clc; clear; close all;
rand('state',0);
x = rand(1,8);
y = rand(1,8);%隨機數
TRI = delaunay(x,y);%三角剖分
triplot(TRI,x,y);%繪圖
figure; 
xmin = min(x(:)); xmax = max(x(:));
ymin = min(y(:)); ymax = max(y(:));
xl = xmax - xmin; yl = ymax - ymin;
axis([xmin-xl*0.1, xmax+xl*0.1,...
    ymin-yl*0.1, ymax+yl*0.1]);%坐標軸
hold on;
for i = 1 : size(TRI, 1)%遍歷三角形個數
    t1 = TRI(i, :);%索引,三角形個數分別由哪三個點構成
    for j = 1 : length(t1)-1
        xt = [x(t1(j)) x(t1(j+1))];
        yt = [y(t1(j)) y(t1(j+1))];
        plot(xt, yt, 'k-', 'LineWidth', 2);
        pause(0.1);
    end
    xt = [x(t1(end)) x(t1(1))];
    yt = [y(t1(end)) y(t1(1))];
    plot(xt, yt, 'k-', 'LineWidth', 2);
    pause(0.1);
end

影象