EuclideanNorm[vec_] := Sqrt[Apply[Plus,Map[#^2 &,vec]]];
ArrowHead3D[top_,bot_,len_,wid_] :=
Module[{e,f,g,base,a,b,c,d,h},
	e = top - bot ; h = EuclideanNorm[e]; e = e/h;
	f = Table[0,{3}] ; g = Table[0,{3}] ;
	If[Abs[ N[ e[[1]] ] ] >= Abs[ N[ e[[2]] ] ] && 
	   Abs[ N[ e[[1]] ] ] >= Abs[ N[ e[[3]] ] ],
		f[[1]] = -e[[3]]/e[[1]]; f[[2]] = 0; f[[3]] = 1,
		If[Abs[ N[ e[[2]] ] ] >= Abs[ N[ e[[3]] ] ] && 
		   Abs[ N[ e[[2]] ] ] >= Abs[ N[ e[[1]] ] ],
			f[[2]] = -e[[1]]/e[[2]]; f[[3]] = 0; f[[1]] = 1,
			f[[3]] = -e[[2]]/e[[3]]; f[[1]] = 0; f[[2]] = 1
		] ] ; g[[1]] = e[[2]] f[[3]] - e[[3]] f[[2]] ;
	g[[2]] = e[[3]] f[[1]] - e[[1]] f[[3]] ;
	g[[3]] = e[[1]] f[[2]] - e[[2]] f[[1]] ;
	f = f/EuclideanNorm[f] ; g = g/EuclideanNorm[g] ;
	base = top - len e ;
	a = N[base + wid f] ;
	b = N[base + wid Cos[2Pi/3] f + wid Sin[2Pi/3] g] ;
	c = N[base + wid Cos[2Pi/3] f - wid Sin[2Pi/3] g] ;
	d = N[top] ; { SurfaceColor[Hue[N[2h]]], 
        Polygon[{d,a,b}], Polygon[{d,b,c}], Polygon[{d,c,a}], Polygon[{a,c,b}] }];
Arrow3D[point_,vector_,hdsize_] := 
If[N[vector] == {0.0,0.0,0.0}, {},{ ArrowHead3D[point+vector,point,hdsize,hdsize/2],
		Line[{point,point+vector}] }];

u[x_,y_,z_]:= 10(y-x);
v[x_,y_,z_]:= -x z+28 x-y;
w[x_,y_,z_]:= x*y-8 z/3; 

PlotField3D[n_]:=Table[Arrow3D[{i/n,j/n,k/n},
           {u[2i/n,2j/n,2k/n],v[2i/n,2j/n,2k/n],w[2i/n,2j/n,2k/n]}/50,0.091], 
           {i,-n/2,n/2},{j,-n/2,n/2},{k,-n/2,n/2}];
Pict=Show[Graphics3D[ PlotField3D[3]],AspectRatio->1,DisplayFunction->Identity]; 
Display["!psfix -land -stretch > pict.ps",Pict];


