Matlab函式:rand()+delaunay()
阿新 • • 發佈:2018-11-16
- 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