【问题标题】:Plot coneshaped object in scilab在 scilab 中绘制锥形对象
【发布时间】:2016-10-20 07:38:10
【问题描述】:

我正在尝试在 scilab 中绘制以下对象。 Cone shaped object

我可以分别绘制盘子和锥体,但我很难将单独的部分放在一起。

关于如何做到这一点的任何想法?

这是我用来绘制圆锥的代码

r = 2.0;

h = 4.0;

m = h/r;

[R,A] = meshgrid(linspace(0,r,20),linspace(0,2*%pi,41));

X = R.* cos(A);

Y = R .* sin(A);

Z = m*R;

网格(X,Y,Z)

任何帮助将不胜感激。

【问题讨论】:

    标签: plot scilab


    【解决方案1】:

    下面的代码可以做到:

    hr = 0.5 // height of the box
    wr = 4   // width of the box
    lr = 10  // length of the box
    
    hc = 3   // height of the cones
    rc = 2*0.45*min(wr,lr) // desired radius of the cone's base
    
    function xyz = getcoordinate(hr,lr,wr,hc,rc,axis)
      // this function computes the faced used by plot3d to render the object
      // hr: height of the box; Real
      // wr: width of the box;Real
      // lr: length of the box;Real
      // hc: height of the cones;Real
      // rc: desired radius of the cone's base;Real
      // axis: which component we compute; String
    
    
      // The 4 nodes of the top of the box
      Bbl = 0.5*[-wr;-lr;hr]
      Bbr = 0.5*[wr;-lr;hr]
      Bul = 0.5*[-wr;lr;hr]
      Bur = 0.5*[wr;lr;hr]
    
      H = -[0;0;hr]
      select axis
      case 'x' then
        i=1
      case 'y' then
        i=2
      case 'z' then
        i=3
      else 
        error('Wrong compononent. ''x'',''y'' or ''z'' only')
      end
      // Box. We split each plane into triangles to concatenate with cones later.
      xyz=[[Bbl(i)+H(i);Bbr(i)+H(i);Bur(i)+H(i)],..
      [Bur(i)+H(i);Bul(i)+H(i);Bbl(i)+H(i)],..
      [Bur(i);Bur(i)+H(i);Bbr(i)+H(i)],..
      [Bbr(i)+H(i);Bbr(i);Bur(i)],..
      [Bul(i);Bul(i)+H(i);Bur(i)+H(i)],..
      [Bur(i)+H(i);Bur(i);Bul(i)],..
      [Bbl(i);Bbr(i);Bbr(i)+H(i)],..
      [Bbr(i)+H(i);Bbl(i)+H(i);Bbl(i)],..
      [Bul(i);Bbl(i);Bbl(i)+H(i)],..
      [Bbl(i)+H(i);Bul(i)+H(i);Bul(i)],..
      [Bbl(i);Bur(i);Bbr(i)],..
      [Bur(i);Bbl(i);Bul(i)]]
    
     // cones. These are fac3d object, each facet is  a triangle.
     // They are placed at 1-offset of both border and at the center.
     // radius is decreased if too big
     L = max(lr,wr)
     W = min(lr,wr)
     offset = 0.1
     rc = (1-offset)*min(min(rc,W/2),L/6)
     for k=1:3 // 3 cones
       if wr < lr
          Ct = [0;(k-2)*0.5*(L-2*rc/(1-offset));hc+0.5*hr] // top of the cone
       else
          Ct = [(k-2)*0.5*(L-2*rc/(1-offset));0;hc+0.5*hr]
       end
       Cb = Ct - [0;0;hc] // center of the cone's base
       nmax = 20 // number of triangles
       for n=1:nmax
         P1 = Cb + rc*[cos((n-1)*2*%pi/nmax);sin((n-1)*2*%pi/nmax);0]
         P2 = Cb + rc*[cos(n*2*%pi/nmax);sin(n*2*%pi/nmax);0]
         xyz = [xyz,..
         [P1(i);Ct(i);P2(i)]]
       end
     end
    endfunction
    
    xx = getcoordinate(hr,lr,wr,hc,rc,'x')
    yy = getcoordinate(hr,lr,wr,hc,rc,'y')
    zz = getcoordinate(hr,lr,wr,hc,rc,'z')
    plot3d(xx,yy,zz)
    set(gca(),'isoview','on')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多