三维空间内构造任意向量的多个随机正交平面的方法(附MATLAB程序实现)

   在三维空间内指定任意一个向量,本文中以点[1,5,6]和点[20,17,31]构成的向量为例进行介绍,通过两点相减得到该向量,然后通过MATLAB中的null函数得到该向量的标准正交基,本部分程序代码如下:

a=[1,5,6];
b=[20,17,31];
c=b-a;
d=null(c);

   然后,通过unifrnd函数产生任意多个连续一致随机数,这些随机数决定的随机正交平面位于向量上的位置,本文以在向量中产生3个随机正交平面为例,即此处产生3个随机数,并使用sort函数将其按照大小进行排序,得到f。

   接下来,按照设定的半径产生每个随机平面内的随机点,本例中设定的半径的10,每个随机正交平面产生100个随机点,随机点的计算方法如下:

   前面我们已经得到了向量的标准正交基d,本例的标准正交基中有两个标准正交向量d1和d2,那么e=k1 * d1+k2* d2即为所有与给定向量正交的向量,其中k1和k2为任意系数,我们将系数k1和k2的大小设定为某一半径内的随机数,就可以得到我们需要的随机正交平面,那么怎么将这些正交平面放置到向量中的随机位置上呢?,我们用上面得到的f乘以向量,再加上向量的起点,就可以得到随机正交平面与向量的交点g,将g和e的各个维度上进行叠加,即可得到所需的随机正交平面,并放置在向量的随机位置上。完整的程序实现如下:

a=[1,5,6];
b=[20,17,31];
c=b-a;
d=null(c);

 figure(1)
 scatter3(a(1),a(2),a(3), 'r','LineWidth',4)
 hold on
 scatter3(b(1),b(2),b(3), 'r','LineWidth',4)
 
 f=sort(unifrnd(0,1,1,3));
 for i=1:3
   for j=1:100
       g=f(i)*c+a;
       e=((20*rand-10)*d(:,1)+(20*rand-10)*d(:,2))'; 
       scatter3((g(1)+e(1)),(g(2)+e(2)),(g(3)+e(3)), 'r','LineWidth',2)
   end
 end

   运行结果如下:

   多角度视图如下:

在这里插入图片描述


   随机产生向量,并构造该随机向量的正交平面效果如下:

在这里插入图片描述


猜你喜欢

转载自blog.csdn.net/qq_44339029/article/details/128198884