Visualizing vectors in 2D and 3D Worksheet by Mike May, S.J.- maymk@slu.edu Edited by Russell Blyth - blythrd@slu.edu In this worksheet we use Maple to visualize vector concepts. First we want to load the appropriate commands. The commands for dot and cross product are in the Linear Algebra package. The commands for plotting vectors is in the plottools package. We also need the display command from the plots package. QypJKHJlc3RhcnRHJSpwcm90ZWN0ZWRHISIiLUkld2l0aEc2IjYjSS5MaW5lYXJBbGdlYnJhRzYkSShfc3lzbGliR0YoRiRGJS1GJzYjSSpwbG90dG9vbHNHNiRGJEYsRiUtRic2I0kmcGxvdHNHRjBGJQ==
<Text-field style="Heading 2" layout="Heading 2">Visualizing vectors in R^2, simple operations:</Text-field> We define some two dimensional vectors. We will use a pair of vectors with numbers so we have a specific example and a pair of vectors with variables so we can see the general case. v1 := <1,2>; v2 := <3,-4>; w1 := <a1, a2>; w2 := <b1, b2>; LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoI3omWyM= LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoISk0MiQ= LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoPz8yJA== LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoZz8yJA== To add the vectors we use normal addition. Scalar multiplication also works. "v1+v2" = v1+v2; "w1+w2" = w1+w2; "3*v1" = 3*v1; "5*w2" = 3*w2; L1EmdjErdjI2Ii0mSSdWZWN0b3JHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiQ2I0knY29sdW1uR0YkNiMvSSQlaWRHRiQiKCkzaEU= L1EmdzErdzI2Ii0mSSdWZWN0b3JHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiQ2I0knY29sdW1uR0YkNiMvSSQlaWRHRiQiKCtCMiQ= L1ElMyp2MTYiLSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJDYjSSdjb2x1bW5HRiQ2Iy9JJCVpZEdGJCIoIVFzSQ== L1ElNSp3MjYiLSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJDYjSSdjb2x1bW5HRiQ2Iy9JJCVpZEdGJCIoU18mSA== There are several ways to normalize a vector (that is, to produce a unit vector in the direction of the original vector). QyQqJkkjdjFHNiIiIiItSSVzcXJ0R0YlNiMtSTBkZWxheURvdFByb2R1Y3RHNiQlKnByb3RlY3RlZEcvSSttb2R1bGVuYW1lR0YlSSxUeXBlc2V0dGluZ0c2JEYtSShfc3lzbGliR0YlNiRGJEYkISIiRiY= QyQqJkkjdjFHNiIiIiItSSVzcXJ0RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiMtSTBkZWxheURvdFByb2R1Y3RHNiRGKi9JK21vZHVsZW5hbWVHRiVJLFR5cGVzZXR0aW5nR0YpNiRGJEYkISIiRiY= LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoT2ZnIw== QyQqJkkjdjFHNiIiIiItSSVzcXJ0RzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YlNiMtSTBkZWxheURvdFByb2R1Y3RHNiRGKi9JK21vZHVsZW5hbWVHRiVJLFR5cGVzZXR0aW5nR0YpNiRGJEYkISIiRiY= LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoayU9dg== v1/sqrt(v1.v1); LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCInL0d1 Normalize(v1, Euclidean); LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIna0B1 Visualizing the sum of two vectors takes a bit more work. The following block of code shows the addition clearly. #a block of code to see two vectors and their sum zerovec := <0,0>: vec1 := <5,7>: vec2 := <4,-3>: vecsum := vec1+vec2; plotv1 := arrow(zerovec, vec1, .2, .4, .1, color=red): label1 := textplot([vec1[1]/2,vec1[2]/2, `vector 1`], align={ABOVE,RIGHT}, font = [HELVETICA, BOLD, 12]): plotv2 := arrow(zerovec, vec2, .2, .4, .1, color=green): label2 := textplot([vec2[1]/2,vec2[2]/2, `vector 2`], align={ABOVE,RIGHT}, font = [HELVETICA, BOLD, 12]): plotv2m := arrow(vec1, vec2, .2, .4, .1, color=green): label2m := textplot([vec1[1]+vec2[1]/2,vec1[2]+vec2[2]/2, `vector 2 translated`], align={ABOVE,RIGHT}, font = [HELVETICA, BOLD, 12]): plotvecsum := arrow(zerovec, vecsum, .2, .4, .1, color=blue): labelsum := textplot([(vec1[1]+vec2[1])/2,(vec1[2]+vec2[2])/2, `vector 1 + vector 2`], align={ABOVE,RIGHT}, font = [HELVETICA, BOLD, 12]): display({plotv1, label1, plotv2, label2, plotv2m, label2m, plotvecsum, labelsum}, scaling=constrained); LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoW0RBKQ== Ni8tSSlQT0xZR09OU0c2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYmNyY3JCQhKysrKytnISM2JCErKysrKyEpISM2NyQkIisrKysrZyEjNiQiKysrKyshKSEjNjckJCIrKysrZ08hIiokISsrKys/RSEiKjckJCIrKysrU04hIiokISsrKysheSMhIio3JTckJCIrKysrP1AhIiokISsrKytTRCEiKjckJCIiJSIiISQhIiQiIiE3JCQiKysrKyFbJCEiKiQhKysrK2dHISIqLUkmU1RZTEVHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2I0ksUEFUQ0hOT0dSSURHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiItSSdDT0xPVVJHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JkkkUkdCRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiJCIiISIiISQiKisrKysiISIpJCIiISIiIS1JJ0NVUlZFU0c2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjNyo3JCQhKysrKytnISM2JCErKysrKyEpISM2NyQkIisrKysrZyEjNiQiKysrKyshKSEjNjckJCIrKysrZ08hIiokISsrKys/RSEiKjckJCIrKysrP1AhIiokISsrKytTRCEiKjckJCIiJSIiISQhIiQiIiE3JCQiKysrKyFbJCEiKiQhKysrK2dHISIqNyQkIisrKytTTiEiKiQhKysrKyF5IyEiKjckJCErKysrK2chIzYkISsrKysrISkhIzYtSSVURVhURzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNic3JCQiIiMiIiEkISsrKysrOiEiKlEpdmVjdG9yfjI2IkkrQUxJR05BQk9WRUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IkkrQUxJR05SSUdIVEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2Ii1JJUZPTlRHNiI2JUkqSEVMVkVUSUNBRzYiSSVCT0xERzYiIiM3LUkpUE9MWUdPTlNHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JjcmNyQkIis1WkxQIikhIzYkIStOPlE3ZSEjNjckJCErNVpMUCIpISM2JCIrTj5RN2UhIzY3JCQiK2BtaT1XISIqJCIrPlE3ZWohIio3JCQiK1pMUCJlJSEiKiQiKyI9dz1DJyEiKjclNyQkIisxTERQViEiKiQiK1J3QztrISIqNyQkIiImIiIhJCIiKCIiITckJCIrJXBZRm0lISIqJCIraEJ2JD0nISIqLUkmU1RZTEVHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2I0ksUEFUQ0hOT0dSSURHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiItSSdDT0xPVVJHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JkkkUkdCRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiJCIqKysrKyIhIikkIiIhIiIhJCIiISIiIS1JJ0NVUlZFU0c2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjNyo3JCQiKzVaTFAiKSEjNiQhK04+UTdlISM2NyQkISs1WkxQIikhIzYkIitOPlE3ZSEjNjckJCIrYG1pPVchIiokIis+UTdlaiEiKjckJCIrMUxEUFYhIiokIitSd0M7ayEiKjckJCIiJiIiISQiIigiIiE3JCQiKyVwWUZtJSEiKiQiK2hCdiQ9JyEiKjckJCIrWkxQImUlISIqJCIrIj13PUMnISIqNyQkIis1WkxQIikhIzYkIStOPlE3ZSEjNi1JJVRFWFRHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JzckJCIrKysrK0QhIiokIisrKysrTiEiKlEpdmVjdG9yfjE2IkkrQUxJR05BQk9WRUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IkkrQUxJR05SSUdIVEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2Ii1JJUZPTlRHNiI2JUkqSEVMVkVUSUNBRzYiSSVCT0xERzYiIiM3LUkpUE9MWUdPTlNHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JjcmNyQkIisrKytTXCEiKiQiKysrKz9wISIqNyQkIisrKytnXSEiKiQiKysrKyEzKCEiKjckJCIrKysrZycpISIqJCIrKysrIVElISIqNyQkIisrKytTJikhIiokIisrKys/VSEiKjclNyQkIisrKys/KCkhIiokIisrKytnVyEiKjckJCIiKiIiISQiIiUiIiE3JCQiKysrKyFbKSEiKiQiKysrK1NUISIqLUkmU1RZTEVHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2I0ksUEFUQ0hOT0dSSURHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiItSSdDT0xPVVJHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JkkkUkdCRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiJCIiISIiISQiKisrKysiISIpJCIiISIiIS1JJ0NVUlZFU0c2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjNyo3JCQiKysrK1NcISIqJCIrKysrP3AhIio3JCQiKysrK2ddISIqJCIrKysrITMoISIqNyQkIisrKytnJykhIiokIisrKyshUSUhIio3JCQiKysrKz8oKSEiKiQiKysrK2dXISIqNyQkIiIqIiIhJCIiJSIiITckJCIrKysrIVspISIqJCIrKysrU1QhIio3JCQiKysrK1MmKSEiKiQiKysrKz9VISIqNyQkIisrKytTXCEiKiQiKysrKz9wISIqLUklVEVYVEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYnNyQkIiIoIiIhJCIrKysrK2IhIipRNHZlY3Rvcn4yfnRyYW5zbGF0ZWQ2IkkrQUxJR05BQk9WRUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IkkrQUxJR05SSUdIVEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2Ii1JJUZPTlRHNiI2JUkqSEVMVkVUSUNBRzYiSSVCT0xERzYiIiM3LUkpUE9MWUdPTlNHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JjcmNyQkIitnWVFoUyEjNiQhKyZbOiJRIiohIzY3JCQhK2dZUWhTISM2JCIrJls6IlEiKiEjNjckJCIrYGhRZiEpISIqJCIrYjZRInAkISIqNyQkIitaUWhTIikhIiokIitYKT0nM04hIio3JTckJCIrMkJ4PSEpISIqJCIrNUJ3I3kkISIqNyQkIiIqIiIhJCIiJSIiITckJCIrJHBGNz0pISIqJCIrIXBQc1QkISIqLUkmU1RZTEVHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2I0ksUEFUQ0hOT0dSSURHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiItSSdDT0xPVVJHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JkkkUkdCRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiJCIiISIiISQiIiEiIiEkIiorKysrIiEiKS1JJ0NVUlZFU0c2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjNyo3JCQiK2dZUWhTISM2JCErJls6IlEiKiEjNjckJCErZ1lRaFMhIzYkIismWzoiUSIqISM2NyQkIitgaFFmISkhIiokIitiNlEicCQhIio3JCQiKzJCeD0hKSEiKiQiKzVCdyN5JCEiKjckJCIiKiIiISQiIiUiIiE3JCQiKyRwRjc9KSEiKiQiKyFwUHNUJCEiKjckJCIrWlFoUyIpISIqJCIrWCk9JzNOISIqNyQkIitnWVFoUyEjNiQhKyZbOiJRIiohIzYtSSVURVhURzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNic3JCQiKysrKytYISIqJCIiIyIiIVE0dmVjdG9yfjF+K352ZWN0b3J+MjYiSStBTElHTkFCT1ZFRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiSStBTElHTlJJR0hURzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiLUklRk9OVEc2IjYlSSpIRUxWRVRJQ0FHNiJJJUJPTERHNiIiIzctSShTQ0FMSU5HRzYiNiNJLENPTlNUUkFJTkVERzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYi
<Text-field style="Heading 2" layout="Heading 2">Dot products and projections in 2D:</Text-field> Next we look at dot products. First we show our vectors and the unit vectors in the same directions. The unit vectors are shown wider than the original vectors so you can see them. zerovec := <0,0>: vec1 := v1; vec2 := v2; magvec1 := sqrt(v1.v1); vec1norm := vec1*(1/magvec1); magvec2 := sqrt(v2.v2); vec2norm := vec2*(1/magvec2); plotv1 := arrow(zerovec, vec1, .1, .2, .1, color=red): label1 := textplot([vec1[1]/2,vec1[2]/2, `vector 1`], align={ABOVE,RIGHT}, font = [HELVETICA, BOLD, 12]): plotv2 := arrow(zerovec, vec2, .1, .2, .1, color=yellow): label2 := textplot([vec2[1]/2,vec2[2]/2, `vector 2`], align={ABOVE,RIGHT}, font = [HELVETICA, BOLD, 12]): plotv1n := arrow(zerovec, vec1norm, .2, .4, .2, color=blue): plotv2n := arrow(zerovec, vec2norm, .2, .4, .2, color=brown): display({plotv1, label1, plotv2, label2, plotv2n, plotv1n}, scaling=constrained); LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoI3omWyM= LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoISk0MiQ= KiQiIiYjIiIiIiIj LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoR1NBKQ== IiIm LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIob1NBKQ== Ni0tSSVURVhURzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNic3JCQiKysrKytdISM1JCIiIiIiIVEpdmVjdG9yfjE2IkkrQUxJR05BQk9WRUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IkkrQUxJR05SSUdIVEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2Ii1JJUZPTlRHNiI2JUkqSEVMVkVUSUNBRzYiSSVCT0xERzYiIiM3LUkpUE9MWUdPTlNHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JjcmNyQkIitjZjhzVyEjNiQhK3l6MU9BISM2NyQkIStjZjhzVyEjNiQiK3l6MU9BISM2NyQkIisva3lfJikhIzUkIishb2dCIz0hIio3JCQiKydmOHNXKiEjNSQiKz8kUnd4IiEiKjclNyQkIis0R2QwIikhIzUkIitnOHNXPSEiKjckJCIiIiIiISQiIiMiIiE3JCQiKyI+RlcqKSohIzUkIitTJ3lfdiIhIiotSSZTVFlMRUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSxQQVRDSE5PR1JJREc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2Ii1JJ0NPTE9VUkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYmSSRSR0JHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiIkIiorKysrIiEiKSQiIiEiIiEkIiIhIiIhLUknQ1VSVkVTRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiM3KjckJCIrY2Y4c1chIzYkISt5ejFPQSEjNjckJCErY2Y4c1chIzYkIit5ejFPQSEjNjckJCIrL2t5XyYpISM1JCIrIW9nQiM9ISIqNyQkIis0R2QwIikhIzUkIitnOHNXPSEiKjckJCIiIiIiISQiIiMiIiE3JCQiKyI+RlcqKSohIzUkIitTJ3lfdiIhIio3JCQiKydmOHNXKiEjNSQiKz8kUnd4IiEiKjckJCIrY2Y4c1chIzYkISt5ejFPQSEjNi1JKVBPTFlHT05TRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiY3JjckJCErKysrK1MhIzYkISsrKysrSSEjNjckJCIrKysrK1MhIzYkIisrKysrSSEjNjckJCIrKysrU0YhIiokISsrKytxTiEiKjckJCIrKysrZ0UhIiokISsrKytJTyEiKjclNyQkIisrKysheSMhIiokISsrKytTTiEiKjckJCIiJCIiISQhIiUiIiE3JCQiKysrKz9FISIqJCErKysrZ08hIiotSSZTVFlMRUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSxQQVRDSE5PR1JJREc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2Ii1JJ0NPTE9VUkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYmSSRSR0JHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiIkIiorKysrIiEiKSQiKisrKysiISIpJCIiISIiIS1JJ0NVUlZFU0c2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjNyo3JCQhKysrKytTISM2JCErKysrK0khIzY3JCQiKysrKytTISM2JCIrKysrK0khIzY3JCQiKysrK1NGISIqJCErKysrcU4hIio3JCQiKysrKyF5IyEiKiQhKysrK1NOISIqNyQkIiIkIiIhJCEiJSIiITckJCIrKysrP0UhIiokISsrKytnTyEiKjckJCIrKysrZ0UhIiokISsrKytJTyEiKjckJCErKysrK1MhIzYkISsrKysrSSEjNi1JJVRFWFRHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JzckJCIrKysrKzohIiokISIjIiIhUSl2ZWN0b3J+MjYiSStBTElHTkFCT1ZFRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiSStBTElHTlJJR0hURzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiLUklRk9OVEc2IjYlSSpIRUxWRVRJQ0FHNiJJJUJPTERHNiIiIzctSSlQT0xZR09OU0c2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYmNyY3JCQiKzU+RlcqKSEjNiQhK2FmOHNXISM2NyQkISs1PkZXKikhIzYkIithZjhzVyEjNjckJCIrczpHJG8jISM1JCIrQDZqLXchIzU3JCQiK2FmOHNXISM1JCIrSlI/M24hIzU3JTckJCIrIlFhKSl5IiEjNSQiKzxaJSlcISkhIzU3JCQiK2FmOHNXISM1JCIrMz5GVyopISM1NyQkIitYSmNtYCEjNSQiK04uKjRFJyEjNS1JJlNUWUxFRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiNJLFBBVENITk9HUklERzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiLUknQ09MT1VSRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiZJJFJHQkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IiQiIiEiIiEkIiIhIiIhJCIqKysrKyIhIiktSSdDVVJWRVNHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2IzcqNyQkIis1PkZXKikhIzYkISthZjhzVyEjNjckJCErNT5GVyopISM2JCIrYWY4c1chIzY3JCQiK3M6RyRvIyEjNSQiK0A2ai13ISM1NyQkIisiUWEpKXkiISM1JCIrPFolKVwhKSEjNTckJCIrYWY4c1chIzUkIiszPkZXKikhIzU3JCQiK1hKY21gISM1JCIrTi4qNEUnISM1NyQkIithZjhzVyEjNSQiK0pSPzNuISM1NyQkIis1PkZXKikhIzYkISthZjhzVyEjNi1JKVBPTFlHT05TRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiY3JjckJCErKysrKyEpISM2JCErKysrK2chIzY3JCQiKysrKyshKSEjNiQiKysrKytnISM2NyQkIisrKysrYyEjNSQhKysrKytlISM1NyQkIisrKysrUyEjNSQhKysrKytxISM1NyU3JCQiKysrKytrISM1JCErKysrK18hIzU3JCQiKysrKytnISM1JCErKysrKyEpISM1NyQkIisrKysrSyEjNSQhKysrKyt3ISM1LUkmU1RZTEVHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2I0ksUEFUQ0hOT0dSSURHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiItSSdDT0xPVVJHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JkkkUkdCRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiJCIpIyllcWshIikkIikpZXFrIiEiKSQiKSllcWsiISIpLUknQ1VSVkVTRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiM3KjckJCErKysrKyEpISM2JCErKysrK2chIzY3JCQiKysrKyshKSEjNiQiKysrKytnISM2NyQkIisrKysrYyEjNSQhKysrKytlISM1NyQkIisrKysrayEjNSQhKysrKytfISM1NyQkIisrKysrZyEjNSQhKysrKyshKSEjNTckJCIrKysrK0shIzUkISsrKysrdyEjNTckJCIrKysrK1MhIzUkISsrKysrcSEjNTckJCErKysrKyEpISM2JCErKysrK2chIzYtSShTQ0FMSU5HRzYiNiNJLENPTlNUUkFJTkVERzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYi When we compute the projection of one vector onto another, we will always start by normalizing the vector we are projecting onto, producing a unit vector in the same direction. Then the projection is this unit vector times the dot product of the two vectors. #a block of code for finding the projection #of vec1 onto vec2 zerovec := <0,0>: vec1 := <3,4>; vec2 := <1,3>; magvec2 := sqrt(vec2.vec2); vec2norm := vec2*(1/magvec2); dotproduct := vec1. vec2norm; projvec := dotproduct*vec2norm; plotv1 := arrow(zerovec, vec1, .2, .4, .1, color=red): plotv2 := arrow(zerovec, vec2, .2, .4, .1, color=blue): plotvproj := arrow(zerovec, projvec, .14, .28, .1, color=yellow): plotv2n := arrow(zerovec, vec2norm, .25, .5, .1, color=green): plotvperp := arrow(projvec, vec1-projvec, .10, .20, .07, color=black): label1 := textplot([vec1[1]/1.5,vec1[2]/1.5, ` vector 1`], align={ABOVE,RIGHT}, font = [HELVETICA, BOLD, 12]): label1a := textplot([vec2[1]/1.5,vec2[2]/1.5, `vector 2 `], align={ABOVE,LEFT}, font = [HELVETICA, BOLD, 12]): label2 := textplot([vec2norm[1]/2,vec2norm[2]/2, `vector 2 normalized `], align={ABOVE,LEFT}, font = [HELVETICA, BOLD, 12]): labelproj := textplot([projvec[1]/1.2,projvec[2]/1.2, `projection vector `], align={ABOVE,LEFT}, font = [HELVETICA, BOLD, 12]): labelorth := textplot([projvec[1]+(vec1[1]-projvec[1])/2,projvec[2]+(vec1[2]-projvec[2])/2, ` orthogonal component `], align={ABOVE,RIGHT}, font = [HELVETICA, BOLD, 12]): display({plotv1, plotv2, plotvproj, plotv2n, plotvperp, label1, label1a, label2, labelproj,labelorth}, scaling=constrained); LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIpJTNfIT0= LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIpQ0AwPQ== KiQiIzUjIiIiIiIj LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIpa0AwPQ== LCQqJCIjNSMiIiIiIiMjIiIkRic= LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIpL0EwPQ== NjItSSdDVVJWRVNHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2IzcqNyQkIishKUgkb1sqISM2JCErZ3dGaUohIzY3JCQhKyEpSCRvWyohIzYkIitnd0ZpSiEjNjckJCIrLW5KXiEpISM1JCIreEZpSkYhIio3JCQiKy9Nai1yISM1JCIrYGJDakYhIio3JCQiIiIiIiEkIiIkIiIhNyQkIitnbXQqMyIhIiokIitaV3ZPRSEiKjckJCIrKUgkb1sqKiEjNSQiK0JzUG9FISIqNyQkIishKUgkb1sqISM2JCErZ3dGaUohIzYtSSlQT0xZR09OU0c2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYmNyY3JCQiKyEpSCRvWyohIzYkIStnd0ZpSiEjNjckJCErISlIJG9bKiEjNiQiK2d3RmlKISM2NyQkIistbkpeISkhIzUkIit4RmlKRiEiKjckJCIrKUgkb1sqKiEjNSQiK0JzUG9FISIqNyU3JCQiKy9Nai1yISM1JCIrYGJDakYhIio3JCQiIiIiIiEkIiIkIiIhNyQkIitnbXQqMyIhIiokIitaV3ZPRSEiKi1JJlNUWUxFRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiNJLFBBVENITk9HUklERzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiLUknQ09MT1VSRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiZJJFJHQkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IiQiIiEiIiEkIiIhIiIhJCIqKysrKyIhIiktSSdDVVJWRVNHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2IzcqNyQkIitBVCZlPSIhIzUkISt2cSVHJlIhIzY3JCQhK0FUJmU9IiEjNSQiK3ZxJUcmUiEjNjckJCIrc2Q+ZzshIzUkIishUk1NJCopISM1NyQkIipcO011JSEjNSQiKyg0PihHJCohIzU3JCQiK2d3RmlKISM1JCIrISlIJG9bKiEjNTckJCIrUiJleEAmISM1JCIrbi1lWnghIzU3JCQiKztTIT4uJSEjNSQiK3VcJ0c5KSEjNTckJCIrQVQmZT0iISM1JCErdnElRyZSISM2LUkpUE9MWUdPTlNHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JjcmNyQkIitBVCZlPSIhIzUkISt2cSVHJlIhIzY3JCQhK0FUJmU9IiEjNSQiK3ZxJUcmUiEjNjckJCIrc2Q+ZzshIzUkIishUk1NJCopISM1NyQkIis7UyE+LiUhIzUkIit1XCdHOSkhIzU3JTckJCIqXDtNdSUhIzUkIisoND4oRyQqISM1NyQkIitnd0ZpSiEjNSQiKyEpSCRvWyohIzU3JCQiK1IiZXhAJiEjNSQiK24tZVp4ISM1LUkmU1RZTEVHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2I0ksUEFUQ0hOT0dSSURHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiItSSdDT0xPVVJHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JkkkUkdCRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiJCIiISIiISQiKisrKysiISIpJCIiISIiIS1JKVBPTFlHT05TRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiY3JjckJCIrKysrKyEpISM2JCErKysrK2chIzY3JCQhKysrKyshKSEjNiQiKysrKytnISM2NyQkIisrKys/RSEiKiQiKysrK2dPISIqNyQkIisrKysheSMhIiokIisrKytTTiEiKjclNyQkIisrKytTRCEiKiQiKysrKz9QISIqNyQkIiIkIiIhJCIiJSIiITckJCIrKysrZ0chIiokIisrKyshWyQhIiotSSZTVFlMRUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSxQQVRDSE5PR1JJREc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2Ii1JJ0NPTE9VUkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYmSSRSR0JHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiIkIiorKysrIiEiKSQiIiEiIiEkIiIhIiIhLUknQ1VSVkVTRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiM3KjckJCIrKysrKyEpISM2JCErKysrK2chIzY3JCQhKysrKyshKSEjNiQiKysrKytnISM2NyQkIisrKys/RSEiKiQiKysrK2dPISIqNyQkIisrKytTRCEiKiQiKysrKz9QISIqNyQkIiIkIiIhJCIiJSIiITckJCIrKysrZ0chIiokIisrKyshWyQhIio3JCQiKysrKyF5IyEiKiQiKysrK1NOISIqNyQkIisrKysrISkhIzYkISsrKysrZyEjNi1JKVBPTFlHT05TRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiY3JjckJCIrJjMkeVNtISM2JCEraVZmOEEhIzY3JCQhKyYzJHlTbSEjNiQiK2lWZjhBISM2NyQkIitwQGYkRyIhIiokIitXZjhzUyEiKjckJCIrSnlTOzkhIiokIitjUyd5LSUhIio3JTckJCIrUVY9PDchIiokIisoKT1GJTQlISIqNyQkIisrKysrOiEiKiQiKysrKytYISIqNyQkIitpYyJHWyIhIiokIis4IkdkKyUhIiotSSZTVFlMRUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSxQQVRDSE5PR1JJREc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2Ii1JJ0NPTE9VUkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYmSSRSR0JHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiIkIiorKysrIiEiKSQiKisrKysiISIpJCIiISIiIS1JJ0NVUlZFU0c2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjNyo3JCQiKyYzJHlTbSEjNiQhK2lWZjhBISM2NyQkISsmMyR5U20hIzYkIitpVmY4QSEjNjckJCIrcEBmJEciISIqJCIrV2Y4c1MhIio3JCQiK1FWPTw3ISIqJCIrKCk9RiU0JSEiKjckJCIrKysrKzohIiokIisrKysrWCEiKjckJCIraWMiR1siISIqJCIrOCJHZCslISIqNyQkIitKeVM7OSEiKiQiK2NTJ3ktJSEiKjckJCIrJjMkeVNtISM2JCEraVZmOEEhIzYtSSlQT0xZR09OU0c2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYmNyY3JCQiKzcnKT0lWyIhIiokIitOZWNfVyEiKjckJCIrKVE2ZV4iISIqJCIrbFRWWlghIio3JCQiKylRNjMiSCEiKiQiK2xUViMzJSEiKjckJCIrNycpPXpHISIqJCIrTmVjKClSISIqNyU3JCQiK3hGaUVIISIqJCIrSSRvKUhUISIqNyQkIiIkIiIhJCIiJSIiITckJCIrQnNQakchIiokIitxOzhTUiEiKi1JJlNUWUxFRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiNJLFBBVENITk9HUklERzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiLUknQ09MT1VSRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNiZJJFJHQkc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IiIiISIiISIiIS1JJ0NVUlZFU0c2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjNyo3JCQiKzcnKT0lWyIhIiokIitOZWNfVyEiKjckJCIrKVE2ZV4iISIqJCIrbFRWWlghIio3JCQiKylRNjMiSCEiKiQiK2xUViMzJSEiKjckJCIreEZpRUghIiokIitJJG8pSFQhIio3JCQiIiQiIiEkIiIlIiIhNyQkIitCc1BqRyEiKiQiK3E7OFNSISIqNyQkIis3Jyk9ekchIiokIitOZWMoKVIhIio3JCQiKzcnKT0lWyIhIiokIitOZWNfVyEiKi1JJVRFWFRHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JzckJCIrKysrKz8hIiokIitubW1tRSEiKlEtfn5+fnZlY3Rvcn4xNiJJK0FMSUdOQUJPVkVHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiJJK0FMSUdOUklHSFRHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiItSSVGT05URzYiNiVJKkhFTFZFVElDQUc2IkklQk9MREc2IiIjNy1JJVRFWFRHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JzckJCIrbm1tbW0hIzUkIisrKysrPyEiKlErdmVjdG9yfjJ+fjYiSStBTElHTkFCT1ZFRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiSSpBTElHTkxFRlRHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiItSSVGT05URzYiNiVJKkhFTFZFVElDQUc2IkklQk9MREc2IiIjNy1JJVRFWFRHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JzckJCIrSSlRNmUiISM1JCIrIVw7TXUlISM1UTZ2ZWN0b3J+Mn5ub3JtYWxpemVkfn42IkkrQUxJR05BQk9WRUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IkkqQUxJR05MRUZURzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiLUklRk9OVEc2IjYlSSpIRUxWRVRJQ0FHNiJJJUJPTERHNiIiIzctSSVURVhURzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiNic3JCQiKysrK103ISIqJCIrKysrXVAhIipRM3Byb2plY3Rpb25+dmVjdG9yfjYiSStBTElHTkFCT1ZFRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliRzYiSSpBTElHTkxFRlRHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiItSSVGT05URzYiNiVJKkhFTFZFVElDQUc2IkklQk9MREc2IiIjNy1JJVRFWFRHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHNiI2JzckJCIrKysrXUEhIiokIisrKytdVSEiKlE4fn5vcnRob2dvbmFsfmNvbXBvbmVudH42IkkrQUxJR05BQk9WRUc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IkkrQUxJR05SSUdIVEc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2Ii1JJUZPTlRHNiI2JUkqSEVMVkVUSUNBRzYiSSVCT0xERzYiIiM3LUkoU0NBTElOR0c2IjYjSSxDT05TVFJBSU5FREc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2Ig==
<Text-field style="Heading 2" layout="Heading 2">Visualizing in 3D</Text-field> We now repeat everything in 3 dimensions. We start by defining some vectors. v3 := <1, 5, 3>; v4 := <4, 2, 6>; w3 := <c1, c2, c3>; w4 := <d1, d2, d3>; LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIpa1YwPQ== LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoaytqJw== LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIpb1piPQ== LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIpM25jPQ== Addition of vectors and scalar multiplication works the same way as in 2D. "v3+v4 ="=v3+v4; "w3+w4 =" = w3+w4; "3*v3 =" = 3*v1; "5*w4 =" = 3*w4; L1EodjMrdjR+PTYiLSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJDYjSSdjb2x1bW5HRiQ2Iy9JJCVpZEdGJCIpT0JlPQ== L1EodzMrdzR+PTYiLSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJDYjSSdjb2x1bW5HRiQ2Iy9JJCVpZEdGJCIpKVElZj0= L1EnMyp2M349NiItJkknVmVjdG9yRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YkNiNJJ2NvbHVtbkdGJDYjL0kkJWlkR0YkIilDbmo9 L1EnNSp3NH49NiItJkknVmVjdG9yRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YkNiNJJ2NvbHVtbkdGJDYjL0kkJWlkR0YkIilDInonPQ== Plotting once again shows that vector addition is performed by translating vectors. Rotate the plot to see the vectors clearly. #a block of code for adding 2 vectors in 3D. zerovec := <0,0,0>; vec1 := v3: vec2 := v4: normvec := <-1,-1,1>: vecsum := vec1+vec2: plotv1 := line(convert(zerovec,list), convert(vec1,list), normvec, linestyle=1, thickness=3, color=red): label1 := textplot3d([vec1[1]/2,vec1[2]/2,vec1[3]/2, ` vector 1`], align=RIGHT, font = [HELVETICA, BOLD, 12], color=red): plotv2 := line(convert(zerovec,list), convert(vec2,list), normvec, linestyle=1, thickness=3, color=green): label2 := textplot3d([vec2[1]/2,vec2[2]/2,vec2[3]/2, ` vector 2`], align=RIGHT, font = [HELVETICA, BOLD, 12],color=green): plotv2m := line(convert(vec1,list), convert(vecsum,list), normvec, linestyle=1, thickness=3, color=green): label2m := textplot3d([vec1[1]+vec2[1]/2, vec1[2]+vec2[2]/2, vec1[3]+vec2[3]/2, ` vector 2 moved`], align=RIGHT, font = [HELVETICA, BOLD, 12], color=green): plotvecsum := line(convert(zerovec,list), convert(vecsum,list), normvec, linestyle=1, thickness=3, color=blue): labelsum := textplot3d([(vec1[1]+vec2[1])/2, (vec1[2]+vec2[2])/2, (vec1[3]+vec2[3])/2, ` vector 1 + vector 2`], align={ABOVE,RIGHT}, font = [HELVETICA, BOLD, 12], color=blue): display({plotv1, label1, plotv2, label2, plotv2m, label2m, labelsum, plotvecsum},axes=normal,scaling=constrained); LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoQ0ZrIw== Ni0tJSpBWEVTU1RZTEVHNiMlJ05PUk1BTEctJSdDVVJWRVNHNiY3JDclJCIiISIiISQiIiEiIiEkIiIhIiIhNyUkIiImIiIhJCIiKCIiISQiIioiIiEtJSpMSU5FU1RZTEVHNiMiIiItJSpUSElDS05FU1NHNiMiIiQtJSZDT0xPUkc2JiUkUkdCRyQiIiEhIiIkIiIhISIiJCIjNSEiIi0lJ0NVUlZFU0c2JjckNyUkIiIiIiIhJCIiJiIiISQiIiQiIiE3JSQiIiYiIiEkIiIoIiIhJCIiKiIiIS0lKkxJTkVTVFlMRUc2IyIiIi0lKlRISUNLTkVTU0c2IyIiJC0lJkNPTE9SRzYmJSRSR0JHJCIiISEiIiQiIzUhIiIkIiIhISIiLSUlVEVYVEc2KDclJCIjRCEiIiQiI04hIiIkIiNYISIiUTV+dmVjdG9yfjF+K352ZWN0b3J+MjYiJStBTElHTlJJR0hURyUrQUxJR05BQk9WRUctSSVGT05URzYiNiVJKkhFTFZFVElDQUc2IkklQk9MREc2IiIjNy0lJkNPTE9SRzYmJSRSR0JHJCIiISEiIiQiIiEhIiIkIiM1ISIiLSUlVEVYVEc2JzclJCIjSSEiIiQiI2chIiIkIiNnISIiUTB+dmVjdG9yfjJ+bW92ZWQ2IiUrQUxJR05SSUdIVEctSSVGT05URzYiNiVJKkhFTFZFVElDQUc2IkklQk9MREc2IiIjNy0lJkNPTE9SRzYmJSRSR0JHJCIiISEiIiQiIzUhIiIkIiIhISIiLSUnQ1VSVkVTRzYmNyQ3JSQiIiEiIiEkIiIhIiIhJCIiISIiITclJCIiIiIiISQiIiYiIiEkIiIkIiIhLSUqTElORVNUWUxFRzYjIiIiLSUqVEhJQ0tORVNTRzYjIiIkLSUmQ09MT1JHNiYlJFJHQkckIiM1ISIiJCIiISEiIiQiIiEhIiItJSVURVhURzYnNyUkIiNdISIjJCIjRCEiIiQiIzohIiJRKn52ZWN0b3J+MTYiJStBTElHTlJJR0hURy1JJUZPTlRHNiI2JUkqSEVMVkVUSUNBRzYiSSVCT0xERzYiIiM3LSUmQ09MT1JHNiYlJFJHQkckIiM1ISIiJCIiISEiIiQiIiEhIiItJSdDVVJWRVNHNiY3JDclJCIiISIiISQiIiEiIiEkIiIhIiIhNyUkIiIlIiIhJCIiIyIiISQiIiciIiEtJSpMSU5FU1RZTEVHNiMiIiItJSpUSElDS05FU1NHNiMiIiQtJSZDT0xPUkc2JiUkUkdCRyQiIiEhIiIkIiM1ISIiJCIiISEiIi0lJVRFWFRHNic3JSQiIz8hIiIkIiM1ISIiJCIjSSEiIlEqfnZlY3Rvcn4yNiIlK0FMSUdOUklHSFRHLUklRk9OVEc2IjYlSSpIRUxWRVRJQ0FHNiJJJUJPTERHNiIiIzctJSZDT0xPUkc2JiUkUkdCRyQiIiEhIiIkIiM1ISIiJCIiISEiIi0lKFNDQUxJTkdHNiMlLENPTlNUUkFJTkVERy0lLE9SSUVOVEFUSU9ORzYkJCIjOyIiISQiMjMrKysrKytnJiEjOg==
<Text-field style="Heading 2" layout="Heading 2">Dot products and projections in 3D:</Text-field> As we did in two dimensions, we show our vectors and the unit vectors in the same directions. zerovec := <0,0,0>: vec1 := v3; vec2 := v4; magvec1 := sqrt(vec1.vec1); vec1norm := vec1*(1/magvec1); magvec2 := sqrt(vec2.vec2); vec2norm := vec2*(1/magvec2); plotv1 := line(convert(zerovec,list), convert(vec1,list), linestyle=1, thickness=2, color=red): label1 := textplot3d([vec1[1]/1.5,vec1[2]/1.5,vec1[3]/1.5, ` vector 1`], align=RIGHT, font = [HELVETICA, BOLD, 12], color=red): plotv2 := line(convert(zerovec,list), convert(vec2,list), linestyle=1, thickness=2, color=green): label2 := textplot3d([vec2[1]/1.5,vec2[2]/1.5,vec2[3]/1.5, ` vector 2`], align=RIGHT, font = [HELVETICA, BOLD, 12],color=green): plotv1n := line(convert(zerovec,list), convert(vec1norm,list),linestyle=1, thickness=5, color=blue): plotv2n := line(convert(zerovec,list), convert(vec2norm,list), linestyle=1, thickness=5, color=brown): display3d({plotv1, label1, plotv2, label2, plotv2n, plotv1n},axes=normal,scaling=constrained); LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIpa1YwPQ== LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoaytqJw== KiQiI04jIiIiIiIj LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoJz5ORA== LCQqJCIjOSMiIiIiIiNGJw== LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoRzR1Iw== NistJSpBWEVTU1RZTEVHNiMlJ05PUk1BTEctJSdDVVJWRVNHNiY3JDclJCIiISIiISQiIiEiIiEkIiIhIiIhNyUkIitTW0FYYCEjNSQiKz5DaHNFISM1JCIrZXMkeSwpISM1LSUqTElORVNUWUxFRzYjIiIiLSUqVEhJQ0tORVNTRzYjIiImLSUmQ09MT1JHNiYlJFJHQkckIjFfTW1YJSllcWshIzskIjJ3bW9WKCllcWsiISM8JCIyd21vVigpZXFrIiEjPC0lJVRFWFRHNic3JSQiMi8rK3FtbW1tIyEjOyQiMi0rK0lMTExMIiEjOyQiI1MhIiJRKn52ZWN0b3J+MjYiJStBTElHTlJJR0hURy1JJUZPTlRHNiI2JUkqSEVMVkVUSUNBRzYiSSVCT0xERzYiIiM3LSUmQ09MT1JHNiYlJFJHQkckIiIhISIiJCIjNSEiIiQiIiEhIiItJSdDVVJWRVNHNiY3JDclJCIiISIiISQiIiEiIiEkIiIhIiIhNyUkIiIiIiIhJCIiJiIiISQiIiQiIiEtJSpMSU5FU1RZTEVHNiMiIiItJSpUSElDS05FU1NHNiMiIiMtJSZDT0xPUkc2JiUkUkdCRyQiIzUhIiIkIiIhISIiJCIiISEiIi0lJVRFWFRHNic3JSQiMS0rK25tbW1tISM7JCIrTUxMTEwhIiokIiM/ISIiUSp+dmVjdG9yfjE2IiUrQUxJR05SSUdIVEctSSVGT05URzYiNiVJKkhFTFZFVElDQUc2IkklQk9MREc2IiIjNy0lJkNPTE9SRzYmJSRSR0JHJCIjNSEiIiQiIiEhIiIkIiIhISIiLSUnQ1VSVkVTRzYmNyQ3JSQiIiEiIiEkIiIhIiIhJCIiISIiITclJCIiJSIiISQiIiMiIiEkIiInIiIhLSUqTElORVNUWUxFRzYjIiIiLSUqVEhJQ0tORVNTRzYjIiIjLSUmQ09MT1JHNiYlJFJHQkckIiIhISIiJCIjNSEiIiQiIiEhIiItJSdDVVJWRVNHNiY3JDclJCIiISIiISQiIiEiIiEkIiIhIiIhNyUkIis0JjMucCIhIzUkIitdRGFeJSkhIzUkIitHYiM0MiYhIzUtJSpMSU5FU1RZTEVHNiMiIiItJSpUSElDS05FU1NHNiMiIiYtJSZDT0xPUkc2JiUkUkdCRyQiIiEhIiIkIiIhISIiJCIjNSEiIi0lKFNDQUxJTkdHNiMlLENPTlNUUkFJTkVERy0lLE9SSUVOVEFUSU9ORzYkJCIjWiIiISQiMi0rKysrKys4IiEjOQ== Repeating the process we used in 2D, we normalize before projecting. zerovec := <0,0,0>: vec1 := v3; vec2 := v4; magvec2 := sqrt(vec2.vec2); vec2norm := vec2*(1/magvec2); dotproduct := vec1. vec2norm; projvec := dotproduct*vec2norm; magvec2 := sqrt(vec2.vec2); plotv1 := line(convert(zerovec,list), convert(vec1,list), linestyle=1, thickness=2, color=red): label1 := textplot3d([vec1[1]/1.5,vec1[2]/1.5,vec1[3]/1.5, ` vector 1`], align=RIGHT, font = [HELVETICA, BOLD, 12], color=red): plotv2 := line(convert(zerovec,list), convert(vec2,list), linestyle=1, thickness=2, color=blue): label2 := textplot3d([vec2[1]/1.2,vec2[2]/1.2,vec2[3]/1.2, ` vector 2`], align=RIGHT, font = [HELVETICA, BOLD, 12], color=blue): plotv2n := line(convert(zerovec,list), convert(vec2norm,list), linestyle=1, thickness=6, color=brown): label2n := textplot3d([vec2norm[1]/1.5,vec2norm[2]/1.5,vec2norm[3]/1.5, ` vector 2 normalized`], align=RIGHT, font = [HELVETICA, BOLD, 12], color=brown): plotvperp := line(convert(vec1,list), convert(projvec,list), linestyle=1, thickness=2, color=black): plotvproj := line(convert(zerovec,list), convert(projvec,list), linestyle=1, thickness=4, color=green): labelproj := textplot3d([projvec[1]/1.5,projvec[2]/1.5,projvec[3]/1.5, ` projection vector`], align=RIGHT, font = [HELVETICA, BOLD, 12],color=green): labelorth := textplot3d([projvec[1]+(vec1[1]-projvec[1])/2,projvec[2]+(vec1[2]-projvec[2])/2,projvec[3]+(vec1[3]-projvec[3])/2, ` orthogonal component `], align=RIGHT, font = [HELVETICA, BOLD, 12],color=black): display3d({plotv1, label1, plotv2, label2,plotv2n, label2n, plotvproj, labelproj, plotvperp,labelorth}, axes=normal,scaling=constrained); LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIpa1YwPQ== LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoaytqJw== LCQqJCIjOSMiIiIiIiNGJw== LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoazQxKA== LCQqJCIjOSMiIiIiIiMjIiIpIiIo LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIpY2xLPQ== LCQqJCIjOSMiIiIiIiNGJw== Ni8tJSpBWEVTU1RZTEVHNiMlJ05PUk1BTEctJSdDVVJWRVNHNiY3JDclJCIiIiIiISQiIiYiIiEkIiIkIiIhNyUkIisnRzlkRyMhIiokIitWciZHOSIhIiokIitIOWRHTSEiKi0lKkxJTkVTVFlMRUc2IyIiIi0lKlRISUNLTkVTU0c2IyIiIy0lJkNPTE9SRzYmJSRSR0JHJCIiISEiIiQiIiEhIiIkIiIhISIiLSUlVEVYVEc2JzclJCIrVnImR2siISIqJCIrciZHOTIkISIqJCIyLysrU3ImRzlLISM7UTp+fn5+b3J0aG9nb25hbH5jb21wb25lbnR+NiIlK0FMSUdOUklHSFRHLUklRk9OVEc2IjYlSSpIRUxWRVRJQ0FHNiJJJUJPTERHNiIiIzctJSZDT0xPUkc2JiUkUkdCRyQiIiEhIiIkIiIhISIiJCIiISEiIi0lJ0NVUlZFU0c2JjckNyUkIiIhIiIhJCIiISIiISQiIiEiIiE3JSQiIiIiIiEkIiImIiIhJCIiJCIiIS0lKkxJTkVTVFlMRUc2IyIiIi0lKlRISUNLTkVTU0c2IyIiIy0lJkNPTE9SRzYmJSRSR0JHJCIjNSEiIiQiIiEhIiIkIiIhISIiLSUnQ1VSVkVTRzYmNyQ3JSQiIiEiIiEkIiIhIiIhJCIiISIiITclJCIrJ0c5ZEcjISIqJCIrVnImRzkiISIqJCIrSDlkR00hIiotJSpMSU5FU1RZTEVHNiMiIiItJSpUSElDS05FU1NHNiMiIiUtJSZDT0xPUkc2JiUkUkdCRyQiIiEhIiIkIiM1ISIiJCIiISEiIi0lJ0NVUlZFU0c2JjckNyUkIiIhIiIhJCIiISIiISQiIiEiIiE3JSQiK1NbQVhgISM1JCIrPkNoc0UhIzUkIitlcyR5LCkhIzUtJSpMSU5FU1RZTEVHNiMiIiItJSpUSElDS05FU1NHNiMiIictJSZDT0xPUkc2JiUkUkdCRyQiMV9NbVglKWVxayEjOyQiMndtb1YoKWVxayIhIzwkIjJ3bW9WKCllcWsiISM8LSUlVEVYVEc2JzclJCIrQyY0UV8iISIqJCIqaVohPnchIiokIisnRzlkRyMhIipRM35wcm9qZWN0aW9ufnZlY3RvcjYiJStBTElHTlJJR0hURy1JJUZPTlRHNiI2JUkqSEVMVkVUSUNBRzYiSSVCT0xERzYiIiM3LSUmQ09MT1JHNiYlJFJHQkckIiIhISIiJCIjNSEiIiQiIiEhIiItJSVURVhURzYnNyUkIitMTExMTCEiKiQiK25tbW07ISIqJCIjXSEiIlEqfnZlY3Rvcn4yNiIlK0FMSUdOUklHSFRHLUklRk9OVEc2IjYlSSpIRUxWRVRJQ0FHNiJJJUJPTERHNiIiIzctJSZDT0xPUkc2JiUkUkdCRyQiIiEhIiIkIiIhISIiJCIjNSEiIi0lJ0NVUlZFU0c2JjckNyUkIiIhIiIhJCIiISIiISQiIiEiIiE3JSQiIiUiIiEkIiIjIiIhJCIiJyIiIS0lKkxJTkVTVFlMRUc2IyIiIi0lKlRISUNLTkVTU0c2IyIiIy0lJkNPTE9SRzYmJSRSR0JHJCIiISEiIiQiIiEhIiIkIiM1ISIiLSUlVEVYVEc2JzclJCIxLSsrbm1tbW0hIzskIitNTExMTCEiKiQiIz8hIiJRKn52ZWN0b3J+MTYiJStBTElHTlJJR0hURy1JJUZPTlRHNiI2JUkqSEVMVkVUSUNBRzYiSSVCT0xERzYiIiM3LSUmQ09MT1JHNiYlJFJHQkckIiM1ISIiJCIiISEiIiQiIiEhIiItJSVURVhURzYnNyUkIitFS1tqTiEjNSQiKzg7dSJ5IiEjNSQiKiVbQVhgISIqUTV+dmVjdG9yfjJ+bm9ybWFsaXplZDYiJStBTElHTlJJR0hURy1JJUZPTlRHNiI2JUkqSEVMVkVUSUNBRzYiSSVCT0xERzYiIiM3LSUmQ09MT1JHNiYlJFJHQkckIjFfTW1YJSllcWshIzskIjJ3bW9WKCllcWsiISM8JCIyd21vVigpZXFrIiEjPC0lKFNDQUxJTkdHNiMlLENPTlNUUkFJTkVERy0lLE9SSUVOVEFUSU9ORzYkJCIjVyIiISQiJE0iIiIh
<Text-field style="Heading 2" layout="Heading 2">Exercise</Text-field> 1) Adapt the code above to illustrate the projection of the vector <-2,5,-6> onto the vector <3,-3,4>. What can you say about the direction of the projection vector relative to the vector projected onto in this case?
<Text-field style="Heading 2" layout="Heading 2">The cross product of vectors in 3D:</Text-field> The syntax for the cross product of two vectors in R3 is simple. v3:= <-1, 3, -2>; v4 := <3, -2, 1>; "v3 x v4 =" = CrossProduct(v3, v4); LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoP3RgJw== LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIpLyhIKj0= L1EqdjN+eH52NH49NiItJkknVmVjdG9yRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YkNiNJJ2NvbHVtbkdGJDYjL0kkJWlkR0YkIilXYl09 We check that the cross product appears to be perpendicular to both vectors v3 and v4. zerovec := <0,0,0>: vec1 := v3; vec2 := v4; cornvec:= vec1+vec2: crossvec := CrossProduct(vec1, vec2); plotv1 := line(convert(zerovec,list), convert(vec1,list), linestyle=1, thickness=3, color=red): label1 := textplot3d([vec1[1]/2,vec1[2]/2,vec1[3]/2, ` vector 1`], align=RIGHT, font = [HELVETICA, BOLD, 12], color=red): plotv2 := line(convert(zerovec,list), convert(vec2,list), linestyle=1, thickness=3, color=brown): label2 := textplot3d([vec2[1]/2,vec2[2]/2,vec2[3]/2, ` vector 2`], align=RIGHT, font = [HELVETICA, BOLD, 12], color=brown): plotvcross := line(convert(zerovec,list), convert(crossvec,list), linestyle=1, thickness=3, color=blue): labelcross := textplot3d([crossvec[1]/1.5,crossvec[2]/1.5,crossvec[3]/1.5, ` vector 1 cross vector 2`], align=RIGHT, font = [HEL