{ Taala-JSP CODE FOR JSX CONVERSION 12.1.2020 MEP } { Muista täpättää LaTeX labels: } { Lineaarialgebra: Orthogonal projection matrix 01} { JSX board name: OrthProjMatr_01 } { JSX element id: orthprojmatr_01 } { HUOM! X' segments buttons hidden temporarily } { X' visible till the problem solved } MeasurementAccuracy = 100 #CODE = "GSP.class" #CODEBASE = "..\jsp" #ARCHIVE = "jsp4.jar" #WIDTH = 800 #HEIGHT = 530 #ALIGN = Center *Frame = 1 *TextFont = "Courier" *TextBold = 0 *TextSize = 14 *LabelFont = "Courier" *LabelBold = 0 *LabelSize = 14 *MeasureFont = "Courier" *MeasureSize = 12 *MeasureBold = 0 *MeasureInDegrees = 1 *DirectedAngles = 1 *BackRed = 255 *BackGreen = 255 *BackBlue = 255 { The real matrix V variable lines below the main figure } $LUpp FixedPoint(0,470)[hidden]; $LLow FixedPoint(0,530)[hidden]; $RLow FixedPoint(400,530)[hidden]; $RUpp FixedPoint(400,470)[hidden]; $ULine Line($LUpp,$RUpp)[black, hidden]; $RectR Polygon($LUpp,$LLow,$RLow,$RUpp,$LUpp)[color(240,200,100)]; $ROu FixedPoint(200,490)[black,label('0')]; {,labelAlign(-4,3)} $Refu Translation($ROu,25,0)[hidden]; $Rayu Ray($Refu,$ROu)[black, hidden]; $Rykku Point on object($Rayu,1)[white, label('1'), hidden]; $R1u FixedPoint(225,490)[white,label('1')]; {,labelAlign(-4,3)} $RLu Line($Rykku,$ROu)[black, hidden]; $ROv FixedPoint(200,515)[black,label('0')]; {,labelAlign(-4,-10)} $Refv Translation($ROv,25,0)[hidden]; $Rayv Ray($Refv,$ROv)[black, hidden]; $Rykkv Point on object($Rayv,1)[white, label('1'), hidden]; $R1v FixedPoint(225,515)[white,label('1')]; {,labelAlign(-4,-10)} $RLv Line($Rykkv,$ROv)[black, hidden]; { restricting the real lines } $RLuLeftEndUp FixedPoint(0,490)[hidden]; $RLvLeftEndLow FixedPoint(0,515)[hidden]; $RLuRightEndUp FixedPoint(400,490)[hidden]; $RLvRightEndLow FixedPoint(400,515)[hidden]; $RLuvis Segment($RLuLeftEndUp,$RLuRightEndUp)[black]; {,arrowL} $RLvvis Segment($RLvLeftEndLow,$RLvRightEndLow)[black]; {,arrowL} { Points and values on the lines: vectors v1 and v2 and matrix V = (v1, v2) } $Rptu1 Point on object($RLu,3)[label('V11'), red, layer(10)]; {,label('vSUB{11}'),labelAlign(-4,4),psize(2), highlight} $Rptu2 Point on object($RLu,1)[label('V21'), blue, layer(10)]; {,label('vSUB{21}'),labelAlign(-4,7),psize(2), highlight} $Rptu3 FixedPoint(200,490)[label('V31'), color(0,150,0), layer(10)]; {,label('vSUB{31}'),labelAlign(-4,10)} $Rptv1 Point on object($RLv,-1)[label('V12'), red, layer(10)]; {,label('vSUB{12}'),labelAlign(-4,4),psize(2), highlight} $Rptv2 Point on object($RLv,2)[label('V22'), blue, layer(10)]; {,label('vSUB{22}'),labelAlign(-4,7),psize(2), highlight} $Rptv3 FixedPoint(200,515)[label('V32'), color(0,150,0), layer(10)]; {,label('vSUB{32}'),labelAlign(-4,10)} $FTextV FixedText(320, 22,'V')[black,bold]; {,text('\\( V = ( v SUB{ij} ) \\, = ({\\mathbf{v}}SUB{1} \\ {\\mathbf{v}}SUB{2} ) \\)')} $V_leftPar FixedText(50,40,'(')[black]; {,text('\\( \\Biggl( \\)' ),LabelAlign(0,0)} $V_rightPar FixedText(150,40,'(')[black]; {,text('\\( \\Biggr) \\)' ),LabelAlign(0,0)} $u1val Ratio/Points($ROu,$Rykku,$Rptu1,15,40,'')[red]; $u2val Ratio/Points($ROu,$Rykku,$Rptu2,15,55,'')[blue]; $u3val Ratio/Points($ROu,$Rykku,$Rptu3,15,70,'')[color(0,150,0)]; $v1val Ratio/Points($ROv,$Rykkv,$Rptv1,65,40,'')[red]; $v2val Ratio/Points($ROv,$Rykkv,$Rptv2,65,55,'')[blue]; $v3val Ratio/Points($ROv,$Rykkv,$Rptv3,65,70,'')[color(0,150,0)]; $Gnegpot FixedText(220,55,'Gpotmiinus1')[black]; {,text('\\( {\\large{G}}SUP{-1} \\)' ),LabelAlign(0,0)} $FTextVT FixedText(270, 22,'VT')[black,bold]; {,text('\\( VSUP{T} \\)')} $VT_leftPar FixedText(200,48,'(')[black]; {,text('\\( \\Bigl( \\)' ),LabelAlign(0,0)} $VT_rightPar FixedText(340,48,'(')[black]; {,text('\\( \\Bigr) \\)' ),LabelAlign(0,0)} $u1val2 Calculate(165, 47,'','A0+')($u1val)[red]; $u2val2 Calculate(215, 47,'','A0+')($u2val)[blue]; $u3val2 Calculate(265, 47,'','A0+')($u3val)[color(0,150,0)]; $v1val2 Calculate(165, 62,'','A0+')($v1val)[red]; $v2val2 Calculate(215, 62,'','A0+')($v2val)[blue]; $v3val2 Calculate(265, 62,'','A0+')($v3val)[color(0,150,0)]; $SBRLuv ShowButton( 5,440,'Change V1,V2')($ROu,$R1u,$RLuvis,$Rptu1,$Rptu2,$Rptu3,$ROv,$R1v,$RLvvis,$Rptv1,$Rptv2,$Rptv3,$RectR)[black,bold]; {,text('Change \\( {\\mathbf{v}}SUB{1},, {\\mathbf{v}}SUB{2} \\)' ),LabelAlign(0,0)} $HBRLuv HideButton(100,440,'Fix')( $ROu,$R1u,$RLuvis,$Rptu1,$Rptu2,$Rptu3,$ROv,$R1v,$RLvvis,$Rptv1,$Rptv2,$Rptv3,$RectR)[black]; { Direction vector S (viewpoint) } $LUppS FixedPoint(0,520)[hidden]; $LLowS FixedPoint(0,550)[hidden]; $RLowS FixedPoint(800,550)[hidden]; $RUppS FixedPoint(800,520)[hidden]; $ULineS Line($LUppS,$RUppS)[black, hidden]; $RectRS Polygon($LUppS,$LLowS,$RLowS,$RUppS,$LUppS)[color(245,203,200),layer(50),hidden]; $ROS FixedPoint(400,530)[black,label('0'),hidden]; $RefS Translation($ROS,25,0)[hidden]; $RayS Ray($RefS,$ROS)[black, hidden]; $RykkS Point on object($RayS,1)[white, label('1'),hidden]; $RLS Line($RykkS,$ROS)[black,hidden]; $RptS1 Point on object($RLS,9)[label('S1'), red, layer(10),hidden]; $RptS2 Point on object($RLS,4)[label('S2'), blue, layer(10),hidden]; $RptS3 Point on object($RLS,2)[label('S3'), color(0,150,0), layer(10),hidden]; $S1val Ratio/Points($ROS,$RykkS,$RptS1, 5,543,'S1 = ')[red,hidden]; $S2val Ratio/Points($ROS,$RykkS,$RptS2,105,543,'S2 = ')[blue,hidden]; $S3val Ratio/Points($ROS,$RykkS,$RptS3,205,543,'S3 = ')[color(0,150,0),hidden]; $xykkalfa1 Calculate(0,360,'xykkalfa1 = ','0B- A2^ B2^ + @sqrt / ')($S1val,$S2val,$S3val)[red,hidden]; $xykkalfa2 Calculate(0,380,'xykkalfa2 = ','0AC*- A2^ B2^ + @sqrt / A2^ B2^ + C2^ + @sqrt / ')($S1val,$S2val,$S3val)[red,hidden]; $yykkalfa1 Calculate(0,400,'yykkalfa1 = ','A A2^ B2^ + @sqrt / ')($S1val,$S2val,$S3val)[blue,hidden]; $yykkalfa2 Calculate(0,420,'yykkalfa2 = ','0BC*- A2^ B2^ + @sqrt / A2^ B2^ + C2^ + @sqrt / ')($S1val,$S2val,$S3val)[blue,hidden]; $zykkalfa1 Calculate(0,440,'zykkalfa1 = ','0A*')($S1val,$S2val,$S3val)[color(0,150,0),hidden]; $zykkalfa2 Calculate(0,460,'zykkalfa2 = ','A2^ B2^ + A2^ B2^ + @sqrt / A2^ B2^ + C2^ + @sqrt / ')($S1val,$S2val,$S3val)[color(0,150,0),hidden]; { The virtual 3-space } $Origo FixedPoint(200,320)[black, label('0')]; $unitp UnitPoint($Origo,50)[white, hidden]; $coord Origin&Unit($Origo,$unitp)[black,hidden]; $xykk PlotXY($xykkalfa2,$coord,$xykkalfa1)[white, label('1'),layer(10)]; $yykk PlotXY($yykkalfa2,$coord,$yykkalfa1)[white, label('1'),layer(10)]; $zykk PlotXY($zykkalfa2,$coord,$zykkalfa1)[white, label('1'),layer(10)]; $xRay Ray($xykk,$Origo)[ hidden]; $xRL Line($xykk,$Origo)[ red, hidden]; $yRay Ray($yykk,$Origo)[ hidden]; $yRL Line($yykk,$Origo)[ blue,hidden]; $zRay Ray($zykk,$Origo)[ hidden]; $zRL Line($zykk,$Origo)[color(0,150,0),hidden]; $xM Point on object($xRL,-9)[red,hidden]; $xP Point on object($xRL, 9)[red,hidden]; $xRLvis Segment($xM,$xP)[red]; {,arrowL} $Ftextx1 FixedText( 70, 390,'x_1')[red]; {,text('\\( xSUB{1} \\)')} $yM Point on object($yRL,-4)[blue,hidden]; $yP Point on object($yRL, 4)[blue,hidden]; $yRLvis Segment($yM,$yP)[blue]; {,arrowL} $Ftextx2 FixedText(420, 325,'x_2')[blue]; {,text('\\( xSUB{2} \\)')} $zM Point on object($zRL,-3)[color(0,150,0),hidden]; $zP Point on object($zRL, 4)[color(0,150,0),hidden]; $zRLvis Segment($zM,$zP)[color(0,150,0)]; {,arrowL} $Ftextx3 FixedText(235, 145,'x_3')[color(0,150,0)]; {,text('\\( xSUB{3} \\)')} { the space vectors } $u1 Dilation/3PtRatio($xykk,$Origo,$ROu,$Rykku,$Rptu1)[red, label('V11'),hidden]; {,label('v SUB{11}'),LabelAlign(-3,5)} $u2 Dilation/3PtRatio($yykk,$Origo,$ROu,$Rykku,$Rptu2)[blue, label('V21'),hidden]; {,label('v SUB{21}'),LabelAlign(-3,5)} $u3 Dilation/3PtRatio($zykk,$Origo,$ROu,$Rykku,$Rptu3)[color(0,150,0), label('V31'),hidden]; {,label('v SUB{31}'),LabelAlign(-3,5)} $u1u2 VectorTranslation($u1,$Origo,$u2)[magenta, label('(V11,V21)'),hidden]; {,label('( v SUB{11},,v SUB{21} )'),LabelAlign(5,-5)} $Su1u2x Segment($u1,$u1u2)[blue,hidden]; {,dash(1)} $Su1u2y Segment($u2,$u1u2)[red,hidden]; {,dash(1)} $SOu1u2 Segment($Origo,$u1u2)[magenta,hidden]; {,dash(1)} $U VectorTranslation($u1u2,$Origo,$u3)[color(255,168,17), label('V1')]; {,label('{\\mathbf{v}}SUB{1}'),LabelAlign(0,5)} $SUu1u2 Segment($u1u2,$U)[color(0,150,0),hidden]; $SOU Segment($Origo,$U)[color(255,168,17),thick]; {,arrowL} $SUu3 Segment($u3,$U)[magenta,hidden]; $v1 Dilation/3PtRatio($xykk,$Origo,$ROv,$Rykkv,$Rptv1)[red, label('V12'),hidden]; {,label('v SUB{12}'),LabelAlign(-3,5)} $v2 Dilation/3PtRatio($yykk,$Origo,$ROv,$Rykkv,$Rptv2)[blue, label('V22'),hidden]; {,label('v SUB{22}'),LabelAlign(-3,5)} $v3 Dilation/3PtRatio($zykk,$Origo,$ROv,$Rykkv,$Rptv3)[color(0,150,0), label('V32'),hidden]; {,label('v SUB{32}'),LabelAlign(-3,5)} $v1v2 VectorTranslation($v1,$Origo,$v2)[magenta, label('(V12,V22)'),hidden]; {,label('( v SUB{12},,v SUB{22} )'),LabelAlign(5,-5)} $Sv1v2x Segment($v1,$v1v2)[blue,hidden]; {,dash(1)} $Sv1v2y Segment($v2,$v1v2)[red,hidden]; {,dash(1)} $SOv1v2 Segment($Origo,$v1v2)[magenta,hidden]; {,dash(1)} $V VectorTranslation($v1v2,$Origo,$v3)[color(255,168,17), label('V2')]; {,label('{\\mathbf{v}}SUB{2}'),LabelAlign(0,5)} $SVv1v2 Segment($v1v2,$V)[color(0,150,0),hidden]; $SOV Segment($Origo,$V)[color(255,168,17),thick]; {,arrowL} $SVv3 Segment($v3,$V)[magenta,hidden]; $UplusV VectorTranslation($U,$Origo,$V)[hidden]; $PlPol Polygon($Origo,$U,$UplusV,$V)[yellow,layer(20)]; $UminusV VectorTranslation($U,$V,$Origo)[hidden]; $UminusV VectorTranslation($U,$V,$Origo)[hidden]; $VminusU VectorTranslation($V,$U,$Origo)[hidden]; $minusUplusV VectorTranslation($VminusU,$UplusV,$UminusV)[hidden]; $PUV Polygon($UplusV,$VminusU,$minusUplusV,$UminusV)[color(236,245,175)]; { Matrix G } $GFtext FixedText(595,157,'G')[black]; {,text('\\( {\\large G} \\ = V SUP{T} V \\ = \\)' ),LabelAlign(0,0)} $G_leftPar FixedText(585,152,'(')[black]; {,text('\\( \\Bigl( \\)' ),LabelAlign(0,0)} $a11 Calculate(550, 150,'','AA* BB* + CC* +')($u1val,$u2val,$u3val)[black]; $a12 Calculate(610, 150,'','AD* BE* + CF* +')($u1val,$u2val,$u3val,$v1val,$v2val,$v3val)[black]; $a21 Calculate(550, 165,'','A0+')($a12)[black]; $a22 Calculate(610, 165,'','AA* BB* + CC* +')($v1val,$v2val,$v3val)[black]; $G_rightPar FixedText(705,152,'(')[black]; {,text('\\( \\Bigr) \\)' ),LabelAlign(0,0)} $det Calculate( 460, 180,'det(G) = ','AD* BC* -')($a11,$a12,$a21,$a22)[black,hidden]; $detGFlag Calculate(480, 200,'Flag = ','A0.03 - @sqrt 2^ 1+ A- 0.03+')($det)[black,hidden]; { Inverse of G } $Gnegpot2 FixedText(235,107,'Gpotmiinus1')[black]; {,text('\\( {\\large{G}}SUP{-1} \\ = \\)' ),LabelAlign(0,0)} $GNegpot2_leftPar FixedText(220,100,'(')[black]; {,text('\\( \\Bigl( \\)' ),LabelAlign(0,0)} $Ia11 Calculate(185, 100,'','AB/ C*')($a22,$det,$detGFlag)[black]; $Ia12 Calculate(250, 100,'','0A- B/ C*')($a21,$det,$detGFlag)[black]; $Ia21 Calculate(185, 115,'','0A+ B*')($Ia12,$detGFlag)[black]; $Ia22 Calculate(250, 115,'','AB/ C*')($a11,$det,$detGFlag)[black]; $GNegpot2_rightPar FixedText(340,100,'(')[black]; {,text('\\( \\Bigr) \\)' ),LabelAlign(0,0)} $c11 Calculate(350, 40,'','AC* BD* +')($Ia11,$Ia12,$u1val,$v1val)[black,hidden]; $c12 Calculate(350, 40,'','AC* BD* +')($Ia11,$Ia12,$u2val,$v2val)[black,hidden]; $c13 Calculate(350, 40,'','AC* BD* +')($Ia11,$Ia12,$u3val,$v3val)[black,hidden]; $c21 Calculate(350, 40,'','AC* BD* +')($Ia21,$Ia22,$u1val,$v1val)[black,hidden]; $c22 Calculate(350, 40,'','AC* BD* +')($Ia21,$Ia22,$u2val,$v2val)[black,hidden]; $c23 Calculate(350, 40,'','AC* BD* +')($Ia21,$Ia22,$u3val,$v3val)[black,hidden]; $p11 Calculate(500, 40,'','AC* BD* +')($u1val,$v1val,$c11,$c21)[black,hidden]; $p12 Calculate(500, 40,'','AC* BD* +')($u1val,$v1val,$c12,$c22)[black,hidden]; $p13 Calculate(500, 40,'','AC* BD* +')($u1val,$v1val,$c13,$c23)[black,hidden]; $p21 Calculate(500, 40,'','AC* BD* +')($u2val,$v2val,$c11,$c21)[black,hidden]; $p22 Calculate(500, 40,'','AC* BD* +')($u2val,$v2val,$c12,$c22)[black,hidden]; $p23 Calculate(500, 40,'','AC* BD* +')($u2val,$v2val,$c13,$c23)[black,hidden]; $p31 Calculate(500, 40,'','AC* BD* +')($u3val,$v3val,$c11,$c21)[black,hidden]; $p32 Calculate(500, 40,'','AC* BD* +')($u3val,$v3val,$c12,$c22)[black,hidden]; $p33 Calculate(500, 40,'','AC* BD* +')($u3val,$v3val,$c13,$c23)[black,hidden]; $Rptx1 Point on object($xRL,2)[red,label('x1')]; {,label('xSUB{1}'),LabelAlign(-3,5),psize(2),highlight} $Rptx2 Point on object($yRL,2)[blue,label('x2')]; {,label('xSUB{2}'),LabelAlign(-3,5),psize(2),highlight} $Rptx3 Point on object($zRL,2)[color(0,150,0),label('x3')]; {,label('xSUB{3}'),LabelAlign(-3,5),psize(2),highlight} $x1x2 VectorTranslation($Rptx1,$Origo,$Rptx2)[magenta, label('(x1,x2)')]; {,label('( xSUB{1},, xSUB{2} )'),LabelAlign(7,5)} $Sx1x2x Segment($Rptx1,$x1x2)[blue]; {,dash(2)} $Sx1x2y Segment($Rptx2,$x1x2)[red]; {,dash(2)} $SOx1x2 Segment($Origo,$x1x2)[magenta]; {,dash(2)} $X VectorTranslation($x1x2,$Origo,$Rptx3)[black, label('X')]; {,label('\\mathbf{x}'),LabelAlign(0,5)} $SXx1x2 Segment($x1x2,$X)[color(0,150,0)]; {,dash(2)} $SOX Segment($Origo,$X)[black,thick]; {,arrowL} $SXx3 Segment($Rptx3,$X)[magenta]; {,dash(2)} $FText_x FixedText(400, 25,'x')[black,bold]; {,text('\\( \\mathbf{x} \\)')} $x_leftPar FixedText(365,40,'(')[black]; {,text('\\( \\Biggl( \\)' ),LabelAlign(0,0)} $x_rightPar FixedText(450,40,'(')[black]; {,text('\\( \\Biggr) \\quad = \\)' ),LabelAlign(0,0)} $x1 Ratio/Points($Origo,$xykk,$Rptx1,330,40,'')[black]; $x2 Ratio/Points($Origo,$yykk,$Rptx2,330,55,'')[black]; $x3 Ratio/Points($Origo,$zykk,$Rptx3,330,70,'')[black]; $FText_xpr FixedText(510, 22,'X''')[black,bold]; {,text('\\( \\mathbf{x}'' \\)')} $xpr_leftPar FixedText(470,40,'(')[black]; {,text('\\( \\Biggl( \\)' ),LabelAlign(0,0)} $x1prval Calculate(433, 40,'','AD* BE* + CF* + G*')($p11,$p12,$p13,$x1,$x2,$x3,$detGFlag)[black]; $x2prval Calculate(433, 55,'','AD* BE* + CF* + G*')($p21,$p22,$p23,$x1,$x2,$x3,$detGFlag)[black]; $x3prval Calculate(433, 70,'','AD* BE* + CF* + G*')($p31,$p32,$p33,$x1,$x2,$x3,$detGFlag)[black]; $xpr_rightPar FixedText(530,40,'(')[black]; {,text('\\( \\Biggr) \\)' ),LabelAlign(0,0)} $x1pr Dilation/MarkedRatio($xykk,$Origo,$x1prval)[red,label('x1''')]; {,label(' x SUB{1}'' '),LabelAlign(7,-10),hideNaN} $x2pr Dilation/MarkedRatio($yykk,$Origo,$x2prval)[blue,label('x2''')]; {,label(' x SUB{2}'' '),LabelAlign(7,-10),hideNaN} $x3pr Dilation/MarkedRatio($zykk,$Origo,$x3prval)[red,label('x3''')]; {,label(' x SUB{3}'' '),LabelAlign(7,-10),hideNaN} $x1prx2pr VectorTranslation($x1pr,$Origo,$x2pr)[magenta, label('(x1'',x2'')')]; {,label('( xSUB{1}'', xSUB{2}'' )'),LabelAlign(7,-10),hideNaN} $Sx1prx2prx Segment($x1pr,$x1prx2pr)[blue]; {,dash(3),hideNaN} $Sx1prx2pry Segment($x2pr,$x1prx2pr)[red]; {,dash(3),hideNaN} $SOx1prx2pr Segment($Origo,$x1prx2pr)[magenta]; {,dash(3),hideNaN} $Xpr VectorTranslation($x1prx2pr,$Origo,$x3pr)[black, label('X''')]; {,label('\\mathbf{x}'''),LabelAlign(-3,-12)} $SXx1prx2pr Segment($x1prx2pr,$Xpr)[color(0,150,0),hidden]; $SOXpr Segment($Origo,$Xpr)[color(0,230,40),thick,layer(30)]; {,arrowL} $SXprx3pr Segment($x3pr,$Xpr)[magenta,hidden]; {,dash(3),hideNaN} $SXXpr Segment($Xpr,$X)[color(153,76,0),thick]; {,arrowL} $PolXXpr Polygon($Origo,$X,$Xpr)[color(9,247,255),layer(20)]; { Product inv G times V^T times x = } $Gnegpot3 FixedText(600,105,'Gpotmiinus1')[black]; {,text('\\( {\\large{G}}SUP{-1} \\)' ),LabelAlign(0,0)} $VT2text FixedText(627,105,'Gpotmiinus1')[black]; {,text('\\( {\\large{V}}SUP{T} \\)' ),LabelAlign(0,0)} $x_leftPar2 FixedText(600,90,'(')[black]; {,text('\\( \\Biggl( \\)' ),LabelAlign(0,0)} $x1val Calculate(567,90,'','A0+')($x1)[black]; $x2val Calculate(567,105,'','A0+')($x2)[black]; $x3val Calculate(567,120,'','A0+')($x3)[black]; $x_rightPar2 FixedText(670,90,'(')[black]; {,text('\\( \\Biggr) \\ = \\)' ),LabelAlign(0,0)} $Prod_leftPar FixedText(700,98,'(')[black]; {,text('\\( \\Bigl( \\)' ),LabelAlign(0,0)} $a1 Calculate(665, 97,'','AD* BE* + CF* +')($c11,$c12,$c13,$x1,$x2,$x3)[black]; $a2 Calculate(665, 112,'','AD* BE* + CF* +')($c21,$c22,$c23,$x1,$x2,$x3)[black]; $Prod_rightPar FixedText(750,98,'(')[black]; {,text('\\( \\Bigr) \\)' ),LabelAlign(0,0)} $Ratio Calculate(665, 100,'','A 0 * 0.15 +')($c11)[black,hidden]; $PtXprX Dilation/MarkedRatio($X,$Xpr,$Ratio)[blue,hidden]; $PtXprO Dilation/MarkedRatio($Origo,$Xpr,$Ratio)[blue,hidden]; $PtTr VectorTranslation($PtXprX,$Xpr,$PtXprO)[blue,hidden]; $OrthPolygon Polygon($Xpr,$PtXprX,$PtTr,$PtXprO)[blue,layer(50)]; $SBV1Segm ShowButton(5, 150,'V1 segments')($u1,$u2,$u3,$u1u2,$Su1u2x,$Su1u2y,$SOu1u2,$SUu1u2,$SUu3)[black,bold]; {,text('\\( {\\mathbf{v}}SUB{1} \\) segments' ),LabelAlign(0,0)} $HBV1Segm HideButton(90,150,'Hide')($u1,$u2,$u3,$u1u2,$Su1u2x,$Su1u2y,$SOu1u2,$SUu1u2,$SUu3)[black]; $SBV2Segm ShowButton(5, 170,'V2 segments')($v1,$v2,$v3,$v1v2,$Sv1v2x,$Sv1v2y,$SOv1v2,$SVv1v2,$SVv3)[black,bold]; {,text('\\( {\\mathbf{v}}SUB{2} \\) segments' ),LabelAlign(0,0)} $HBV2Segm HideButton(90,170,'Hide')($v1,$v2,$v3,$v1v2,$Sv1v2x,$Sv1v2y,$SOv1v2,$SVv1v2,$SVv3)[black]; $SBXSegm ShowButton(5, 190,'X segments')($Rptx1,$Rptx2,$Rptx3,$x1x2,$Sx1x2x,$Sx1x2y,$SXx3,$SOx1x2,$SXx1x2)[black,bold]; {,text('\\( \\mathbf{x} \\) segments' ),LabelAlign(0,0)} $HBXSegm HideButton(90,190,'Hide')($Rptx1,$Rptx2,$Rptx3,$x1x2,$Sx1x2x,$Sx1x2y,$SXx3,$SOx1x2,$SXx1x2)[black]; $SBXprSegm ShowButton(5, 210,'X'' segments')($x1pr,$x2pr,$x3pr,$x1prx2pr,$Sx1prx2prx,$Sx1prx2pry,$SOx1prx2pr,$SXx1prx2pr,$SXprx3pr)[black,bold,hidden]; {,text('\\( \\mathbf{x}'' \\) segments' ),LabelAlign(0,0)} $HBXprSegm HideButton(90,210,'Hide')( $x1pr,$x2pr,$x3pr,$x1prx2pr,$Sx1prx2prx,$Sx1prx2pry,$SOx1prx2pr,$SXx1prx2pr,$SXprx3pr)[black,hidden]; { The x1x2-Plane } $x1x2Origo FixedPoint(575,350)[black, label('0')]; {,LabelAlign(-12,-12)} $x1ykk FixedPoint(625,350)[white, label('1')]; {,LabelAlign(-4,-12)} $x2ykk FixedPoint(575,300)[white, label('1')]; {,LabelAlign(-15,-2)} { Unit plane vectors } $Sx1x2Origo_x1ykk Segment($x1x2Origo,$x1ykk)[red,thick]; {,arrowL} $Sx1x2Origo_x2ykk Segment($x1x2Origo,$x2ykk)[blue,thick]; {,arrowL} { Axes } $x1AxisLeft FixedPoint(420,350) [white,hidden]; $x1AxisRight FixedPoint(720,350) [white,hidden]; $x1Axis Segment($x1AxisLeft,$x1AxisRight)[red]; {,arrowL} $FTextx1 FixedText(770, 365,'x1')[red]; {,text('\\( x SUB{1} \\)')} $x2AxisLow FixedPoint(575,500) [white,hidden]; $x2AxisHigh FixedPoint(575,200) [white,hidden]; $x2Axis Segment($x2AxisLow,$x2AxisHigh)[blue]; {,arrowL} $FTextx2 FixedText(615, 213,'x2')[blue]; {,text('\\( x SUB{2} \\)')} $v11Plane Dilation/MarkedRatio($x1ykk,$x1x2Origo,$u1val)[color(255,168,17),label('v11')]; {,label('v SUB{11}'),LabelAlign(-5,4)} $v21Plane Dilation/MarkedRatio($x2ykk,$x1x2Origo,$u2val)[color(255,168,17),label('v21')]; {,label('v SUB{21}'),LabelAlign(5,-5)} $V1Plane VectorTranslation($v21Plane,$x1x2Origo,$v11Plane)[color(255,168,17), label('v1')]; {,label('{\\mathbf{v}}SUB{1}'),LabelAlign(3,-3)} $SOV1Plane Segment($x1x2Origo,$V1Plane)[color(255,168,17),thick]; {,arrowL} $v12Plane Dilation/MarkedRatio($x1ykk,$x1x2Origo,$v1val)[color(255,168,17),label('v12')]; {,label('v SUB{12}'),LabelAlign(-5,4)} $v22Plane Dilation/MarkedRatio($x2ykk,$x1x2Origo,$v2val)[color(255,168,17),label('v22')]; {,label('v SUB{22}'),LabelAlign(5,-5)} $V2Plane VectorTranslation($v22Plane,$x1x2Origo,$v12Plane)[color(255,168,17), label('v2')]; {,label('{\\mathbf{v}}SUB{2}'),LabelAlign(3,-3)} $SOV2Plane Segment($x1x2Origo,$V2Plane)[color(255,168,17),thick]; {,arrowL} ${ $OV FixedPoint(575,350) [black, label('0'),hidden]; $Vref FixedPoint(625,350) [white, label('1'),hidden]; $LengthV1 Calculate(600, 40,'||V1|| = ','AA* BB* + CC* + @sqrt')($u1val,$u2val,$u3val)[black,hidden]; $LengthV2 Calculate(600, 60,'||V2|| = ','AA* BB* + CC* + @sqrt')($v1val,$v2val,$v3val)[black,hidden]; $angle Calculate(600, 80,'ang = ','AD* BE* + CF* + G / H / @acos')($u1val,$u2val,$u3val,$v1val,$v2val,$v3val,$LengthV1,$LengthV2)[black,hidden]; $V1Plane Dilation/MarkedRatio($Vref,$OV,$LengthV1)[label('V1'),color(255,168,17),hidden]; {,label('{\\mathbf{v}}SUB{1}'),LabelAlign(0,5)} $SOV1Plane Segment($OV,$V1Plane)[color(255,168,17),thick,hidden]; {,arrowL} $V2PlaneHor Dilation/MarkedRatio($Vref,$OV,$LengthV2)[label('V2'),color(255,168,17),hidden]; {,label('{\\mathbf{v}}SUB{2}'),LabelAlign(0,5)} $V2Plane Rotation/MeasuredAngle($V2PlaneHor,$OV,$angle)[label('V2'),color(255,168,17),hidden]; {,label('{\\mathbf{v}}SUB{2}'),LabelAlign(0,5)} $SOV2Plane Segment($OV,$V2Plane)[color(255,168,17),thick,hidden]; {,arrowL} $} $V1plusV2 VectorTranslation($V1Plane,$x1x2Origo,$V2Plane)[hidden]; $PlV1V2Pol Polygon($x1x2Origo,$V1Plane,$V1plusV2,$V2Plane)[yellow,layer(10)]; $V1minusV2 VectorTranslation($V1Plane,$V2Plane,$x1x2Origo)[hidden]; $V2minusV1 VectorTranslation($V2Plane,$V1Plane,$x1x2Origo)[hidden]; $minusV1plusV2 VectorTranslation($V2minusV1,$V1plusV2,$V1minusV2)[hidden]; $PlV1V2 Polygon($V1plusV2,$V2minusV1,$minusV1plusV2,$V1minusV2)[color(240,245,183)]; $a1V1Plane Dilation/MarkedRatio($V1Plane,$x1x2Origo,$a1)[label('a1V1'),color(255,168,17),hidden]; $a2V2Plane Dilation/MarkedRatio($V2Plane,$x1x2Origo,$a2)[label('a2V2'),color(255,168,17),hidden]; $XprPlane VectorTranslation($a1V1Plane,$x1x2Origo,$a2V2Plane)[color(0,230,40),label('X''')]; {,label('\\mathbf{x}'''),LabelAlign(-3,-12)} $SOVXprPlane Segment($x1x2Origo,$XprPlane)[color(0,230,40),thick]; {,arrowL} { The orthogonal component line } $OCO FixedPoint(770,350)[black,label('X''')]; {,label('\\mathbf{x}'''),LabelAlign(5,0)} $OCykk FixedPoint(770,300)[white,label('1')]; {,LabelAlign(5,0)} $OCline Line($OCO,$OCykk)[blue,hidden]; $OCUp FixedPoint(770,25)[hidden]; $OClinevis Segment($OCO,$OCUp)[white]; {,arrowL} $DistXXpr Calculate(665, 100,'','AD-2^ BE-2^ + CF-2^ + @sqrt')($x1,$x2,$x3,$x1prval,$x2prval,$x3prval)[black,hidden]; $OCOXXpr Dilation/MarkedRatio($OCykk,$OCO,$DistXXpr)[color(153,76,0),label('X')]; {,label('\\mathbf{x}'),LabelAlign(5,0)} $SOCOXXpr Segment($OCO,$OCOXXpr)[color(153,76,0),thick]; {,arrowL} { Dividing vertical segments } $UpperPt FixedPoint(400,100)[hidden]; $LowerPt FixedPoint(400,530)[hidden]; $VLine Segment($UpperPt,$LowerPt)[color(235,235,240),thick]; $UpperPt2 FixedPoint(750, 0)[hidden]; $LowerPt2 FixedPoint(750,530)[hidden]; $VLine2 Segment($UpperPt2,$LowerPt2)[color(235,235,240),thick];