I think TikZ (internally 2D) is enough to draw this simple task, see Jasper Habicht's answer above. The below is an alternative with 3D Asymptote. Do you see a Householder reflection by figure and by values ?
Note that in the OP's figure there is a mistake: (I-2u^H x)u
instead of (I-2uu^H)x
. Here the symbol H
stands for Hermitian transpose, or conjugate transpose. In Asymptote, u^Hx
is nothing but the scalar product dot(u,x)
.

// http://asymptote.ualberta.ca/
import three;
size(8cm);
currentprojection=orthographic(2,3,-1,center=true,zoom=.9);
triple u=(0,0,1), x=(0,2,2.5);
triple uh=u;
real uhx=dot(uh,x);
triple A=x-uhx*u;
triple B=uhx*u;
triple C=x-2*uhx*u;
draw(B--x,gray);
draw(Label("$-(u^Hx)u$",Relative(.5),align=E),x--A,gray+dashed,Arrow3);
draw(Label("$-(u^Hx)u$",Relative(.5),align=E),A--C,gray+dashed,Arrow3);
draw(Label("$x-(u^Hx)u$",EndPoint,align=E),O--A,orange+1pt,Arrow3);
draw(Label("$(u^Hx)u$",EndPoint,align=W),O--B,gray+1pt,Arrow3);
draw(Label("$u$",EndPoint,align=W),O--u,gray+1pt,Arrow3);
draw(Label("$\left(I-2u^Hx\right)u$",EndPoint,align=S),O--C,blue+1pt,Arrow3);
draw(Label("$x$",EndPoint,align=NE),O--x,red+1pt,Arrow3);
draw(shift(-1.5A-1.5X)*surface(plane(4A,3X)),blue+opacity(.1));
// to see numeric values
write("u = ",u);
write("x = ",x);
write("<u,x> = ",uhx);
write("x - <u,x> u = ",A);
write("<u,x> u = ",B);
write("x - 2 <u,x> u = ",C);
