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
    

    运行结果:

    坐标:

    总的球图:

    部分区域放大后:

  • 相关阅读:
    了解AOP
    Struts2 拦截器与Spring AOP的区别
    Spring核心技术之IoC和AOP
    产品经理历险记-2-如何把需求聊得更细
    产品经理历险记-1-记录一次事故
    C# 使用 Lotus notes 公共邮箱发送邮件
    设计模式 5/23 原型模式
    设计模式 4/23 建造者模式
    设计模式 3/23 抽象工厂模式
    设计模式 2/23 工厂模式(二)
  • 原文地址:https://www.cnblogs.com/HZL2017/p/7265452.html
Copyright © 2011-2022 走看看