Matlab函数:rand()+delaunay()

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sss_369/article/details/60324088

转载请注明出处!!!

- 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

图像

猜你喜欢

转载自blog.csdn.net/sss_369/article/details/60324088