Calculus: The Language of Change

Exercise Set 15.2
Computer Exercise: #2
Position Vectors

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 2

Here is some more work with position vectors.

2-D

Draw the following vectors and find their lengths.

The trick in this exercise is that they have switched the notation of the vector.  In the previous exercise they used the notation:

Vector A = ((Subscript[x, 1]),  (Subscript[x, 2]))

Now they attempt to fool you with the notation:

Vector A = (({{(Subscript[x, 1])}, {(Subscript[x, 2])}}))

So to figure these out, just flip the vectors back horizontally and compute as in exercise 1.  <Enter> below to accomplish this task:

a) (({{4}, {2}}))

\(A = \ {4, 2}; 

    View2D[{Arrow[A, Blue], 
        Graphics[{Blue, AbsoluteThickness[2], AbsoluteDashing[{5, 5}], 
            Line[{{0, 0}, {A[[1]], 0}, 
                A}]}], Graphics[
          Text[A[[1
              ]], { .6\ 
                A[[1]],  .1\ 
                A[[2]]}]], 
        Graphics[
          Text[A[[2
              ]], { .9\ 
                A[[1]],  .5\ 
                A[[2]]}]]}]; \)

And now for the length of vector A.  The same rules apply as per exercise 1.  As we remember, in 2-D the definition of the norm is equivalent to:

Norm[ X_ ] := \(TraditionalForm\`\@\(\((x\_\(1	\))\)\^2 + \ \((x\_2)\)\^2\)\)

Since everything still applies from exercise 1, we can make the same command as before:

NOTE:  TO GET THE CORRECT LENGTH OPEN THE PICTURE FIRST BEFORE OPENING THE NORM COMMAND!!!
<Enter> below to get the length of vector A:

Norm[A]

The same process is done for the other parts of this problem as shown below:

b) (({{-5}, {-2}}))

\(B = {\(-5\), \(-2\)}; 

    View2D[{Arrow[X, Blue], 
        Graphics[{Blue, AbsoluteThickness[2], AbsoluteDashing[{5, 5}], 
            Line[{{0, 0}, {B[[1]], 0}, 
                B}]}], Graphics[
          Text[B[[1
              ]], { .6\ 
                B[[1]],  .1\ 
                B[[2]]}]], 
        Graphics[
          Text[B[[2
              ]], { .9\ 
                B[[1]],  .5\ 
                B[[2]]}]]}]; \)

And the length of vector B:

Norm[B]

c) (({{-3}, {7}}))

\(c = {\(-3\), \ 7}; 

    View2D[{Arrow[c, Blue], 
        Graphics[{Blue, AbsoluteThickness[2], AbsoluteDashing[{5, 5}], 
            Line[{{0, 0}, {c[[1]], 0}, 
                c}]}], Graphics[
          Text[c[[1
              ]], { .6\ 
                c[[1]],  .1\ 
                c[[2]]}]], 
        Graphics[
          Text[c[[2
              ]], { .9\ 
                c[[1]],  .5\ 
                c[[2]]}]]}]; \)

And The length of Vector c:

Norm[c]

d) (({{6}, {-2}}))

\(d = {6, \(-2\)}; 

    View2D[{Arrow[d, Blue], 
        Graphics[{Blue, AbsoluteThickness[2], AbsoluteDashing[{5, 5}], 
            Line[{{0, 0}, {d[[1]], 0}, 
                d}]}], Graphics[
          Text[d[[1
              ]], { .6  d[[1
                  ]],  .1\ 
                d[[2]]}]], 
        Graphics[
          Text[d[[2
              ]], { .9\ 
                d[[1]],  .5\ 
                d[[2]]}]]}]; \)

And The length of Vector d:

Norm[d]

3-D

Draw the following vectors and find their lengths.

Again, these are very similar to the previous 2-D drawings, however, now a third direction has been added to the vector's coordinates.  
Just like 2-D, the following is true in 3-D:

Vector A = ((Subscript[x, 1]),  (Subscript[x, 2]),  (Subscript[x, 3])) =  (({{(Subscript[x, 1])}, {(Subscript[x, 2])}, {(Subscript[x, 3])}}))

So what we can do is just flip the vector back to the horizontal notation and have Mathematica do the work for us.
<Enter> below to see the graph of vector A in three-dimensions.

a)  (({{4}, {6}, {5}}))

\(a = {4, 6, 5}; 

    View3D[{Arrow[a, Blue], 
        Graphics3D[{Blue, AbsoluteThickness[2], AbsoluteDashing[{5, 5}], 
            Line[{{0, 0, 0}, {a[[1]], 0, 
                  0}, {a[[1]], 
                  a[[2]], 0}, a}]}], 
        Graphics3D[
          Text[a[[1
              ]], { .5\ 
                a[[1]],  .1\ 
                a[[2]], 
              0\ a[[3]]}]], 
        Graphics3D[
          Text[a[[2
              ]], { .8\ 
                a[[1]],  .5\ 
                a[[2]], 
              0\ a[[3]]}]], 
        Graphics3D[
          Text[a[[3
              ]], { .8\ 
                a[[1]],  .8\ 
                a[[2]],  .5\ 
                a[[3]]}]]}]; \)

Previously the norm was defined in terms of (Subscript[x, 1]) and (Subscript[x, 2]) only.  Now in 3-D, the norm will need to add in the (Subscript[x, 3]) term as well:

Norm[ X_ ] := \(TraditionalForm
      \`\@\(\((x\_\(1
	\))\)\^2 + \ \((x\_\(2
\))\)\^2 + \ 
          \((x\_3)\)\^2\)\)

NOTE:  TO GET THE CORRECT LENGTH OPEN THE PICTURE FIRST BEFORE OPENING THE NORM COMMAND!!!
<Enter> below to get the length of vector A:

Norm[a]

The same process is done for the other parts of this problem as shown below:

b) (({{-4}, {7}, {-2}}))

\(b = {\(-4\), 7, \(-2\)}; 

    View3D[{Arrow[b, Blue], 
        Graphics3D[{Blue, AbsoluteThickness[2], AbsoluteDashing[{5, 5}], 
            Line[{{0, 0, 0}, {b[[1]], 0, 
                  0}, {b[[1]], 
                  b[[2]], 0}, b}]}], 
        Graphics3D[
          Text[b[[1
              ]], { .5\ 
                b[[1]],  .1\ 
                b[[2]], 
              0\ b[[3]]}]], 
        Graphics3D[
          Text[b[[2
              ]], { .8\ 
                b[[1]],  .5\ 
                b[[2]], 
              0\ b[[3]]}]], 
        Graphics3D[
          Text[b[[3
              ]], { .8\ 
                b[[1]],  .8\ 
                b[[2]],  .5\ 
                b[[3]]}]]}]; \)

And the length of vector B:

Norm[b]

c)  (({{6}, {8}, {-10}}))

\(c = {6, 8, \(-10\)}; 

    View3D[{Arrow[c, Blue], 
        Graphics3D[{Blue, AbsoluteThickness[2], AbsoluteDashing[{5, 5}], 
            Line[{{0, 0, 0}, {c[[1]], 0, 
                  0}, {c[[1]], 
                  c[[2]], 0}, c}]}], 
        Graphics3D[
          Text[c[[1
              ]], { .5\ 
                c[[1]],  .1\ 
                c[[2]], 
              0\ c[[3]]}]], 
        Graphics3D[
          Text[c[[2
              ]], { .8\ 
                c[[1]],  .5\ 
                c[[2]], 
              0\ c[[3]]}]], 
        Graphics3D[
          Text[c[[3
              ]], { .8\ 
                c[[1]],  .8\ 
                c[[2]],  .5\ 
                c[[3]]}]]}]; \)

And the length of vector C:

Norm[c]

d) (({{-6}, {-9}, {-1}}))

\(d = {\(-6\), \(-9\), \(-1\)}; 

    View3D[{Arrow[d, Blue], 
        Graphics3D[{Blue, AbsoluteThickness[2], AbsoluteDashing[{5, 5}], 
            Line[{{0, 0, 0}, {d[[1]], 0, 
                  0}, {d[[1]], 
                  d[[2]], 0}, d}]}], 
        Graphics3D[
          Text[d[[1
              ]], { .5\ 
                d[[1]],  .1\ 
                d[[2]], 
              0\ d[[3]]}]], 
        Graphics3D[
          Text[d[[2
              ]], { .8\ 
                d[[1]],  .5\ 
                d[[2]], 
              0\ d[[3]]}]], 
        Graphics3D[
          Text[d[[3
              ]], { .8\ 
                d[[1]],  .8\ 
                d[[2]],  .5\ 
                d[[3]]}]]}]; \)

And the length of vector D:

Norm[d]