zoukankan      html  css  js  c++  java
  • MATLAB之画确定区域内互不接触的球

    MATLAB之画确定区域内互不接触的球

    程序要求:在确定区域内,画互不接触的球
    输入:球的个数N,半径D,两球之间的最小距离K倍(D的倍数)
    输出:各圆心的三维坐标,并作图显示

    程序:

      function [xdata,ydata,zdata] = dataBall2(N,D,K)
    %N为球的个数,D为球的半径,K为两球之间的距离(D的倍数)
    %返回球心的坐标   
    %命令行测试: [xdata,ydata,zdata] = dataBall2(50,1.5,4);
    
    S=[300,300,200];                        %区域大小
    p = ones(1,3);
    p(1)=(S(1)- D).*rand(1);                %产生一个随机点
    p(2)=(S(2)- D).*rand(1);
    p(3)=(S(3)- D).*rand(1);
    A=p';                                   %第一点坐标记录进矩阵A中,转置运算                                
    for ii=2:N
        p(1)=(S(1)- D).*rand(1);            %产生一个随机点
        p(2)=(S(2)- D).*rand(1);
        p(3)=(S(3)- D).*rand(1);
        while any((A(1,:)-p(1)).^2+(A(2,:)-p(2)).^2+(A(3,:)-p(3)).^2 < K*K*D*D) %距离判断,不满足条件则继续生成新的点
            p(1)=(S(1)- D).*rand(1);         %产生新的随机点
            p(2)=(S(2)- D).*rand(1);
            p(3)=(S(3)- D).*rand(1);
        end
        A = [A,p'];                          %保存满足条件的新点到矩阵A
    end
    xdata = A(1,:);
    ydata = A(2,:); 
    zdata = A(3,:); 
    
    %已知圆心和半径作圆:半径D,圆心xdata,ydata,zdata
    for i = 1:N
        [x,y,z]  = ellipsoid(xdata(i),ydata(i),zdata(i),D,D,D);     %利用椭圆函数画球
        surf(x,y,z) %画出来球
        hold on
    end
    axis equal %保证各个维度的长短一致    
       
     end
    

    运行结果:

    坐标:

    总的球图:

    部分区域放大后:

  • 相关阅读:
    git merge branch
    Notes on Large-scale Video Classification with Convolutional Neural Networks
    ubuntu shell编程笔记
    cpu-z for ubuntu 12.04 64bit : cpu-g
    Notation, First Definitions 转 http://brnt.eu/phd/node9.html
    textext for Inkscape
    read later
    Matlab远程调试 转
    Ubuntu中的在文件中查找和替换命令
    Ubuntu 下matlab 查看memory函数
  • 原文地址:https://www.cnblogs.com/HZL2017/p/7265452.html
Copyright © 2011-2022 走看看