0

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 '18 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. – Andrew Mar 17 '18 at 23:41
  • That's not a shape, surely, but several .... – cfr Mar 18 '18 at 1:25
4

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.

\documentclass[border=5pt]{standalone}
\usepackage{asypictureB}
\begin{document}
\begin{asypicture}{name=AsyVF}
import graph3;
import three;
import solids;

size(6cm,8cm);
settings.render = 4;
currentprojection = perspective((3,10,4), up=Z,autoadjust=true);//,autoadjust=true
currentlight=(2,15,5);

// 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);
}

//draw(mybox1);

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);
}

draw(scale3(0.05)*unitsphere,lightgray,light=currentlight);

srand(4);
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);
draw(shift(myx*X+myy*Y+myz*Z)*scale3(0.05)*unitsphere,lightgray,light=currentlight);
}
\end{asypicture}
\end{document}

enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.