# How to create a cross product with tikz?

How can I create a cross product like the one in the picture.

\documentclass{article}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture}[line width=.7pt]
\draw [->] (-.2,0)node[below]{$o$}--(4.5,0)node[below]{$x$};
\draw [->] (0,-.2)--(0,2)node[left]{$y$};

\end{tikzpicture}

\end{document}


Here's a starting point at least:

\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture}[line width=.7pt,x={(1,0)}, y={(0,1)}, z={(-0.5,-0.5)}]
\coordinate (O)  at (0,0,0);
\coordinate (Ax) at (3,0,0);
\coordinate (Ay) at (0,3,0);
\coordinate (Az) at (0,0,3);
\coordinate (A)  at (3,3,3);
\coordinate (AO) at (3,0,3);

% Draw axes
\foreach \c/\l/\p in {{4.5,0,0}/x/right, {0,4.5,0}/y/above, {0,0,4.5}/z/below left}{
\draw (O) -- +(\c) node[\p] {$\l$};
}

% Draw vectors
\foreach \c/\l/\p in {Ax/$A_{x}$/above, Ay/$A_{y}$/left, Az/$A_{z}$/above left}{
\draw[->,thick] (O) -- +(\c) node[pos=0.7,\p] {\l};
}
\draw[->] (O) -- node[pos=0.7,above left] {$\vec{A}$} (A);

% Draw helping lines
\draw[help lines,dashed] (Az) -- ++(Ax) -- (Ax) (O) -- (AO) -- (A) -- (Ay);

\end{tikzpicture}
\end{document}


It makes use of the built-in pseudo 3D functionality of TikZ by defining the unit vectors in "paperspace".

On your drawing I see just decomposed vector. You’d need cross product when you want to get cobasis of oblique basis vectors.

I use tikz-3dplot, and I created macro to obtain cross product. Using it it’s pretty easy to get and to draw cross product of any two vectors when they are specified by spherical coordinates

% takes two points as {r}{anglefromz}{anglefromx} and calculates cross product of their location vectors
\newcommand{\tdcrossproduct}[7]{%
%
\tdplotsinandcos{\firstsinthetavec}{\firstcosthetavec}{#2}%
\tdplotsinandcos{\firstsinphivec}{\firstcosphivec}{#3}%
\def\firstx{ #1 * \firstsinthetavec * \firstcosphivec }%
\def\firsty{ #1 * \firstsinthetavec * \firstsinphivec }%
\def\firstz{ #1 * \firstcosthetavec }%
%
\tdplotsinandcos{\secondsinthetavec}{\secondcosthetavec}{#5}%
\tdplotsinandcos{\secondsinphivec}{\secondcosphivec}{#6}%
\def\secondx{ #4 * \secondsinthetavec * \secondcosphivec }%
\def\secondy{ #4 * \secondsinthetavec * \secondsinphivec }%
\def\secondz{ #4 * \secondcosthetavec }%
%
\def\crossz{ \firstx * \secondy - \firsty * \secondx }%
\def\crossx{ \firsty * \secondz - \firstz * \secondy }%
\def\crossy{ \firstz * \secondx - \firstx * \secondz }%
\coordinate (#7) at (\crossx, \crossy, \crossz);%
}


Here’s the result

and the full code

\documentclass[11pt,twoside]{book}

\usepackage{geometry}
\geometry{papersize={150mm,200mm}}
\geometry{tmargin=1.5cm,bmargin=1.5cm,lmargin=1.5cm,rmargin=1.5cm}

\usepackage{xcolor}
\usepackage{bm}
\usepackage[e]{esvect}

\usepackage{tikz}
\usepackage{tikz-3dplot} % it needs tikz-3dplot.sty in same folder
\usetikzlibrary{calc}
\usetikzlibrary{arrows,arrows.meta}
\usetikzlibrary{decorations.markings,decorations.pathmorphing}

\makeatletter
\newcommand*\dotp{\mathpalette\dotp@{.5}}
\newcommand*\dotp@[2]{\mathbin{\vcenter{\hbox{\scalebox{#2}{$\m@th#1\bullet$}}}}}
\makeatother
\newcommand\dotdotp{\dotp\hspace{-0.16em}\dotp\hspace{0.20em}}

\usepackage{nicefrac}

\pagestyle{empty}

\begin{document}

% takes two points as {r}{anglefromz}{anglefromx} and calculates cross product of their location vectors
\newcommand{\tdcrossproduct}[7]{%
%
\tdplotsinandcos{\firstsinthetavec}{\firstcosthetavec}{#2}%
\tdplotsinandcos{\firstsinphivec}{\firstcosphivec}{#3}%
\def\firstx{ #1 * \firstsinthetavec * \firstcosphivec }%
\def\firsty{ #1 * \firstsinthetavec * \firstsinphivec }%
\def\firstz{ #1 * \firstcosthetavec }%
%
\tdplotsinandcos{\secondsinthetavec}{\secondcosthetavec}{#5}%
\tdplotsinandcos{\secondsinphivec}{\secondcosphivec}{#6}%
\def\secondx{ #4 * \secondsinthetavec * \secondcosphivec }%
\def\secondy{ #4 * \secondsinthetavec * \secondsinphivec }%
\def\secondz{ #4 * \secondcosthetavec }%
%
\def\crossz{ \firstx * \secondy - \firsty * \secondx }%
\def\crossx{ \firsty * \secondz - \firstz * \secondy }%
\def\crossy{ \firstz * \secondx - \firstx * \secondz }%
\coordinate (#7) at (\crossx, \crossy, \crossz);%
}

% calculates dot product of location vectors of two points
\newcommand{\tddotproduct}[7]{%
%
\tdplotsinandcos{\firstsinthetavec}{\firstcosthetavec}{#2}%
\tdplotsinandcos{\firstsinphivec}{\firstcosphivec}{#3}%
\def\firstx{ #1 * \firstsinthetavec * \firstcosphivec }%
\def\firsty{ #1 * \firstsinthetavec * \firstsinphivec }%
\def\firstz{ #1 * \firstcosthetavec }%
%
\tdplotsinandcos{\secondsinthetavec}{\secondcosthetavec}{#5}%
\tdplotsinandcos{\secondsinphivec}{\secondcosphivec}{#6}%
\def\secondx{ #4 * \secondsinthetavec * \secondcosphivec }%
\def\secondy{ #4 * \secondsinthetavec * \secondsinphivec }%
\def\secondz{ #4 * \secondcosthetavec }%
%
\pgfmathsetmacro{#7}{ \firstx * \secondx + \firsty * \secondy + \firstz * \secondz }%
}

% takes three points as {r}{anglefromz}{anglefromx} and calculates triple product r1 × r2 • r3 of their location vectors
% the result is placed into \LastThreeDTripleProduct
\newcommand{\tdtripleproduct}[9]{%
%
\tdplotsinandcos{\firstsinthetavec}{\firstcosthetavec}{#2}%
\tdplotsinandcos{\firstsinphivec}{\firstcosphivec}{#3}%
\def\firstx{ #1 * \firstsinthetavec * \firstcosphivec }%
\def\firsty{ #1 * \firstsinthetavec * \firstsinphivec }%
\def\firstz{ #1 * \firstcosthetavec }%
%
\tdplotsinandcos{\secondsinthetavec}{\secondcosthetavec}{#5}%
\tdplotsinandcos{\secondsinphivec}{\secondcosphivec}{#6}%
\def\secondx{ #4 * \secondsinthetavec * \secondcosphivec }%
\def\secondy{ #4 * \secondsinthetavec * \secondsinphivec }%
\def\secondz{ #4 * \secondcosthetavec }%
%
\tdplotsinandcos{\thirdsinthetavec}{\thirdcosthetavec}{#8}%
\tdplotsinandcos{\thirdsinphivec}{\thirdcosphivec}{#9}%
\def\thirdx{ #7 * \thirdsinthetavec * \thirdcosphivec }%
\def\thirdy{ #7 * \thirdsinthetavec * \thirdsinphivec }%
\def\thirdz{ #7 * \thirdcosthetavec }%
%
\def\crossz{ \firstx * \secondy - \firsty * \secondx }%
\def\crossx{ \firsty * \secondz - \firstz * \secondy }%
\def\crossy{ \firstz * \secondx - \firstx * \secondz }%
%
\def\LastThreeDTripleProduct{ \crossx * \thirdx + \crossy * \thirdy + \crossz * \thirdz }%
}

\begin{center}

\tdplotsetmaincoords{40}{110} % orientation of 3D axes
% vectors of basis
\pgfmathsetmacro{\firstlength}{1}
\pgfmathsetmacro{\firstanglefromz}{90} % first and second are xy plane
\pgfmathsetmacro{\firstanglefromx}{0} % first is just x
\pgfmathsetmacro{\secondlength}{1}
\pgfmathsetmacro{\secondanglefromz}{90} % first and second are xy plane
\pgfmathsetmacro{\secondanglefromx}{66} % but second is not orthogonal to first
\pgfmathsetmacro{\thirdlength}{1}
\pgfmathsetmacro{\thirdanglefromz}{-10}
\pgfmathsetmacro{\thirdanglefromx}{55}
% some vector
\pgfmathsetmacro{\lengthofvector}{3.2}
\pgfmathsetmacro{\vectoranglefromz}{28}
\pgfmathsetmacro{\vectoranglefromx}{55}

\begin{tikzpicture}[scale=3.2, tdplot_main_coords] % tdplot_main_coords style to use 3dplot

\coordinate (O) at (0,0,0);

% define axes
\tdplotsetcoord{A1}{\firstlength}{\firstanglefromz}{\firstanglefromx}
\tdplotsetcoord{A2}{\secondlength}{\secondanglefromz}{\secondanglefromx}
\tdplotsetcoord{A3}{\thirdlength}{\thirdanglefromz}{\thirdanglefromx}

% define vector
\tdplotsetcoord{V}{\lengthofvector}{\vectoranglefromz}{\vectoranglefromx} % {length}{angle from z}{angle from x}

% draw components of vector
\coordinate (ParallelToThird) at ($(V) - (A3)$);
\coordinate (VcomponentXY) at (intersection of V--ParallelToThird and O--Vxy);
\draw [line width=0.4pt, dotted, color=black] (O) -- (VcomponentXY); % projection on first & second vectors’ plane

\coordinate (ParallelToSecond) at ($(VcomponentXY) - (A2xy)$);
\coordinate (ParallelToFirst) at ($(VcomponentXY) - (A1xy)$);
\coordinate (Vcomponent1) at (intersection of VcomponentXY--ParallelToSecond and O--A1);
\coordinate (Vcomponent2) at (intersection of VcomponentXY--ParallelToFirst and O--A2);

\draw [line width=0.4pt, dotted, color=black] (V) -- (VcomponentXY);
\draw [line width=0.4pt, dotted, color=black] (VcomponentXY) -- (Vcomponent1);
\draw [line width=0.4pt, dotted, color=black] (VcomponentXY) -- (Vcomponent2);

% draw parallelepiped
\coordinate (onPlane23) at ($(Vcomponent2) + (V) - (VcomponentXY)$);
\draw [line width=0.4pt, dotted, color=black] (Vcomponent2) -- (onPlane23);
\draw [line width=0.4pt, dotted, color=black] (V) -- (onPlane23);

\coordinate (onPlane13) at ($(Vcomponent1) + (V) - (VcomponentXY)$);
\draw [line width=0.4pt, dotted, color=black] (Vcomponent1) -- (onPlane13);
\draw [line width=0.4pt, dotted, color=black] (V) -- (onPlane13);

\coordinate (onAxis3) at ($(V) - (VcomponentXY)$);
\draw [line width=0.4pt, dotted, color=black] (O) -- (onAxis3);
\draw [line width=0.4pt, dotted, color=black] (onPlane13) -- (onAxis3);
\draw [line width=0.4pt, dotted, color=black] (onPlane23) -- (onAxis3);

\draw [line width=0.4pt, dotted, color=black] (O) -- (onPlane13);
\draw [line width=0.4pt, dotted, color=black] (O) -- (onPlane23);

\draw [color=black, line width=1.6pt, line cap=round, dash pattern=on 0pt off 1.6\pgflinewidth,
-{Stealth[round, length=4mm, width=2.4mm]}]
(O) -- (Vcomponent1)
node[pos=0.52, above, xshift=-1.2em, fill=white, shape=circle, inner sep=1pt] {${v^1 \hspace{-0.1ex} \bm{a}_1}$};

\draw [color=black, line width=1.6pt, line cap=round, dash pattern=on 0pt off 1.6\pgflinewidth,
-{Stealth[round, length=4mm, width=2.4mm]}]
(Vcomponent1) -- (VcomponentXY)
node[pos=0.5, below, xshift=-0.5em, yshift=0.1em, shape=circle, fill=white, inner sep=0pt] {${v^2 \hspace{-0.1ex} \bm{a}_2}$};

\draw [color=black, line width=1.6pt, line cap=round, dash pattern=on 0pt off 1.6\pgflinewidth,
-{Stealth[round, length=4mm, width=2.4mm]}]
(VcomponentXY) -- (V)
node[pos=0.52, above right, xshift=0.5em, shape=circle, fill=white, inner sep=1pt] {${v^3 \hspace{-0.1ex} \bm{a}_3}$};

% square root of Gramian matrix’ determinant is a1 × a2 • a3
\tdtripleproduct%
{\firstlength}{\firstanglefromz}{\firstanglefromx}%
{\secondlength}{\secondanglefromz}{\secondanglefromx}%
{\thirdlength}{\thirdanglefromz}{\thirdanglefromx}
\pgfmathsetmacro{\sqrtDetGramian}{\LastThreeDTripleProduct}
\pgfmathsetmacro{\inverseOfSqrtDetGramian}{1 / \sqrtDetGramian}

\node[fill=white!50, inner sep=0pt, outer sep=4pt] at (0,0,-2.8)
{$\begin{array}{c}\bm{a}_1 \hspace{-0.4ex} \times \hspace{-0.3ex} \bm{a}_2 \dotp \hspace{0.1ex} \bm{a}_3 \hspace{-0.2ex} = \hspace{-0.2ex} \sqrt{\hspace{-0.36ex}\mathstrut{\textsl{g}}} \hspace{0.1ex} = \hspace{-0.2ex} \sqrtDetGramian \\[0.25em] \displaystyle \nicefrac{\scalebox{0.95}{$1$}}{\hspace{-0.25ex}\sqrt{\hspace{-0.2ex}\scalebox{0.96}{$\mathstrut{\textsl{g}}$}}} \hspace{0.1ex} = \hspace{-0.2ex} \inverseOfSqrtDetGramian\end{array}$};

% calculate and draw vectors of cobasis
\tdcrossproduct{\firstlength}{\firstanglefromz}{\firstanglefromx}%
{\secondlength}{\secondanglefromz}{\secondanglefromx}%
{cross23}
\draw [line width=1.25pt, orange, -{Latex[round, length=3.6mm, width=2.4mm]}]
(O) -- (cross23)
node[pos=0.7, above right, outer sep=2pt] {$\bm{a}_1 \hspace{-0.4ex} \times \hspace{-0.3ex} \bm{a}_2$};

\coordinate (coA3) at ($\inverseOfSqrtDetGramian*(cross23)$);
\draw [line width=0.4pt, red] (O) -- ($1.02*(coA3)$);
\draw [line width=1.25pt, red, -{Latex[round, length=3.6mm, width=2.4mm]}]
(O) -- (coA3)
node[pos=0.8, above right, outer sep=2pt] {${\bm{a}}^3$};

\tdcrossproduct{\thirdlength}{\thirdanglefromz}{\thirdanglefromx}%
{\firstlength}{\firstanglefromz}{\firstanglefromx}%
{cross31}
\draw [line width=1.25pt, orange, -{Latex[round, length=3.6mm, width=2.4mm]}]
(O) -- (cross31)
node[pos=0.7, above, outer sep=4pt] {$\bm{a}_3 \hspace{-0.4ex} \times \hspace{-0.3ex} \bm{a}_1$};

\coordinate (coA2) at ($\inverseOfSqrtDetGramian*(cross31)$);
\draw [line width=0.4pt, red] (O) -- ($1.02*(coA2)$);
\draw [line width=1.25pt, red, -{Latex[round, length=3.6mm, width=2.4mm]}]
(O) -- (coA2)
node[pos=0.92, above, shape=circle, fill=white, inner sep=1pt, outer sep=4pt] {${\bm{a}}^2$};

\tdcrossproduct{\secondlength}{\secondanglefromz}{\secondanglefromx}%
{\thirdlength}{\thirdanglefromz}{\thirdanglefromx}%
{cross23}
\draw [line width=1.25pt, orange, -{Latex[round, length=3.6mm, width=2.4mm]}]
(O) -- (cross23)
node[pos=0.65, above left, outer sep=-1pt] {$\bm{a}_2 \hspace{-0.4ex} \times \hspace{-0.3ex} \bm{a}_3$};

\coordinate (coA1) at ($\inverseOfSqrtDetGramian*(cross23)$);
\draw [line width=0.4pt, red] (O) -- ($1.02*(coA1)$);
\draw [line width=1.25pt, red, -{Latex[round, length=3.6mm, width=2.4mm]}]
(O) -- (coA1)
node[pos=0.96, above, outer sep=5pt] {${\bm{a}}^1$};

% draw axes and vectors of basis
\draw [line width=0.4pt, blue] (O) -- ($1.21*(A1)$);
\draw [line width=1.25pt, blue, -{Latex[round, length=3.6mm, width=2.4mm]}]
(O) -- (A1)
node[pos=0.9, below right, shape=circle, fill=white, inner sep=1pt, outer sep=5pt] {${\bm{a}}_1$};

\draw [line width=0.4pt, blue] (O) -- ($1.88*(A2)$);
\draw [line width=1.25pt, blue, -{Latex[round, length=3.6mm, width=2.4mm]}]
(O) -- (A2)
node[pos=0.95, above right, shape=circle, fill=white, inner sep=1pt, outer sep=4pt] {${\bm{a}}_2$};

\draw [line width=0.4pt, blue] (O) -- ($1.25*(A3)$);
\draw [line width=1.25pt, blue, -{Latex[round, length=3.6mm, width=2.4mm]}]
(O) -- (A3)
node[pos=0.75, above left, xshift=-0.5em, shape=circle, fill=white, inner sep=1pt, outer sep=5pt] {${\bm{a}}_3$};

% draw vector
\draw [line width=1.6pt, black, -{Stealth[round, length=5mm, width=2.8mm]}]
(O) -- (V)
node[pos=0.75, above, yshift=0.4em, shape=circle, fill=white, inner sep=1pt, outer sep=4pt]
{\scalebox{1.2}[1.2]{${\bm{v}}$}};

\end{tikzpicture}

\end{center}

\end{document}

• Welcome to TeX.SE! – Mensch Feb 1 at 19:13