enter image description here

How do I draw this shape? please help me .

Or introduce an article you can draw with that shape

thanks a lot

  • 3
    Why did you tag your question "tikz-styles"? There are already some related answers like here and here. Or you can do a quiver plot like here. The asymptote based solutions have the advantage that there is a true 3D engine, on the other hand, more people on this site use pgfplots so you might get more feedback if you run into a problem and ask a question.
    – user121799
    Mar 17, 2018 at 22:29
  • It would be great if you could show us what you have tried. Posting a minimal working example that indicates what you are trying to do makes it easier for people to understand what you want. It also makes it easier for people to help you, since they have some code to start from, and hence much more likely that some one will try to help you.
    – user30471
    Mar 17, 2018 at 23:41
  • That's not a shape, surely, but several ....
    – cfr
    Mar 18, 2018 at 1:25

1 Answer 1


It is rather straightforward with asymptote. As I mentioned in the comments, here you do not have to put in the 3D features by hand. Of course, I do not know the positions of the smaller arrows, so I use random numbers, nor the precise slope, so I guessed one.

import graph3;
import three;
import solids;

settings.render = 4;
currentprojection = perspective((3,10,4), up=Z,autoadjust=true);//,autoadjust=true

// coordinate axes 
//draw(O -- 2X,L=Label("$x$",position=EndPoint));
//draw(O -- 2Y,L=Label("$y$", position=EndPoint));
//draw(-2Z -- 2Z,L=Label("$z$", position=EndPoint));

// fat arrow
draw(O -- -X, arrow=Arrow3(), p=lightgray+linewidth(3pt),light=currentlight);

pen color = white;
material planepen = material(diffusepen=opacity(1), emissivepen=0.8*color);

path3 mybox1 = (0,1,1) -- (0.1,1,1) -- (0.1,1,-1) -- (0,1,-1)  -- cycle;
for (int rot=0; rot<=3; rot+=1)
    draw(surface(rotate(rot*90,X)*mybox1), surfacepen=planepen);
    draw(surface(scale3(0.9)*rotate(rot*90,X)*mybox1), surfacepen=planepen);


path3 mybox2 = (0,1,1) -- (0,-1,1)  -- (0,-1,-1)  -- (0,1,-1) -- (0,1,1) --
(0,0.9,0.9) -- (0,0.9,-0.9)  -- (0,-0.9,-0.9)  -- (0,-0.9,0.9) -- (0,0.9,0.9)
-- (0,1,1) -- cycle;
for (real s=0.0; s<=0.1; s+=0.1)
    draw(surface(shift(s*X)*mybox2), surfacepen=planepen);


for (int irun=0; irun<=21; irun+=1)
real myx = 2*(1-2*unitrand());
real myy = 1.2*(1-2*unitrand());
real myz = 1.2*(1-2*unitrand());
draw(myx*X+myy*Y+myz*Z -- myx*X+myy*Y+myz*Z+0.5*(-X+Z), arrow=Arrow3(), p=linewidth(0.5pt),light=currentlight);

enter image description here

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .