Visualizing vectors in 2D and 3D Worksheet by Mike May, S.J.- maymk@slu.edu, \302\2512006 As we have been looking at vectors, how they are added, normalized vectors, dot and cross products, it seems worthwhile to look at a Maple visualization of everything we have been doing. First want to load the appropriate commands. The commands for dot and cross product are in the LinearAlgebra package. The commands for plotting vectors are in the plottools package. We also need the display command from the plots package. (Restart cleans up in case we were already running a Maple worksheet.) restart: with(LinearAlgebra): with(plottools): with(plots):
<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>; LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoczFYIw== LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoP0l4Iw== LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoSyhvQg== LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoSypwQg== 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; L1EmdjErdjI2Ii0mSSdWZWN0b3JHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiQ2I0knY29sdW1uR0YkNiMvSSQlaWRHRiQiKE91Ikg= L1EmdzErdzI2Ii0mSSdWZWN0b3JHNiQlKnByb3RlY3RlZEdJKF9zeXNsaWJHRiQ2I0knY29sdW1uR0YkNiMvSSQlaWRHRiQiKHdoJ0g= L1ElMyp2MTYiLSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJDYjSSdjb2x1bW5HRiQ2Iy9JJCVpZEdGJCIoSyxQIw== L1ElNSp3MjYiLSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJDYjSSdjb2x1bW5HRiQ2Iy9JJCVpZEdGJCIoLyQqKkg= When we try to normalize a vector we have to make a technical note. Like us, Maple has a tendency to leave things like square roots outside the vector. We will use code that forces it to multiply through by the radical. (You don't need to understand the code. We are only making the comment in case you are interested in why it gets used later on.) (1/sqrt(5))*v1; convert(evalm((1/sqrt(5))*v1),list); LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoXy1QIw== NyQsJCokIiImIyIiIiIiIyNGJ0YlLCRGJCNGKEYl Visualizing the vectors and the sum takes a bit more work. The following block of code shows the addition clearly. #a block of code to look at two vectors and their sum zerovec := <0,0>: vec1 := <1,2>: vec2 := <4, -3>: vecsum := vec1+vec2; plotv1 := arrow(zerovec, vec1, width=.1, head_length=.4, head_width=.2, color=red): label1 := textplot([vec1[1]/2,vec1[2]/2, `vector 1`], align={ABOVE,RIGHT}, font = [HELVETICA, BOLD, 12]): plotv2 := arrow(zerovec, vec2, width=.1, head_length=.4, head_width=.2, color=green): label2 := textplot([vec2[1]/2,vec2[2]/2, `vector 2`], align={ABOVE,RIGHT}, font = [HELVETICA, BOLD, 12]): plotv2m := arrow(vec1, vec2, width=.1, head_length=.4, head_width=.2, color=green): label2m := textplot([vec1[1]+vec2[1]/2,vec1[2]+vec2[2]/2, `vector 2 moved`], align={ABOVE,RIGHT}, font = [HELVETICA, BOLD, 12]): plotvecsum := arrow(zerovec, vecsum, width=.1, head_length=.4, head_width=.2, 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); LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoXyw9JA== NjEtJSlQT0xZR09OU0c2JjcmNyQkIitjZjhzVyEjNiQhK3l6MU9BISM2NyQkIStjZjhzVyEjNiQiK3l6MU9BISM2NyQkIitBPyRSdyghIzUkIisvKSplazshIio3JCQiKzkjZiRlJykhIzUkIitXJW8pPjshIio3JTckJCIrRiU9bkooISM1JCIrJFtdcG8iISIqNyQkIiM1ISIiJCIjPyEiIjckJCIrNEdkMCIqISM1JCIra3hdKGYiISIqLSUmQ09MT1JHNiYlJFJHQkckIiM1ISIiJCIiISEiIiQiIiEhIiItJSZTVFlMRUc2IyUsUEFUQ0hOT0dSSURHLSUnQ1VSVkVTRzYjNyo3JCQiK2NmOHNXISM2JCEreXoxT0EhIzY3JCQhK2NmOHNXISM2JCIreXoxT0EhIzY3JCQiK0E/JFJ3KCEjNSQiKy8pKmVrOyEiKjckJCIrRiU9bkooISM1JCIrJFtdcG8iISIqNyQkIiM1ISIiJCIjPyEiIjckJCIrNEdkMCIqISM1JCIra3hdKGYiISIqNyQkIis5I2YkZScpISM1JCIrVyVvKT47ISIqNyQkIitjZjhzVyEjNiQhK3l6MU9BISM2LSUlVEVYVEc2JzckJCIiJiEiIiQiIzUhIiItJSlfVFlQRVNFVEc2Iy1JI21pRzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliRzYiNjVRKXZlY3Rvcn4xNiIvJSdmYW1pbHlHUSpIZWx2ZXRpY2E2Ii8lJXNpemVHUSMxMjYiLyUlYm9sZEdRJmZhbHNlNiIvJSdpdGFsaWNHUSV0cnVlNiIvJSp1bmRlcmxpbmVHUSZmYWxzZTYiLyUqc3Vic2NyaXB0R1EmZmFsc2U2Ii8lLHN1cGVyc2NyaXB0R1EmZmFsc2U2Ii8lK2ZvcmVncm91bmRHUShbMCwwLDBdNiIvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XTYiLyUnb3BhcXVlR1EmZmFsc2U2Ii8lK2V4ZWN1dGFibGVHUSZmYWxzZTYiLyUpcmVhZG9ubHlHUSZmYWxzZTYiLyUpY29tcG9zZWRHUSZmYWxzZTYiLyUqY29udmVydGVkR1EmZmFsc2U2Ii8lK2ltc2VsZWN0ZWRHUSZmYWxzZTYiLyUscGxhY2Vob2xkZXJHUSZmYWxzZTYiLyU2c2VsZWN0aW9uLXBsYWNlaG9sZGVyR1EmZmFsc2U2Ii8lLG1hdGh2YXJpYW50R1EnaXRhbGljNiItJSVGT05URzYlJSpIZWx2ZXRpY2FHJSVCT0xERyIjNyUrQUxJR05SSUdIVEclK0FMSUdOQUJPVkVHLSUpUE9MWUdPTlNHNiY3JjckJCEiJCEiIyQhIiUhIiM3JCQiIiQhIiMkIiIlISIjNyQkIiRyJCEiIyQhJHMjISIjNyQkIiRsJCEiIyQhI0chIiI3JTckJCIkdSQhIiMkISRvIyEiIzckJCIjUyEiIiQhI0khIiI3JCQiJGkkISIjJCEkJUchIiMtJSZDT0xPUkc2JiUkUkdCRyQiIiEhIiIkIiM1ISIiJCIiISEiIi0lJlNUWUxFRzYjJSxQQVRDSE5PR1JJREctJSdDVVJWRVNHNiM3KjckJCEiJCEiIyQhIiUhIiM3JCQiIiQhIiMkIiIlISIjNyQkIiRyJCEiIyQhJHMjISIjNyQkIiR1JCEiIyQhJG8jISIjNyQkIiNTISIiJCEjSSEiIjckJCIkaSQhIiMkISQlRyEiIzckJCIkbCQhIiMkISNHISIiNyQkISIkISIjJCEiJSEiIy0lJVRFWFRHNic3JCQiIz8hIiIkISM6ISIiLSUpX1RZUEVTRVRHNiMtSSNtaUc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkc2IjY1USl2ZWN0b3J+MjYiLyUnZmFtaWx5R1EqSGVsdmV0aWNhNiIvJSVzaXplR1EjMTI2Ii8lJWJvbGRHUSZmYWxzZTYiLyUnaXRhbGljR1EldHJ1ZTYiLyUqdW5kZXJsaW5lR1EmZmFsc2U2Ii8lKnN1YnNjcmlwdEdRJmZhbHNlNiIvJSxzdXBlcnNjcmlwdEdRJmZhbHNlNiIvJStmb3JlZ3JvdW5kR1EoWzAsMCwwXTYiLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV02Ii8lJ29wYXF1ZUdRJmZhbHNlNiIvJStleGVjdXRhYmxlR1EmZmFsc2U2Ii8lKXJlYWRvbmx5R1EmZmFsc2U2Ii8lKWNvbXBvc2VkR1EmZmFsc2U2Ii8lKmNvbnZlcnRlZEdRJmZhbHNlNiIvJStpbXNlbGVjdGVkR1EmZmFsc2U2Ii8lLHBsYWNlaG9sZGVyR1EmZmFsc2U2Ii8lNnNlbGVjdGlvbi1wbGFjZWhvbGRlckdRJmZhbHNlNiIvJSxtYXRodmFyaWFudEdRJ2l0YWxpYzYiLSUlRk9OVEc2JSUqSGVsdmV0aWNhRyUlQk9MREciIzclK0FMSUdOUklHSFRHJStBTElHTkFCT1ZFRy0lKVBPTFlHT05TRzYmNyY3JCQiIygqISIjJCIkJz4hIiM3JCQiJC4iISIjJCIkLyMhIiM3JCQiJHIlISIjJCEjcyEiIzckJCIkbCUhIiMkISIpISIiNyU3JCQiJHUlISIjJCEjbyEiIzckJCIjXSEiIiQhIzUhIiI3JCQiJGklISIjJCEjJSkhIiMtJSZDT0xPUkc2JiUkUkdCRyQiIiEhIiIkIiM1ISIiJCIiISEiIi0lJlNUWUxFRzYjJSxQQVRDSE5PR1JJREctJSdDVVJWRVNHNiM3KjckJCIjKCohIiMkIiQnPiEiIzckJCIkLiIhIiMkIiQvIyEiIzckJCIkciUhIiMkISNzISIjNyQkIiR1JSEiIyQhI28hIiM3JCQiI10hIiIkISM1ISIiNyQkIiRpJSEiIyQhIyUpISIjNyQkIiRsJSEiIyQhIikhIiI3JCQiIygqISIjJCIkJz4hIiMtJSVURVhURzYnNyQkIiNJISIiJCIiJiEiIi0lKV9UWVBFU0VURzYjLUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHNiI2NVEvdmVjdG9yfjJ+bW92ZWQ2Ii8lJ2ZhbWlseUdRKkhlbHZldGljYTYiLyUlc2l6ZUdRIzEyNiIvJSVib2xkR1EmZmFsc2U2Ii8lJ2l0YWxpY0dRJXRydWU2Ii8lKnVuZGVybGluZUdRJmZhbHNlNiIvJSpzdWJzY3JpcHRHUSZmYWxzZTYiLyUsc3VwZXJzY3JpcHRHUSZmYWxzZTYiLyUrZm9yZWdyb3VuZEdRKFswLDAsMF02Ii8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdNiIvJSdvcGFxdWVHUSZmYWxzZTYiLyUrZXhlY3V0YWJsZUdRJmZhbHNlNiIvJSlyZWFkb25seUdRJmZhbHNlNiIvJSljb21wb3NlZEdRJmZhbHNlNiIvJSpjb252ZXJ0ZWRHUSZmYWxzZTYiLyUraW1zZWxlY3RlZEdRJmZhbHNlNiIvJSxwbGFjZWhvbGRlckdRJmZhbHNlNiIvJTZzZWxlY3Rpb24tcGxhY2Vob2xkZXJHUSZmYWxzZTYiLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWM2Ii0lJUZPTlRHNiUlKkhlbHZldGljYUclJUJPTERHIiM3JStBTElHTlJJR0hURyUrQUxJR05BQk9WRUctJSlQT0xZR09OU0c2JjcmNyQkIStibiFlISkqISM3JCEreUwhSCFcISM2NyQkIitibiFlISkqISM3JCIreUwhSCFcISM2NyQkIitQTmQ8WSEiKiQhK0FeQ0QoKSEjNTckJCIrQj4nemYlISIqJCErKHpEZXEqISM1NyU3JCQiK1YkenRpJSEiKiQhKyV5YVxCKSEjNTckJCIjXSEiIiQhIzUhIiI3JCQiKztoOillJSEiKiQhKzk7aD41ISIqLSUmQ09MT1JHNiYlJFJHQkckIiIhISIiJCIiISEiIiQiIzUhIiItJSZTVFlMRUc2IyUsUEFUQ0hOT0dSSURHLSUnQ1VSVkVTRzYjNyo3JCQhK2JuIWUhKSohIzckISt5TCFIIVwhIzY3JCQiK2JuIWUhKSohIzckIit5TCFIIVwhIzY3JCQiK1BOZDxZISIqJCErQV5DRCgpISM1NyQkIitWJHp0aSUhIiokISsleWFcQikhIzU3JCQiI10hIiIkISM1ISIiNyQkIis7aDopZSUhIiokISs5O2g+NSEiKjckJCIrQj4nemYlISIqJCErKHpEZXEqISM1NyQkIStibiFlISkqISM3JCEreUwhSCFcISM2LSUlVEVYVEc2JzckJCIjRCEiIiQhIiYhIiItJSlfVFlQRVNFVEc2Iy1JI21pRzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliRzYiNjVRNHZlY3Rvcn4xfit+dmVjdG9yfjI2Ii8lJ2ZhbWlseUdRKkhlbHZldGljYTYiLyUlc2l6ZUdRIzEyNiIvJSVib2xkR1EmZmFsc2U2Ii8lJ2l0YWxpY0dRJXRydWU2Ii8lKnVuZGVybGluZUdRJmZhbHNlNiIvJSpzdWJzY3JpcHRHUSZmYWxzZTYiLyUsc3VwZXJzY3JpcHRHUSZmYWxzZTYiLyUrZm9yZWdyb3VuZEdRKFswLDAsMF02Ii8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdNiIvJSdvcGFxdWVHUSZmYWxzZTYiLyUrZXhlY3V0YWJsZUdRJmZhbHNlNiIvJSlyZWFkb25seUdRJmZhbHNlNiIvJSljb21wb3NlZEdRJmZhbHNlNiIvJSpjb252ZXJ0ZWRHUSZmYWxzZTYiLyUraW1zZWxlY3RlZEdRJmZhbHNlNiIvJSxwbGFjZWhvbGRlckdRJmZhbHNlNiIvJTZzZWxlY3Rpb24tcGxhY2Vob2xkZXJHUSZmYWxzZTYiLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWM2Ii0lJUZPTlRHNiUlKkhlbHZldGljYUclJUJPTERHIiM3JStBTElHTlJJR0hURyUrQUxJR05BQk9WRUctJSpBWEVTU1RZTEVHNiMlJ05PUk1BTEctJShTQ0FMSU5HRzYjJSxDT05TVFJBSU5FREctJSVST09URzYnLSUpQk9VTkRTX1hHNiMkIiQhRyEiIi0lKUJPVU5EU19ZRzYjJCIkKyMhIiItJS1CT1VORFNfV0lEVEhHNiMkIiVJTyEiIi0lLkJPVU5EU19IRUlHSFRHNiMkIiUrTyEiIi0lKUNISUxEUkVORzYi
<Text-field style="Heading 2" layout="Heading 2">Dot products and projections in 2D:</Text-field> Next we want to look at dot products. First we look at our vectors and unit vectors in the same directions. 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, width=.1, head_length=.4, head_width=.2, color=red): label1 := textplot([vec1[1]/2,vec1[2]/2, `vector 1`], align={ABOVE,RIGHT}, font = [HELVETICA, BOLD, 12]): plotv2 := arrow(zerovec, vec2, width=.1, head_length=.4, head_width=.2, color=yellow): label2 := textplot([vec2[1]/2,vec2[2]/2, `vector 2`], align={ABOVE,RIGHT}, font = [HELVETICA, BOLD, 12]): plotv1n := arrow(zerovec, vec1norm, width=.15, head_length=.4, head_width=.2, color=blue): plotv2n := arrow(zerovec, vec2norm, width=.15, head_length=.4, head_width=.2, color=brown): display({plotv1, label1, plotv2, label2, plotv2n, plotv1n}, scaling=constrained); LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoczFYIw== LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoP0l4Iw== KiQiIiYjIiIiIiIj LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoIVs/Xg== IiIm LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoc1E6Jg== Ni8tJSlQT0xZR09OU0c2JjcmNyQkISInISIjJCEjWCEiJDckJCIiJyEiIyQiI1ghIiQ3JCQiI1UhIiMkISROJSEiJDckJCIiJCEiIiQhJEQmISIkNyU3JCQiI1chIiMkISNVISIjNyQkIiInISIiJCEiKSEiIjckJCIjRyEiIyQhI2EhIiMtJSZDT0xPUkc2JiUkUkdCRyQiMV9NbVglKWVxayEjOyQiMndtb1YoKWVxayIhIzwkIjJ3bW9WKCllcWsiISM8LSUmU1RZTEVHNiMlLFBBVENITk9HUklERy0lJ0NVUlZFU0c2IzcqNyQkISInISIjJCEjWCEiJDckJCIiJyEiIyQiI1ghIiQ3JCQiI1UhIiMkISROJSEiJDckJCIjVyEiIyQhI1UhIiM3JCQiIichIiIkISIpISIiNyQkIiNHISIjJCEjYSEiIzckJCIiJCEiIiQhJEQmISIkNyQkISInISIjJCEjWCEiJC0lKVBPTFlHT05TRzYmNyY3JCQiK2NmOHNXISM2JCEreXoxT0EhIzY3JCQhK2NmOHNXISM2JCIreXoxT0EhIzY3JCQiK0E/JFJ3KCEjNSQiKy8pKmVrOyEiKjckJCIrOSNmJGUnKSEjNSQiK1clbyk+OyEiKjclNyQkIitGJT1uSighIzUkIiskW11wbyIhIio3JCQiIzUhIiIkIiM/ISIiNyQkIis0R2QwIiohIzUkIitreF0oZiIhIiotJSZDT0xPUkc2JiUkUkdCRyQiIzUhIiIkIiIhISIiJCIiISEiIi0lJlNUWUxFRzYjJSxQQVRDSE5PR1JJREctJSdDVVJWRVNHNiM3KjckJCIrY2Y4c1chIzYkISt5ejFPQSEjNjckJCErY2Y4c1chIzYkIit5ejFPQSEjNjckJCIrQT8kUncoISM1JCIrLykqZWs7ISIqNyQkIitGJT1uSighIzUkIiskW11wbyIhIio3JCQiIzUhIiIkIiM/ISIiNyQkIis0R2QwIiohIzUkIitreF0oZiIhIio3JCQiKzkjZiRlJykhIzUkIitXJW8pPjshIio3JCQiK2NmOHNXISM2JCEreXoxT0EhIzYtJSVURVhURzYnNyQkIiImISIiJCIjNSEiIi0lKV9UWVBFU0VURzYjLUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHNiI2NVEpdmVjdG9yfjE2Ii8lJ2ZhbWlseUdRKkhlbHZldGljYTYiLyUlc2l6ZUdRIzEyNiIvJSVib2xkR1EmZmFsc2U2Ii8lJ2l0YWxpY0dRJXRydWU2Ii8lKnVuZGVybGluZUdRJmZhbHNlNiIvJSpzdWJzY3JpcHRHUSZmYWxzZTYiLyUsc3VwZXJzY3JpcHRHUSZmYWxzZTYiLyUrZm9yZWdyb3VuZEdRKFswLDAsMF02Ii8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdNiIvJSdvcGFxdWVHUSZmYWxzZTYiLyUrZXhlY3V0YWJsZUdRJmZhbHNlNiIvJSlyZWFkb25seUdRJmZhbHNlNiIvJSljb21wb3NlZEdRJmZhbHNlNiIvJSpjb252ZXJ0ZWRHUSZmYWxzZTYiLyUraW1zZWxlY3RlZEdRJmZhbHNlNiIvJSxwbGFjZWhvbGRlckdRJmZhbHNlNiIvJTZzZWxlY3Rpb24tcGxhY2Vob2xkZXJHUSZmYWxzZTYiLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWM2Ii0lJUZPTlRHNiUlKkhlbHZldGljYUclJUJPTERHIiM3JStBTElHTlJJR0hURyUrQUxJR05BQk9WRUctJSlQT0xZR09OU0c2JjcmNyQkIiokUj8zbiEjNSQhK20+NWFMISM2NyQkISokUj8zbiEjNSQiK20+NWFMISM2NyQkIit6Nlk3PyEjNSQiK1VMKD5xJiEjNTckJCIrbD41YUwhIzUkIitbSDpKXSEjNTclNyQkIisiUWEpKXkiISM1JCIqdXdQImUhIio3JCQiK2FmOHNXISM1JCIrMz5GVyopISM1NyQkIitqKDN4ZCQhIzUkIipiXCQ+XCEiKi0lJkNPTE9SRzYmJSRSR0JHJCIiISEiIiQiIiEhIiIkIiM1ISIiLSUmU1RZTEVHNiMlLFBBVENITk9HUklERy0lJ0NVUlZFU0c2IzcqNyQkIiokUj8zbiEjNSQhK20+NWFMISM2NyQkISokUj8zbiEjNSQiK20+NWFMISM2NyQkIit6Nlk3PyEjNSQiK1VMKD5xJiEjNTckJCIrIlFhKSl5IiEjNSQiKnV3UCJlISIqNyQkIithZjhzVyEjNSQiKzM+RlcqKSEjNTckJCIraigzeGQkISM1JCIqYlwkPlwhIio3JCQiK2w+NWFMISM1JCIrW0g6Sl0hIzU3JCQiKiRSPzNuISM1JCErbT41YUwhIzYtJSlQT0xZR09OU0c2JjcmNyQkISIlISIjJCEiJCEiIzckJCIiJSEiIyQiIiQhIiM3JCQiI0chIiIkISRsJCEiIzckJCIkcyMhIiMkISRyJCEiIzclNyQkIiQlRyEiIyQhJGkkISIjNyQkIiNJISIiJCEjUyEiIjckJCIkbyMhIiMkISR1JCEiIy0lJkNPTE9SRzYmJSRSR0JHJCIjNSEiIiQiIzUhIiIkIiIhISIiLSUmU1RZTEVHNiMlLFBBVENITk9HUklERy0lJ0NVUlZFU0c2IzcqNyQkISIlISIjJCEiJCEiIzckJCIiJSEiIyQiIiQhIiM3JCQiI0chIiIkISRsJCEiIzckJCIkJUchIiMkISRpJCEiIzckJCIjSSEiIiQhI1MhIiI3JCQiJG8jISIjJCEkdSQhIiM3JCQiJHMjISIjJCEkciQhIiM3JCQhIiUhIiMkISIkISIjLSUlVEVYVEc2JzckJCIjOiEiIiQhIz8hIiItJSlfVFlQRVNFVEc2Iy1JI21pRzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliRzYiNjVRKXZlY3Rvcn4yNiIvJSdmYW1pbHlHUSpIZWx2ZXRpY2E2Ii8lJXNpemVHUSMxMjYiLyUlYm9sZEdRJmZhbHNlNiIvJSdpdGFsaWNHUSV0cnVlNiIvJSp1bmRlcmxpbmVHUSZmYWxzZTYiLyUqc3Vic2NyaXB0R1EmZmFsc2U2Ii8lLHN1cGVyc2NyaXB0R1EmZmFsc2U2Ii8lK2ZvcmVncm91bmRHUShbMCwwLDBdNiIvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XTYiLyUnb3BhcXVlR1EmZmFsc2U2Ii8lK2V4ZWN1dGFibGVHUSZmYWxzZTYiLyUpcmVhZG9ubHlHUSZmYWxzZTYiLyUpY29tcG9zZWRHUSZmYWxzZTYiLyUqY29udmVydGVkR1EmZmFsc2U2Ii8lK2ltc2VsZWN0ZWRHUSZmYWxzZTYiLyUscGxhY2Vob2xkZXJHUSZmYWxzZTYiLyU2c2VsZWN0aW9uLXBsYWNlaG9sZGVyR1EmZmFsc2U2Ii8lLG1hdGh2YXJpYW50R1EnaXRhbGljNiItJSVGT05URzYlJSpIZWx2ZXRpY2FHJSVCT0xERyIjNyUrQUxJR05SSUdIVEclK0FMSUdOQUJPVkVHLSUqQVhFU1NUWUxFRzYjJSdOT1JNQUxHLSUoU0NBTElOR0c2IyUsQ09OU1RSQUlORURHLSUlUk9PVEc2Jy0lKUJPVU5EU19YRzYjJCIlXTUhIiItJSlCT1VORFNfWUc2IyQiJD8iISIiLSUtQk9VTkRTX1dJRFRIRzYjJCIlKz4hIiItJS5CT1VORFNfSEVJR0hURzYjJCIlXVAhIiItJSlDSElMRFJFTkc2Ig== For computing projections, in this class we will always start by normalizing the vector we are projecting onto. (That means we divide it by its length.) That means the projection will be the 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, width=.1, head_length=.4, head_width=.2, color=red): plotvproj := arrow(zerovec, projvec, width=.1, head_length=.4, head_width=.14, color=yellow): plotv2n := arrow(zerovec, vec2norm, width=.1, head_length=.4, head_width=.22, color=green): label1 := textplot([vec1[1]/2,vec1[2]/2, `vector 1`], align={ABOVE,RIGHT}, font = [HELVETICA, BOLD, 12]): label2 := textplot([vec2norm[1]/2,vec2norm[2]/2, `vector 2 normalized`], align={ABOVE,RIGHT}, font = [HELVETICA, BOLD, 12]): labelproj := textplot([projvec[1]/2,projvec[2]/2, `projection vector`], align={ABOVE,RIGHT}, font = [HELVETICA, BOLD, 12]): display({plotv1, plotvproj, plotv2n, label1, label2, labelproj}, scaling=constrained); LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoI1xvQg== LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoO1tLIw== KiQiIzUjIiIiIiIj LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoW1dVIw== LCQqJCIjNSMiIiIiIiMjIiIkRic= LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoJSkpUUY= Ni4tJSVURVhURzYnNyQkIiokKVE2ZSIhIiokIipcO011JSEiKi0lKV9UWVBFU0VURzYjLUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHNiI2NVE0dmVjdG9yfjJ+bm9ybWFsaXplZDYiLyUnZmFtaWx5R1EqSGVsdmV0aWNhNiIvJSVzaXplR1EjMTI2Ii8lJWJvbGRHUSZmYWxzZTYiLyUnaXRhbGljR1EldHJ1ZTYiLyUqdW5kZXJsaW5lR1EmZmFsc2U2Ii8lKnN1YnNjcmlwdEdRJmZhbHNlNiIvJSxzdXBlcnNjcmlwdEdRJmZhbHNlNiIvJStmb3JlZ3JvdW5kR1EoWzAsMCwwXTYiLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV02Ii8lJ29wYXF1ZUdRJmZhbHNlNiIvJStleGVjdXRhYmxlR1EmZmFsc2U2Ii8lKXJlYWRvbmx5R1EmZmFsc2U2Ii8lKWNvbXBvc2VkR1EmZmFsc2U2Ii8lKmNvbnZlcnRlZEdRJmZhbHNlNiIvJStpbXNlbGVjdGVkR1EmZmFsc2U2Ii8lLHBsYWNlaG9sZGVyR1EmZmFsc2U2Ii8lNnNlbGVjdGlvbi1wbGFjZWhvbGRlckdRJmZhbHNlNiIvJSxtYXRodmFyaWFudEdRJ2l0YWxpYzYiLSUlRk9OVEc2JSUqSGVsdmV0aWNhRyUlQk9MREciIzclK0FMSUdOUklHSFRHJStBTElHTkFCT1ZFRy0lJVRFWFRHNic3JCQiI3YhIiMkIiREIyEiIy0lKV9UWVBFU0VURzYjLUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHNiI2NVEycHJvamVjdGlvbn52ZWN0b3I2Ii8lJ2ZhbWlseUdRKkhlbHZldGljYTYiLyUlc2l6ZUdRIzEyNiIvJSVib2xkR1EmZmFsc2U2Ii8lJ2l0YWxpY0dRJXRydWU2Ii8lKnVuZGVybGluZUdRJmZhbHNlNiIvJSpzdWJzY3JpcHRHUSZmYWxzZTYiLyUsc3VwZXJzY3JpcHRHUSZmYWxzZTYiLyUrZm9yZWdyb3VuZEdRKFswLDAsMF02Ii8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdNiIvJSdvcGFxdWVHUSZmYWxzZTYiLyUrZXhlY3V0YWJsZUdRJmZhbHNlNiIvJSlyZWFkb25seUdRJmZhbHNlNiIvJSljb21wb3NlZEdRJmZhbHNlNiIvJSpjb252ZXJ0ZWRHUSZmYWxzZTYiLyUraW1zZWxlY3RlZEdRJmZhbHNlNiIvJSxwbGFjZWhvbGRlckdRJmZhbHNlNiIvJTZzZWxlY3Rpb24tcGxhY2Vob2xkZXJHUSZmYWxzZTYiLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWM2Ii0lJUZPTlRHNiUlKkhlbHZldGljYUclJUJPTERHIiM3JStBTElHTlJJR0hURyUrQUxJR05BQk9WRUctJSVURVhURzYnNyQkIiM6ISIiJCIjPyEiIi0lKV9UWVBFU0VURzYjLUkjbWlHNiMvSSttb2R1bGVuYW1lRzYiSSxUeXBlc2V0dGluZ0dJKF9zeXNsaWJHNiI2NVEpdmVjdG9yfjE2Ii8lJ2ZhbWlseUdRKkhlbHZldGljYTYiLyUlc2l6ZUdRIzEyNiIvJSVib2xkR1EmZmFsc2U2Ii8lJ2l0YWxpY0dRJXRydWU2Ii8lKnVuZGVybGluZUdRJmZhbHNlNiIvJSpzdWJzY3JpcHRHUSZmYWxzZTYiLyUsc3VwZXJzY3JpcHRHUSZmYWxzZTYiLyUrZm9yZWdyb3VuZEdRKFswLDAsMF02Ii8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdNiIvJSdvcGFxdWVHUSZmYWxzZTYiLyUrZXhlY3V0YWJsZUdRJmZhbHNlNiIvJSlyZWFkb25seUdRJmZhbHNlNiIvJSljb21wb3NlZEdRJmZhbHNlNiIvJSpjb252ZXJ0ZWRHUSZmYWxzZTYiLyUraW1zZWxlY3RlZEdRJmZhbHNlNiIvJSxwbGFjZWhvbGRlckdRJmZhbHNlNiIvJTZzZWxlY3Rpb24tcGxhY2Vob2xkZXJHUSZmYWxzZTYiLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWM2Ii0lJUZPTlRHNiUlKkhlbHZldGljYUclJUJPTERHIiM3JStBTElHTlJJR0hURyUrQUxJR05BQk9WRUctJSlQT0xZR09OU0c2JjcmNyQkIipcO011JSEjNSQhKiQpUTZlIiEjNTckJCEqXDtNdSUhIzUkIiokKVE2ZSIhIzU3JCQiK0haMkU4ISIqJCIrcCFRajglISIqNyQkIitlSSU0VSIhIiokIisjSDpaNSUhIio3JTckJCIrajU1MjghIiokIitDRW1VVCEiKjckJCIjOiEiIiQiI1ghIiI3JCQiK0NuIipSOSEiKiQiK1AyUik0JSEiKi0lJkNPTE9SRzYmJSRSR0JHJCIjNSEiIiQiIzUhIiIkIiIhISIiLSUmU1RZTEVHNiMlLFBBVENITk9HUklERy0lJ0NVUlZFU0c2IzcqNyQkIipcO011JSEjNSQhKiQpUTZlIiEjNTckJCEqXDtNdSUhIzUkIiokKVE2ZSIhIzU3JCQiK0haMkU4ISIqJCIrcCFRajglISIqNyQkIitqNTUyOCEiKiQiK0NFbVVUISIqNyQkIiM6ISIiJCIjWCEiIjckJCIrQ24iKlI5ISIqJCIrUDJSKTQlISIqNyQkIitlSSU0VSIhIiokIisjSDpaNSUhIio3JCQiKlw7TXUlISM1JCEqJClRNmUiISM1LSUpUE9MWUdPTlNHNiY3JjckJCIqXDtNdSUhIzUkISokKVE2ZSIhIzU3JCQhKlw7TXUlISM1JCIqJClRNmUiISM1NyQkIitaXC1COSEjNSQiK3JPQF1lISM1NyQkIitYIzM8UCMhIzUkIiswZilSYCYhIzU3JTckJCIqb1wiUSYpISM1JCIrSi4mKlJnISM1NyQkIipteEE7JCEiKiQiKilIJG9bKiEiKjckJCIrQyM9NCVIISM1JCIrWCNcVU0mISM1LSUmQ09MT1JHNiYlJFJHQkckIiIhISIiJCIjNSEiIiQiIiEhIiItJSZTVFlMRUc2IyUsUEFUQ0hOT0dSSURHLSUnQ1VSVkVTRzYjNyo3JCQiKlw7TXUlISM1JCEqJClRNmUiISM1NyQkISpcO011JSEjNSQiKiQpUTZlIiEjNTckJCIrWlwtQjkhIzUkIityT0BdZSEjNTckJCIqb1wiUSYpISM1JCIrSi4mKlJnISM1NyQkIipteEE7JCEiKiQiKilIJG9bKiEiKjckJCIrQyM9NCVIISM1JCIrWCNcVU0mISM1NyQkIitYIzM8UCMhIzUkIiswZilSYCYhIzU3JCQiKlw7TXUlISM1JCEqJClRNmUiISM1LSUpUE9MWUdPTlNHNiY3JjckJCIiJSEiIyQhIiQhIiM3JCQhIiUhIiMkIiIkISIjNyQkIiRzIyEiIyQiJHIkISIjNyQkIiNHISIiJCIkbCQhIiM3JTckJCIkbyMhIiMkIiR1JCEiIzckJCIjSSEiIiQiI1MhIiI3JCQiJCVHISIjJCIkaSQhIiMtJSZDT0xPUkc2JiUkUkdCRyQiIzUhIiIkIiIhISIiJCIiISEiIi0lJlNUWUxFRzYjJSxQQVRDSE5PR1JJREctJSdDVVJWRVNHNiM3KjckJCIiJSEiIyQhIiQhIiM3JCQhIiUhIiMkIiIkISIjNyQkIiRzIyEiIyQiJHIkISIjNyQkIiRvIyEiIyQiJHUkISIjNyQkIiNJISIiJCIjUyEiIjckJCIkJUchIiMkIiRpJCEiIzckJCIjRyEiIiQiJGwkISIjNyQkIiIlISIjJCEiJCEiIy0lKkFYRVNTVFlMRUc2IyUnTk9STUFMRy0lKFNDQUxJTkdHNiMlLENPTlNUUkFJTkVERy0lJVJPT1RHNictJSlCT1VORFNfWEc2IyQiJCF5ISIiLSUpQk9VTkRTX1lHNiMkIiMhKiEiIi0lLUJPVU5EU19XSURUSEc2IyQiJVNDISIiLSUuQk9VTkRTX0hFSUdIVEc2IyQiJWdPISIiLSUpQ0hJTERSRU5HNiI=
<Text-field style="Heading 2" layout="Heading 2">Visualizing in 3D</Text-field> We now want to 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>; LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIob3p2JQ== LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoN2IoXA== LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoJUdURw== LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoMyl6TQ== Addition of vectors and scalar multiplication works the same way it did in 2D. "v3+v4 ="=v3+v4; "w3+w4 =" = w3+w4; "3*v3 =" = 3*v1; "5*w4 =" = 3*w4; L1EodjMrdjR+PTYiLSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJDYjSSdjb2x1bW5HRiQ2Iy9JJCVpZEdGJCIoa2AnWw== L1EodzMrdzR+PTYiLSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkdGJDYjSSdjb2x1bW5HRiQ2Iy9JJCVpZEdGJCIoS1ZUJQ== L1EnMyp2M349NiItJkknVmVjdG9yRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YkNiNJJ2NvbHVtbkdGJDYjL0kkJWlkR0YkIihDXEsk L1EnNSp3NH49NiItJkknVmVjdG9yRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YkNiNJJ2NvbHVtbkdGJDYjL0kkJWlkR0YkIig7R14l Plotting once again shows that vector addition is done by moving vectors. #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); LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIod3IsJA== Ni0tJSpBWEVTU1RZTEVHNiMlJ05PUk1BTEctJSVURVhURzYnNyUkIiNJISIiJCIjZyEiIiQiI2chIiJRMH52ZWN0b3J+Mn5tb3ZlZDYiJStBTElHTlJJR0hURy0lJkNPTE9SRzYmJSRSR0JHJCIiISEiIiQiIzUhIiIkIiIhISIiLUklRk9OVEc2IjYlSSpIRUxWRVRJQ0FHNiJJJUJPTERHNiIiIzctJSdDVVJWRVNHNiY3JDclJCIiIiIiISQiIiYiIiEkIiIkIiIhNyUkIiImIiIhJCIiKCIiISQiIioiIiEtJSpUSElDS05FU1NHNiMiIiQtJSpMSU5FU1RZTEVHNiMiIiItJSZDT0xPUkc2JiUkUkdCRyQiIiEhIiIkIiM1ISIiJCIiISEiIi0lJ0NVUlZFU0c2JjckNyUkIiIhIiIhJCIiISIiISQiIiEiIiE3JSQiIiIiIiEkIiImIiIhJCIiJCIiIS0lKlRISUNLTkVTU0c2IyIiJC0lKkxJTkVTVFlMRUc2IyIiIi0lJkNPTE9SRzYmJSRSR0JHJCIjNSEiIiQiIiEhIiIkIiIhISIiLSUlVEVYVEc2JzclJCIjPyEiIiQiIzUhIiIkIiNJISIiUSp+dmVjdG9yfjI2IiUrQUxJR05SSUdIVEctJSZDT0xPUkc2JiUkUkdCRyQiIiEhIiIkIiM1ISIiJCIiISEiIi1JJUZPTlRHNiI2JUkqSEVMVkVUSUNBRzYiSSVCT0xERzYiIiM3LSUnQ1VSVkVTRzYmNyQ3JSQiIiEiIiEkIiIhIiIhJCIiISIiITclJCIiJiIiISQiIigiIiEkIiIqIiIhLSUqVEhJQ0tORVNTRzYjIiIkLSUqTElORVNUWUxFRzYjIiIiLSUmQ09MT1JHNiYlJFJHQkckIiIhISIiJCIiISEiIiQiIzUhIiItJSdDVVJWRVNHNiY3JDclJCIiISIiISQiIiEiIiEkIiIhIiIhNyUkIiIlIiIhJCIiIyIiISQiIiciIiEtJSpUSElDS05FU1NHNiMiIiQtJSpMSU5FU1RZTEVHNiMiIiItJSZDT0xPUkc2JiUkUkdCRyQiIiEhIiIkIiM1ISIiJCIiISEiIi0lJVRFWFRHNig3JSQiI0QhIiIkIiNOISIiJCIjWCEiIlE1fnZlY3Rvcn4xfit+dmVjdG9yfjI2IiUrQUxJR05SSUdIVEclK0FMSUdOQUJPVkVHLSUmQ09MT1JHNiYlJFJHQkckIiIhISIiJCIiISEiIiQiIzUhIiItSSVGT05URzYiNiVJKkhFTFZFVElDQUc2IkklQk9MREc2IiIjNy0lJVRFWFRHNic3JSQiIiYhIiIkIiNEISIiJCIjOiEiIlEqfnZlY3Rvcn4xNiIlK0FMSUdOUklHSFRHLSUmQ09MT1JHNiYlJFJHQkckIiM1ISIiJCIiISEiIiQiIiEhIiItSSVGT05URzYiNiVJKkhFTFZFVElDQUc2IkklQk9MREc2IiIjNy0lLE9SSUVOVEFUSU9ORzYkJCIkIT4hIiIkIiQhKikhIiItJShTQ0FMSU5HRzYjJSxDT05TVFJBSU5FREc=
<Text-field style="Heading 2" layout="Heading 2">Dot products and projections in 3D:</Text-field> We again repeat everything we did in two dimensions, but with three dimensions. First we look at our vectors and 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=1, 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=1, color=green): label2 := textplot3d([vec2[1]/2,vec2[2]/2,vec2[3]/2, ` vector 2`], align=RIGHT, font = [HELVETICA, BOLD, 12],color=green): plotv1n := line(convert(zerovec,list), convert(vec1norm,list),linestyle=1, thickness=3, color=blue): plotv2n := line(convert(zerovec,list), convert(vec2norm,list), linestyle=1, thickness=3, color=brown): display3d({plotv1, label1, plotv2, label2, plotv2n, plotv1n},axes=normal,scaling=constrained); LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIob3p2JQ== LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoN2IoXA== KiQiI04jIiIiIiIj LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoR2tOJw== LCQqJCIjOSMiIiIiIiNGJw== LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoT1JjIw== NistJSpBWEVTU1RZTEVHNiMlJ05PUk1BTEctJSVURVhURzYnNyUkIiM/ISIiJCIjNSEiIiQiI0khIiJRKn52ZWN0b3J+MjYiJStBTElHTlJJR0hURy0lJkNPTE9SRzYmJSRSR0JHJCIiISEiIiQiIzUhIiIkIiIhISIiLUklRk9OVEc2IjYlSSpIRUxWRVRJQ0FHNiJJJUJPTERHNiIiIzctJSdDVVJWRVNHNiY3JDclJCIiISIiISQiIiEiIiEkIiIhIiIhNyUkIis0JjMucCIhIzUkIitdRGFeJSkhIzUkIitHYiM0MiYhIzUtJSpUSElDS05FU1NHNiMiIiQtJSpMSU5FU1RZTEVHNiMiIiItJSZDT0xPUkc2JiUkUkdCRyQiIiEhIiIkIiIhISIiJCIjNSEiIi0lJ0NVUlZFU0c2JjckNyUkIiIhIiIhJCIiISIiISQiIiEiIiE3JSQiK1NbQVhgISM1JCIrPkNoc0UhIzUkIitlcyR5LCkhIzUtJSpUSElDS05FU1NHNiMiIiQtJSpMSU5FU1RZTEVHNiMiIiItJSZDT0xPUkc2JiUkUkdCRyQiMV9NbVglKWVxayEjOyQiMndtb1YoKWVxayIhIzwkIjJ3bW9WKCllcWsiISM8LSUnQ1VSVkVTRzYmNyQ3JSQiIiEiIiEkIiIhIiIhJCIiISIiITclJCIiIiIiISQiIiYiIiEkIiIkIiIhLSUqVEhJQ0tORVNTRzYjIiIiLSUqTElORVNUWUxFRzYjIiIiLSUmQ09MT1JHNiYlJFJHQkckIiM1ISIiJCIiISEiIiQiIiEhIiItJSdDVVJWRVNHNiY3JDclJCIiISIiISQiIiEiIiEkIiIhIiIhNyUkIiIlIiIhJCIiIyIiISQiIiciIiEtJSpUSElDS05FU1NHNiMiIiItJSpMSU5FU1RZTEVHNiMiIiItJSZDT0xPUkc2JiUkUkdCRyQiIiEhIiIkIiM1ISIiJCIiISEiIi0lJVRFWFRHNic3JSQiIiYhIiIkIiNEISIiJCIjOiEiIlEqfnZlY3Rvcn4xNiIlK0FMSUdOUklHSFRHLSUmQ09MT1JHNiYlJFJHQkckIiM1ISIiJCIiISEiIiQiIiEhIiItSSVGT05URzYiNiVJKkhFTFZFVElDQUc2IkklQk9MREc2IiIjNy0lLE9SSUVOVEFUSU9ORzYkJCIkKyYhIiIkIiRdKSEiIi0lKFNDQUxJTkdHNiMlLENPTlNUUkFJTkVERw== 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=1, color=red): label1 := textplot3d([vec1[1]/2,vec1[2]/2,vec1[3]/2, ` vector 1`], align=RIGHT, font = [HELVETICA, BOLD, 12], color=red): plotv2n := line(convert(zerovec,list), convert(vec2norm,list), linestyle=1, thickness=3, color=brown): label2n := textplot3d([vec2norm[1]/2,vec2norm[2]/2,vec2norm[3]/2, ` vector 2 normalized`], align=RIGHT, font = [HELVETICA, BOLD, 12], color=brown): plotvperp := line(convert(zerovec,list), convert(projvec,list), linestyle=1, thickness=1, color=black): plotvproj := line(convert(zerovec,list), convert(projvec,list), linestyle=1, thickness=1, color=green): labelproj := textplot3d([projvec[1]/2,projvec[2]/2,projvec[3]/2, ` projection vector`], align=RIGHT, font = [HELVETICA, BOLD, 12],color=green): display3d({plotv1, label1, plotv2n, label2n, plotvproj, labelproj, plotvperp}, axes=normal,scaling=constrained); LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIob3p2JQ== LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoN2IoXA== LCQqJCIjOSMiIiIiIiNGJw== LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoKTMtXw== LCQqJCIjOSMiIiIiIiMjIiIpIiIo LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoNyVRaw== LCQqJCIjOSMiIiIiIiNGJw== NiwtJSpBWEVTU1RZTEVHNiMlJ05PUk1BTEctJSdDVVJWRVNHNiY3JDclJCIiISIiISQiIiEiIiEkIiIhIiIhNyUkIitTW0FYYCEjNSQiKz5DaHNFISM1JCIrZXMkeSwpISM1LSUqVEhJQ0tORVNTRzYjIiIkLSUqTElORVNUWUxFRzYjIiIiLSUmQ09MT1JHNiYlJFJHQkckIjFfTW1YJSllcWshIzskIjJ3bW9WKCllcWsiISM8JCIyd21vVigpZXFrIiEjPC0lJ0NVUlZFU0c2JjckNyUkIiIhIiIhJCIiISIiISQiIiEiIiE3JSQiIiIiIiEkIiImIiIhJCIiJCIiIS0lKlRISUNLTkVTU0c2IyIiIi0lKkxJTkVTVFlMRUc2IyIiIi0lJkNPTE9SRzYmJSRSR0JHJCIjNSEiIiQiIiEhIiIkIiIhISIiLSUlVEVYVEc2JzclJCIiJiEiIiQiI0QhIiIkIiM6ISIiUSp+dmVjdG9yfjE2IiUrQUxJR05SSUdIVEctJSZDT0xPUkc2JiUkUkdCRyQiIzUhIiIkIiIhISIiJCIiISEiIi1JJUZPTlRHNiI2JUkqSEVMVkVUSUNBRzYiSSVCT0xERzYiIiM3LSUlVEVYVEc2JzclJCIrPkNoc0UhIzUkIis0aUlPOCEjNSQiK0YnPSozUyEjNVE1fnZlY3Rvcn4yfm5vcm1hbGl6ZWQ2IiUrQUxJR05SSUdIVEctJSZDT0xPUkc2JiUkUkdCRyQiMV9NbVglKWVxayEjOyQiMndtb1YoKWVxayIhIzwkIjJ3bW9WKCllcWsiISM8LUklRk9OVEc2IjYlSSpIRUxWRVRJQ0FHNiJJJUJPTERHNiIiIzctJSdDVVJWRVNHNiY3JDclJCIiISIiISQiIiEiIiEkIiIhIiIhNyUkIisnRzlkRyMhIiokIitWciZHOSIhIiokIitIOWRHTSEiKi0lKlRISUNLTkVTU0c2IyIiIi0lKkxJTkVTVFlMRUc2IyIiIi0lJkNPTE9SRzYmJSRSR0JHJCIiISEiIiQiIiEhIiIkIiIhISIiLSUnQ1VSVkVTRzYmNyQ3JSQiIiEiIiEkIiIhIiIhJCIiISIiITclJCIrJ0c5ZEcjISIqJCIrVnImRzkiISIqJCIrSDlkR00hIiotJSpUSElDS05FU1NHNiMiIiItJSpMSU5FU1RZTEVHNiMiIiItJSZDT0xPUkc2JiUkUkdCRyQiIiEhIiIkIiM1ISIiJCIiISEiIi0lJVRFWFRHNic3JSQiK1ZyJkc5IiEiKiQiKzlkRzlkISM1JCIrOWRHOTwhIipRM35wcm9qZWN0aW9ufnZlY3RvcjYiJStBTElHTlJJR0hURy0lJkNPTE9SRzYmJSRSR0JHJCIiISEiIiQiIzUhIiIkIiIhISIiLUklRk9OVEc2IjYlSSpIRUxWRVRJQ0FHNiJJJUJPTERHNiIiIzctJSxPUklFTlRBVElPTkc2JCQiJCsiISIiJCIlZzchIiItJShTQ0FMSU5HRzYjJSxDT05TVFJBSU5FREc=
<Text-field style="Heading 2" layout="Heading 2">The cross product of vectors in 3D:</Text-field> The syntax for cross product is simple. v3:= <-1, 3, -2>; v4 := <3, -2, 1>; "v3 x v4 =" = CrossProduct (v3, v4); LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoQykpWyc= LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoXyd6aw== L1EqdjN+eH52NH49NiItJkknVmVjdG9yRzYkJSpwcm90ZWN0ZWRHSShfc3lzbGliR0YkNiNJJ2NvbHVtbkdGJDYjL0kkJWlkR0YkIihPUlgj We want to observe that the cross product is perpendicular to both of the other vectors. 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=1, 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]/2,crossvec[2]/2,crossvec[3]/2, ` vector 1 cross vector 2`], align=RIGHT, font = [HELVETICA, BOLD, 12], color=blue): plotpoly := polygon([convert(zerovec,list), convert(vec1,list), convert(cornvec,list), convert(vec2,list)], thickness=1, color=green): labelproj := textplot3d([projvec[1]/2,projvec[2]/2,projvec[3]/2, ` projection vector`], align=RIGHT, font = [HELVETICA, BOLD, 12],color=green): display3d({plotv1, label1, plotv2, label2, plotvcross, labelcross, plotpoly}, axes=normal,scaling=constrained); LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoQykpWyc= LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoXyd6aw== LSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0koX3N5c2xpYkc2IjYjSSdjb2x1bW5HRig2Iy9JJCVpZEdGKCIoJzRcRg== NiwtJSpBWEVTU1RZTEVHNiMlJ05PUk1BTEctJSlQT0xZR09OU0c2JTcmNyUkIiIhIiIhJCIiISIiISQiIiEiIiE3JSQhIiIiIiEkIiIkIiIhJCEiIyIiITclJCIiIyIiISQiIiIiIiEkISIiIiIhNyUkIiIkIiIhJCEiIyIiISQiIiIiIiEtJSpUSElDS05FU1NHNiMiIiItJSZDT0xPUkc2JiUkUkdCRyQiIiEhIiIkIiM1ISIiJCIiISEiIi0lJ0NVUlZFU0c2JjckNyUkIiIhIiIhJCIiISIiISQiIiEiIiE3JSQhIiIiIiEkIiIkIiIhJCEiIyIiIS0lKlRISUNLTkVTU0c2IyIiIi0lKkxJTkVTVFlMRUc2IyIiIi0lJkNPTE9SRzYmJSRSR0JHJCIjNSEiIiQiIiEhIiIkIiIhISIiLSUlVEVYVEc2JzclJCEiJiEiIiQiIzohIiIkISM1ISIiUSp+dmVjdG9yfjE2IiUrQUxJR05SSUdIVEctJSZDT0xPUkc2JiUkUkdCRyQiIzUhIiIkIiIhISIiJCIiISEiIi1JJUZPTlRHNiI2JUkqSEVMVkVUSUNBRzYiSSVCT0xERzYiIiM3LSUnQ1VSVkVTRzYmNyQ3JSQiIiEiIiEkIiIhIiIhJCIiISIiITclJCIiJCIiISQhIiMiIiEkIiIiIiIhLSUqVEhJQ0tORVNTRzYjIiIkLSUqTElORVNUWUxFRzYjIiIiLSUmQ09MT1JHNiYlJFJHQkckIjFfTW1YJSllcWshIzskIjJ3bW9WKCllcWsiISM8JCIyd21vVigpZXFrIiEjPC0lJVRFWFRHNic3JSQiIzohIiIkISM1ISIiJCIiJiEiIlEqfnZlY3Rvcn4yNiIlK0FMSUdOUklHSFRHLSUmQ09MT1JHNiYlJFJHQkckIjFfTW1YJSllcWshIzskIjJ3bW9WKCllcWsiISM8JCIyd21vVigpZXFrIiEjPC1JJUZPTlRHNiI2JUkqSEVMVkVUSUNBRzYiSSVCT0xERzYiIiM3LSUnQ1VSVkVTRzYmNyQ3JSQiIiEiIiEkIiIhIiIhJCIiISIiITclJCEiIiIiISQhIiYiIiEkISIoIiIhLSUqVEhJQ0tORVNTRzYjIiIkLSUqTElORVNUWUxFRzYjIiIiLSUmQ09MT1JHNiYlJFJHQkckIiIhISIiJCIiISEiIiQiIzUhIiItJSVURVhURzYnNyUkISImISIiJCEjRCEiIiQhI04hIiJROX52ZWN0b3J+MX5jcm9zc352ZWN0b3J+MjYiJStBTElHTlJJR0hURy0lJkNPTE9SRzYmJSRSR0JHJCIiISEiIiQiIiEhIiIkIiM1ISIiLUklRk9OVEc2IjYlSSpIRUxWRVRJQ0FHNiJJJUJPTERHNiIiIzctJSxPUklFTlRBVElPTkc2JCQiJD8pISIiJCEkXSUhIiItJShTQ0FMSU5HRzYjJSxDT05TVFJBSU5FREc=
TTdSMApJNFJUQUJMRV9TQVZFLzI0NTA2NzJYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIjIiMiIiIiIiNGJg==TTdSMApJNFJUQUJMRV9TQVZFLzI3NzMwMjBYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIjIiMiIiQhIiVGJg==TTdSMApJNFJUQUJMRV9TQVZFLzIzNjg3MzJYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIjIiMlI2ExRyUjYTJHRiY=TTdSMApJNFJUQUJMRV9TQVZFLzIzNjk5MzJYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIjIiMlI2IxRyUjYjJHRiY=TTdSMApJNFJUQUJMRV9TQVZFLzI5MTc0MzZYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIjIiMiIiUhIiNGJg==TTdSMApJNFJUQUJMRV9TQVZFLzI5NjYxNzZYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIjIiMsJiUjYTFHIiIiJSNiMUdGKSwmJSNhMkdGKSUjYjJHRilGJg==TTdSMApJNFJUQUJMRV9TQVZFLzIzNzAxMzJYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIjIiMiIiQiIidGJg==TTdSMApJNFJUQUJMRV9TQVZFLzI5OTkzMDRYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIjIiMsJCUjYjFHIiIkLCQlI2IyR0YpRiY=TTdSMApJNFJUQUJMRV9TQVZFLzIzNzAyNTJYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIjIiMsJCokIiImIyIiIiIiIyNGK0YpLCRGKCNGLEYpRiY=TTdSMApJNFJUQUJMRV9TQVZFLzMxODAxNTJYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIjIiMiIiYhIiJGJg==TTdSMApJNFJUQUJMRV9TQVZFLzI0NTA2NzJYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIjIiMiIiIiIiNGJg==TTdSMApJNFJUQUJMRV9TQVZFLzI3NzMwMjBYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIjIiMiIiQhIiVGJg==TTdSMApJNFJUQUJMRV9TQVZFLzUxMjA0ODBYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIjIiMsJCokIiImIyIiIiIiIyNGK0YpLCRGKCNGLEYpRiY=TTdSMApJNFJUQUJMRV9TQVZFLzUxNTM4NzJYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIjIiMjIiIkIiImIyEiJUYpRiY=TTdSMApJNFJUQUJMRV9TQVZFLzIzNjg0OTJYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIjIiMiIiQiIiVGJg==TTdSMApJNFJUQUJMRV9TQVZFLzIzMjQ4MTZYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIjIiMiIiIiIiRGJg==TTdSMApJNFJUQUJMRV9TQVZFLzI0MjQ0NDhYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIjIiMsJCokIiM1IyIiIiIiIyNGK0YpLCRGKCMiIiRGKUYmTTdSMApJNFJUQUJMRV9TQVZFLzI3Mzg4ODRYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIjIiMjIiIkIiIjIyIiKkYpRiY=TTdSMApJNFJUQUJMRV9TQVZFLzQ3NTc5NjhYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIkIiQiIiIiIiYiIiRGJg==TTdSMApJNFJUQUJMRV9TQVZFLzQ5NzU1MTJYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIkIiQiIiUiIiMiIidGJg==TTdSMApJNFJUQUJMRV9TQVZFLzI4NDEyODRYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIkIiQlI2MxRyUjYzJHJSNjM0dGJg==TTdSMApJNFJUQUJMRV9TQVZFLzM0Nzk4MDhYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIkIiQlI2QxRyUjZDJHJSNkM0dGJg==TTdSMApJNFJUQUJMRV9TQVZFLzQ4NjUzNjRYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIkIiQiIiYiIigiIipGJg==TTdSMApJNFJUQUJMRV9TQVZFLzQ0MTQzMzJYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIkIiQsJiUjYzFHIiIiJSNkMUdGKSwmJSNjMkdGKSUjZDJHRiksJiUjYzNHRiklI2QzR0YpRiY=TTdSMApJNFJUQUJMRV9TQVZFLzMzMjQ5MjRYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIjIiMiIiQiIidGJg==TTdSMApJNFJUQUJMRV9TQVZFLzQ1MTI4MTZYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIkIiQsJCUjZDFHIiIkLCQlI2QyR0YpLCQlI2QzR0YpRiY=TTdSMApJNFJUQUJMRV9TQVZFLzMwMTcxNzZYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIkIiQiIiFGJ0YnRiY=TTdSMApJNFJUQUJMRV9TQVZFLzQ3NTc5NjhYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIkIiQiIiIiIiYiIiRGJg==TTdSMApJNFJUQUJMRV9TQVZFLzQ5NzU1MTJYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIkIiQiIiUiIiMiIidGJg==TTdSMApJNFJUQUJMRV9TQVZFLzYzNTY0MjhYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIkIiQsJCokIiNOIyIiIiIiIyNGK0YpLCRGKCNGKyIiKCwkRigjIiIkRilGJg==TTdSMApJNFJUQUJMRV9TQVZFLzI1NjM5MzZYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIkIiQsJCokIiM5IyIiIiIiIyNGKyIiKCwkRigjRitGKSwkRigjIiIkRilGJg==TTdSMApJNFJUQUJMRV9TQVZFLzQ3NTc5NjhYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIkIiQiIiIiIiYiIiRGJg==TTdSMApJNFJUQUJMRV9TQVZFLzQ5NzU1MTJYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIkIiQiIiUiIiMiIidGJg==TTdSMApJNFJUQUJMRV9TQVZFLzUyMDIwODhYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIkIiQsJCokIiM5IyIiIiIiIyNGKyIiKCwkRigjRitGKSwkRigjIiIkRilGJg==TTdSMApJNFJUQUJMRV9TQVZFLzY0Mzg0MTJYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIkIiQjIiM7IiIoIyIiKUYpIyIjQ0YpRiY=TTdSMApJNFJUQUJMRV9TQVZFLzY0ODg4MjRYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIkIiQhIiIiIiQhIiNGJg==TTdSMApJNFJUQUJMRV9TQVZFLzY0Nzk2NTJYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIkIiQiIiQhIiMiIiJGJg==TTdSMApJNFJUQUJMRV9TQVZFLzI0NTM5MzZYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIkIiQhIiIhIiYhIihGJg==TTdSMApJNFJUQUJMRV9TQVZFLzY0ODg4MjRYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIkIiQhIiIiIiQhIiNGJg==TTdSMApJNFJUQUJMRV9TQVZFLzY0Nzk2NTJYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIkIiQiIiQhIiMiIiJGJg==TTdSMApJNFJUQUJMRV9TQVZFLzI3NDkwOTZYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIkIiQhIiIhIiYhIihGJg==