Calculus: The Language of Change

Exercise Set 15.3
Computer Exercise: #1
Geometry of Vector Addition

solutions by David Theobald

Special Mathematica Functions used in this NoteBook

We told you not to look.  This horrible stuff sets various defaults and defines some functions needed to draw the geometric side of the lexicon.  Ignore the details here and go on to the lesson.

Off[General::spell];
Off[General::spell1];
Off[ParametricPlot3D::ppcom]
Needs["Graphics`Colors`"]

SetOptions[Graphics,Axes->False,AxesOrigin->{0,0},AspectRatio->Automatic];
SetOptions[Graphics3D,ViewPoint->{5,2,1},Boxed->False,AspectRatio->Automatic];
SetOptions[ParametricPlot3D,ViewPoint->{5,2,1},AspectRatio->Automatic];
SetOptions[Plot3D,ViewPoint->{5,2,1},AspectRatio->Automatic];
SetOptions[ParametricPlot,AspectRatio->Automatic];
SetOptions[Plot,AspectRatio->Automatic];

colorQ[a_]:=(Head[a]===RGBColor);
grayQ[a_]:=(Head[a]===GrayLevel);
thickQ[a_]:=(Head[a]===Thickness);
absthickQ[a_]:=(Head[a]===AbsoluteThickness);
notruleQ[u_] := !(Head[u]===Rule);
ruleQ[u_] := (Head[u]===Rule);

Norm::usage = "Norm[expr] returns the Euclidean length of the
		vector, 'expr'.";

Norm[a_?VectorQ] := Sqrt[a.a];

Angle[a_?VectorQ,b_?VectorQ] := ArcCos[(a.b)/(Norm[a] Norm[b])]

Proj[a_?VectorQ,b_?VectorQ] := ((a.b)/(b.b))b

tol = .5*10^-6;

OrthUp[a_?VectorQ] :=
	Module[{b,c,d,f},
		d = N[a/Norm[a]];
		If[Chop[d[[3]]^2 - 1,tol] == 0, b={1,0,0} ,
		b = {0,0,1} - d[[3]] d; b = b/Norm[b];];
	Return[b]];
	
OrthSet[a_?VectorQ] :=
	Module[{b,c,d},
		d = N[a/Norm[a]];
		If[Chop[d[[1]],tol]==0,b={1,0,0},
			 If[Chop[d[[2]],tol]==0,b={0,1,0},
			  b={-d[[2]],d[[1]],0}]];
			b=b/Norm[b];c = Cross[d,b];
	Return[{b,c/Norm[c],d}]];

				
Rotate[a_?VectorQ,theta_] :=
	Module[{u,v,r},
		u = OrthSet[a];
		v = Transpose[u];
		r = N[{{Cos[theta],-Sin[theta],0},{Sin[theta],Cos[theta],0},{0,0,1}}];
	Return[v.r.u]];

Vector2D[tail_,tip_,opts___]:=
	Module[{ntail,ntip,sopts,Punit,up,arrow},
	ntail = N[tail];
	ntip = N[tip];
	
	sopts = Join[Select[{opts},colorQ],Select[{opts},
				thickQ],Select[{opts},absthickQ],Select[{opts},grayQ]];

If[Chop[ntail.ntail+ntip.ntip,tol] == 0,
			(*too small to plot or not number*)
			Return[Graphics[Point[{0,0}]]];
	,						
If[Chop[(ntip-ntail).(ntip-ntail),tol] == 0,
		Return[Graphics[{Join[sopts,{Line[{ntail,ntip}]}]}]];
	,
	Punit = (.075 Norm[ntip-ntail]/Norm[ntip-ntail]) (ntip-ntail) ;
	up = 0.15 {-Punit[[2]],Punit[[1]]};
	arrow = Line[{ntail,ntip,ntip-Punit+up,ntip,ntip-Punit-up}];
	]];
Return[Graphics[{Join[{AbsoluteThickness[2]},Join[sopts,{arrow}]]}]];
];

Vector3D[tail_,tip_,opts___]:=
	Module[{ntail,ntip,sopts,Punit,up,u2,u3,u4,rotmat,arrow},
	ntail = N[tail];
	ntip = N[tip];
	
	sopts = Join[Select[{opts},colorQ],Select[{opts},
				thickQ],Select[{opts},absthickQ],Select[{opts},grayQ]];

If[Chop[ntail.ntail+ntip.ntip,tol] == 0,
			(*too small to plot or not number*)
			Return[Graphics3D[Point[{0,0,0}]]];					
	,		
If[Chop[(ntip-ntail).(ntip-ntail),tol] == 0,
		Return[Graphics3D[{Join[sopts,{Line[{ntail,ntip}]}]}]];
	,
	Punit = (ntip-ntail);
	rotmat = Rotate[Punit,N[Pi/2]];
	up = OrthUp[Punit];
	Punit = .075 Punit;
	up = .15 Norm[Punit] up;
	u2 = rotmat.up;
	u3 = rotmat.u2;
	u4 = rotmat.u3;
	arrow = Line[{ntail,ntip,
				ntip - Punit + up,ntip,
				ntip - Punit + u2,ntip,
				ntip - Punit + u3,ntip,
				ntip - Punit + u4}];
	]];
Return[Graphics3D[{Join[{AbsoluteThickness[2]},Join[sopts,{arrow}]]}]];
];

aRCtAN[y_,x_] := Module[{v},
	If[ Chop[N[x],tol] == 0 ,If[ N[y] < 0, v = -N[Pi/2], v = N[Pi/2]],
		v = N[ArcTan[y/x]];
		If[ x < 0 && y < 0, v = N[Pi -  v],v]];
	Return[v]];

Arc2D[X_,Y_,opts___] := Graphics[{opts,
		Disk[{0,0},1,{Min[
							aRCtAN[
						N[X[[2]]],N[X[[1]]]
								]
							,
							aRCtAN[
							N[Y[[2]]],N[Y[[1]]]
								]
						]
						,
					Max[
							aRCtAN[
						N[X[[2]]],N[X[[1]]]
								]
							,
							aRCtAN[
							N[Y[[2]]],N[Y[[1]]]
								]
						]}
				]}
				];
Arc3D[X_,Y_] := 
	Module[{t,U,V},
		U[V_]:= N[(1/Sqrt[V.V]) V];
		Return[Graphics3D[
		Polygon[Append[Table[U[t X + (1-t) Y],{t,0,1,0.1}],{0,0,0}]]
				]
		]
	];

(*Zero Arrow causes trouble. Put in Vector?*)

Vector[tail_,tip_,opts___]:=
	If[Length[N[tail]]==2,Return[Vector2D[tail,tip,opts]],
		Return[Vector3D[tail,tip,opts]]];
		
Arrow[vec_,opts___]:= 
	Module[{a,b},
				If[Length[N[vec]]==2,
				a=ToExpression["Tail"]/.Select[{opts},ruleQ]/.
					{ToExpression["Tail"]->{0,0}};
				Return[Vector2D[a,a+vec,opts]],
				a=ToExpression["Tail"]/.Select[{opts},ruleQ]/.
					{ToExpression["Tail"]->{0,0,0}};
				Return[Vector3D[a,a+vec,opts]]]
				];

Frame2D[delta_] := 
      Graphics[{
            {Green,Line[{{-delta/4,0},{delta,0}}]},
                    Text["x",{1.01 delta,0}],
            {Green,Line[{{0,-delta/4},{0,delta}}]},
                    Text["y",{0, 1.01 delta}]}];

Frame3D[delta_] := 
      Graphics3D[{
            {Green,Line[{{-delta/4,0,0},{delta,0,0}}]},
                    Text["x",{1.01 delta,0,0}],
            {Green,Line[{{0,-delta/4,0},{0,delta,0}}]},
                    Text["y",{0, 1.01 delta,0}],
            {Green,Line[{{0,0,-delta/4},{0,0,delta}}]},
                    Text["z",{0,0,1.01 delta}]}];

View2D[stuff_] := Show[stuff,Frame2D[1]];
View3D[stuff_] := Show[stuff,Frame3D[1]];

\(
\)

Exercise 1

For each problem, use geometry and algebra to find the sum of Z=X+Y of the two position vectors.

Geometric Solution

The vector sum Z is the defined as the diagonal of the parallelogram constructed by edges X and Y.  The way the parallelogram is constructed is in a "tip to tail" fashion, meaning the tail of the new vector starts at the tip of the previous one.  This is true for both 2 and 3-D drawings.  Look below for Mathematica's solution to this exercise.

2-D

a) X=(({{3}, {5}}))  Y=(({{2}, {1}}))

\(\(X = {3, 5}; 
Y = {2, 1}; 
Z = X + Y; 

    View2D[{Arrow[X, Blue], Graphics[Text["X",  .9\ X -  .1\ Y]], 
        Arrow[Y, Blue], Graphics[Text["Y",  .9\ Y -  .1\ X]], 
        Arrow[Y, Tail -> X, Brown], 
        Graphics[Text["Y with tail at X",  .6  Y + 1.1\ X]], 
        Arrow[Z, Blue], Graphics[Text["Z", 1.1\ Z]]}]; 

    View2D[{Arrow[X, Blue], Graphics[Text["X",  .9\ X -  .1\ Y]], 
        Arrow[X, Tail -> Y, Red], 
        Graphics[Text["X with tail at Y",  .7\ X + Y]], Arrow[Y, Blue], 
        Graphics[Text["Y",  .9\ Y -  .1\ X]], Arrow[Z, Blue], 
        Graphics[Text["Z", 1.1\ Z]]}]; 

    View2D[{Arrow[X, Blue], Graphics[Text["X", 1.1\ X]], Arrow[Y, Blue], 
        Graphics[Text["Y", 1.1\ Y]], 
        Graphics[{Yellow, Polygon[{{0, 0}, X, X + Y, Y}]}], Arrow[Z, Blue], 
        Graphics[Text["Z", 1.1\ Z]]}]; 
\)\)

Mathematica tries to show you how the parallelogram is constructed in this "tip to tail" fashion.  The first drawing shows a copy of the Y vector moved up to the tip of the X vector.  Then the next drawing shows the X vector moved over to the tip of the Y vector.  These two actions create, coupled with the original two X and Y vectors, the four sides of the parallelogram, as shown in drawing 3.  Z, therefore, is equal to the diagonal of this newly constructed parallelogram.  In the rest of the problems, I have given you the code for drawing 3 to see if you have made the correct parallelogram.  <Enter> in below to see the figure.

b) X=(({{-3}, {4}}))  Y=(({{-2}, {-5}}))

\(X = {\(-3\), 4}; 
Y = {\(-2\), \(-5\)}; 
Z = X + Y; 

    View2D[{Arrow[X, Blue], Graphics[Text["X", 1.1\ X]], Arrow[Y, Blue], 
        Graphics[Text["Y", 1.1\ Y]], 
        Graphics[{Yellow, Polygon[{{0, 0}, X, X + Y, Y}]}], Arrow[Z, Blue], 
        Graphics[Text["Z", 1.1\ Z]]}]; \)

c) X=(({{-3}, {-4}}))  Y=(({{4}, {-2}}))

\(X = {\(-3\), \(-4\)}; 
Y = {4, \(-2\)}; 
Z = X + Y; 

    View2D[{Arrow[X, Blue], Graphics[Text["X", 1.1\ X]], Arrow[Y, Blue], 
        Graphics[Text["Y", 1.1\ Y]], 
        Graphics[{Yellow, Polygon[{{0, 0}, X, X + Y, Y}]}], Arrow[Z, Blue], 
        Graphics[Text["Z", 1.1\ Z]]}]; \)

d) X=(({{-3}, {-4}}))  Y=(({{5}, {4}}))

\(X = {\(-3\), \(-4\)}; 
Y = {5, 4}; 
Z = X + Y; 

    View2D[{Arrow[X, Blue], Graphics[Text["X", 1.1\ X]], Arrow[Y, Blue], 
        Graphics[Text["Y", 1.1\ Y]], 
        Graphics[{Yellow, Polygon[{{0, 0}, X, X + Y, Y}]}], Arrow[Z, Blue], 
        Graphics[Text["Z", 1.1\ Z]]}]; \)

3-D

As mentioned before, the same type of situation occurs in 3-D as in 2-D with the construction of a parallelogram.  Now there is another direction involved, the Z-direction.  <Enter> below to view the geometric solution to the next problem:

e) X=(({{({{5}, {3}})}, {4}}))  Y=(({{({{1}, {6}})}, {2}}))

\(X = {5, \ 3, \ 4}; 
Y = {1, \ 6\ , 2}; 
Z = X + Y; 

    View3D[{Arrow[X, Blue], Graphics3D[Text["X",  .9\ X -  .1\ Y]], 
        Arrow[Y, Blue], Graphics3D[Text["Y", 1.1\ Y]], 
        Arrow[Y, Tail -> X, Brick], 
        Graphics3D[Text["Y with tail at X",  .4\ Y + 1.1\ X]], 
        Arrow[Z, Blue]}]; 

    \(View3D[{Arrow[X, Blue], Graphics3D[Text["X", 1.1\ X]], 
        Arrow[X, Tail -> Y, Carrot], 
        Graphics3D[Text["X with tail at Y",  .4\ X + 1.1\ Y]], 
        Arrow[Y, Blue], Graphics3D[Text["Y", 1.1\ Y]], Arrow[Z, Blue]}]; 
    \)\)View3D[{Arrow[X, Blue], Graphics3D[Text["X", 1.1 X]], 
        Arrow[Y, Blue], Graphics3D[Text["Y", 1.1 Y]], Arrow[Z, Blue], 
        Graphics3D[Text["Z", 1.1 Z]], 
        Graphics3D[Polygon[{{0, 0, 0}, X, X + Y, Y}]]}];

Now here are the rest of the problems.  Again, I've given you the end result parrallelogram to check your work.

f) X=(({{({{4}, {6}})}, {2}}))  Y=(({{({{-5}, {2}})}, {3}}))

\(X = {4, \ 6, \ 2}; 
Y = {\(-5\), \ 2, \ 3}; 
Z = X + Y; 

    View3D[{Arrow[X, Blue], Graphics3D[Text["X", 1.1\ X]], 
        Arrow[Y, Blue], Graphics3D[Text["Y", 1.1\ Y]], Arrow[Z, Blue], 
        Graphics3D[Text["Z", 1.1\ Z]], 
        Graphics3D[Polygon[{{0, 0, 0}, X, X + Y, Y}]]}]; \)

g) X=(({{({{-2}, {-4}})}, {2}}))  Y=(({{({{2}, {6}})}, {3}}))

\(X = {\(-2\), \ \(-4\), \ 2}; 
Y = {2, \ 6, \ 3}; 
Z = X + Y; 

    View3D[{Arrow[X, Blue], Graphics3D[Text["X", 1.1\ X]], 
        Arrow[Y, Blue], Graphics3D[Text["Y", 1.1\ Y]], Arrow[Z, Blue], 
        Graphics3D[Text["Z", 1.1\ Z]], 
        Graphics3D[Polygon[{{0, 0, 0}, X, X + Y, Y}]]}]; \)

h) X=(({{({{2}, {2}})}, {1}}))  Y=(({{({{-2}, {1}})}, {2}}))

\(X = {2, \ 2, \ 1}; 
Y = {\(-2\), \ 1, \ 2}; 
Z = X + Y; 

    View3D[{Arrow[X, Blue], Graphics3D[Text["X", 1.1\ X]], 
        Arrow[Y, Blue], Graphics3D[Text["Y", 1.1\ Y]], Arrow[Z, Blue], 
        Graphics3D[Text["Z", 1.1\ Z]], 
        Graphics3D[Polygon[{{0, 0, 0}, X, X + Y, Y}]]}]; \)

Algebraic Solution

This method is a little more intuitive than the geometric solution.  When adding two vectors, we just merely add together the corresponding elements of each vector together.  The following formulas show this idea:

X  +  Y= (({{(Subscript[x, 1])}, {(Subscript[x, 2])}})) + (({{(Subscript[y, 1])}, {(Subscript[y, 2])}})) = (({{(Subscript[x, 1]) +  (Subscript[y, 1])}, {(Subscript[x, 2]) +  (Subscript[y, 2])}})) = Z   (2 - D)

X  +  Y= (({{(Subscript[x, 1])}, {({{(Subscript[x, 2])}, {(Subscript[x, 3])}})}})) + (({{(Subscript[y, 1])}, {({{(Subscript[y, 2])}, {(Subscript[y, 3])}})}})) = (({{(Subscript[x, 1]) +  (Subscript[y, 1])}, {({{(Subscript[x, 2]) +  (Subscript[y, 2])}, {(Subscript[x, 3]) +  (Subscript[y, 3])}})}})) = Z   (3 - D)

The neat thing about Mathematica is that we can make it do this for us fairly easy.  <Enter> the following input to see how Mathematica takes care of vector additon:

a) X=(({{3}, {5}}))  Y=(({{2}, {1}}))

\(X = {3, \ 5}; 
Y = {2, \ 1}; 
Z = X + Y; 

    Print[X, "+", Y, "=", Z]\)

b) X=(({{-3}, {4}}))  Y=(({{-2}, {-5}}))

\(X = {\(-3\), \ 4}; 
Y = {\(-2\), \ \(-5\)}; 
Z = X + Y; 

    Print[X, "+", Y, "=", Z]\)

c) X=(({{-3}, {-4}}))  Y=(({{4}, {-2}}))

\(X = {\(-3\), \ \(-4\)}; 
Y = {4, \ \(-2\)}; 
Z = X + Y; 

    Print[X, "+", Y, "=", Z]\)

d) X=(({{-3}, {-4}}))  Y=(({{5}, {4}}))

\(X = {\(-3\), \ \(-4\)}; 
Y = {5, 4}; 
Z = X + Y; 

    Print[X, "+", Y, "=", Z]\)

e) X=(({{({{5}, {3}})}, {4}}))  Y=(({{({{1}, {6}})}, {2}}))

\(X = {5, 3, 4}; 
Y = {1, \ 6, 2}; 
Z = X + Y; 

    Print[X, "+", Y, "=", Z]\)

f) X=(({{({{4}, {6}})}, {2}}))  Y=(({{({{-5}, {2}})}, {3}}))

\(X = {4, 6, 2}; 
Y = {\(-5\), 2, 3}; 
Z = X + Y; 

    Print[X, "+", Y, "=", Z]\)

g) X=(({{({{-2}, {-4}})}, {2}}))  Y=(({{({{2}, {6}})}, {3}}))

\(X = {\(-2\), \(-4\), 2}; 
Y = {2, \ 6, 3}; 
Z = X + Y; 

    Print[X, "+", Y, "=", Z]\)

h) X=(({{({{2}, {2}})}, {1}}))  Y=(({{({{-2}, {1}})}, {2}}))

\(X = {2, 2, 1}; 
Y = {\(-2\), \ 1, 2}; 
Z = X + Y; 

    Print[X, "+", Y, "=", Z]\)