{"group":{"id":1,"name":"Community","lockable":false,"created_at":"2012-01-18T18:02:15.000Z","updated_at":"2025-12-14T01:33:56.000Z","description":"Problems submitted by members of the MATLAB Central community.","is_default":true,"created_by":161519,"badge_id":null,"featured":false,"trending":false,"solution_count_in_trending_period":0,"trending_last_calculated":"2025-12-14T00:00:00.000Z","image_id":null,"published":true,"community_created":false,"status_id":2,"is_default_group_for_player":false,"deleted_by":null,"deleted_at":null,"restored_by":null,"restored_at":null,"description_opc":null,"description_html":null,"published_at":null},"problems":[{"id":1305,"title":"Creation of 2D Sinc Surface","description":"This Challenge is to efficiently create the Sombrero function of various sizes, resolutions, and frequencies.\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/sinc64_3_1.png\u003e\u003e\r\n\r\n*Figure Example:* Freq=1; XY_max_value=3; Num Rows / Cols 64\r\n\r\nCreate the 2-D array m(row,col)=sin(pi*R*freq)/(pi*R*freq) where R is the distance from the center of the array. The array is [nrc,nrc] with X(1,1)=Y(1,1)= - xymax and X(nrc,nrc)=Y(nrc,nrc)=xymax.\r\n\r\n*Input:* [xymax,nrc,freq]\r\n\r\n*Output:* [m] an array of size(nrc,nrc) representing the sin(x)/x function\r\n\r\n*Hints:*\r\n\r\nMatlab provides excellent functions and array operators to readily create vectors and grids. [ linspace, meshgrid ]  \r\n\r\n*Future:*\r\n\r\nPolar grid creation to produce Zernike surfaces","description_html":"\u003cp\u003eThis Challenge is to efficiently create the Sombrero function of various sizes, resolutions, and frequencies.\u003c/p\u003e\u003cimg src = \"https://sites.google.com/site/razapor/matlab_cody/sinc64_3_1.png\"\u003e\u003cp\u003e\u003cb\u003eFigure Example:\u003c/b\u003e Freq=1; XY_max_value=3; Num Rows / Cols 64\u003c/p\u003e\u003cp\u003eCreate the 2-D array m(row,col)=sin(pi*R*freq)/(pi*R*freq) where R is the distance from the center of the array. The array is [nrc,nrc] with X(1,1)=Y(1,1)= - xymax and X(nrc,nrc)=Y(nrc,nrc)=xymax.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e [xymax,nrc,freq]\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e [m] an array of size(nrc,nrc) representing the sin(x)/x function\u003c/p\u003e\u003cp\u003e\u003cb\u003eHints:\u003c/b\u003e\u003c/p\u003e\u003cp\u003eMatlab provides excellent functions and array operators to readily create vectors and grids. [ linspace, meshgrid ]\u003c/p\u003e\u003cp\u003e\u003cb\u003eFuture:\u003c/b\u003e\u003c/p\u003e\u003cp\u003ePolar grid creation to produce Zernike surfaces\u003c/p\u003e","function_template":"function m=sinx_div_x(xymax,nrc,freq)\r\n m=zeros(nrc);","test_suite":"%%\r\nnrc=65;\r\nxymax=3;\r\nfreq=1;\r\n\r\nm=sinx_div_x(xymax,nrc,freq);\r\n\r\n%figure(3);imagesc(m)\r\n%figure(4);surf(m)\r\n\r\n xv=repmat(-xymax:2*xymax/(nrc-1):xymax,nrc,1);\r\n yv=xv';\r\n mexp=zeros(nrc);\r\n for r=1:nrc\r\n  for c=1:nrc\r\n  Rv=sqrt(xv(r,c)^2+yv(r,c)^2);\r\n  if Rv\u003eeps\r\n   mexp(r,c)=sin(Rv*pi*freq)/(Rv*pi*freq);\r\n  else\r\n   mexp(r,c)=1;\r\n  end\r\n  end % c\r\n end %r\r\n\r\n%figure(1);imagesc(mexp)\r\n%figure(2);surf(mexp)\r\n\r\nassert(~any(any(isnan(m))))\r\nassert(max(max(abs(m-mexp)))\u003c.01)\r\n\r\n%%\r\nnrc=127;\r\nxymax=3;\r\nfreq=4;\r\n\r\nm=sinx_div_x(xymax,nrc,freq);\r\n\r\n%figure(3);imagesc(m)\r\n%figure(4);surf(m)\r\n\r\n xv=repmat(-xymax:2*xymax/(nrc-1):xymax,nrc,1);\r\n yv=xv';\r\n mexp=zeros(nrc);\r\n for r=1:nrc\r\n  for c=1:nrc\r\n  Rv=sqrt(xv(r,c)^2+yv(r,c)^2);\r\n  if Rv\u003eeps\r\n   mexp(r,c)=sin(Rv*pi*freq)/(Rv*pi*freq);\r\n  else\r\n   mexp(r,c)=1;\r\n  end\r\n  end % c\r\n end %r\r\n\r\n%figure(1);imagesc(mexp)\r\n%figure(2);surf(mexp)\r\n\r\nassert(~any(any(isnan(m))))\r\nassert(max(max(abs(m-mexp)))\u003c.01)\r\n\r\n%%\r\nnrc=96;\r\nxymax=16;\r\nfreq=0.5;\r\n\r\nm=sinx_div_x(xymax,nrc,freq);\r\n\r\n%figure(3);imagesc(m)\r\n%figure(4);surf(m)\r\n\r\n xv=repmat(-xymax:2*xymax/(nrc-1):xymax,nrc,1);\r\n yv=xv';\r\n mexp=zeros(nrc);\r\n for r=1:nrc\r\n  for c=1:nrc\r\n  Rv=sqrt(xv(r,c)^2+yv(r,c)^2);\r\n  if Rv\u003eeps\r\n   mexp(r,c)=sin(Rv*pi*freq)/(Rv*pi*freq);\r\n  else\r\n   mexp(r,c)=1;\r\n  end\r\n  end % c\r\n end %r\r\n\r\n%figure(1);imagesc(mexp)\r\n%figure(2);surf(mexp)\r\n\r\nassert(~any(any(isnan(m))))\r\nassert(max(max(abs(m-mexp)))\u003c.01)\r\n\r\n\r\n\r\n\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":2,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":24,"test_suite_updated_at":"2013-03-01T06:34:16.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2013-02-28T03:54:48.000Z","updated_at":"2025-06-24T13:11:54.000Z","published_at":"2013-02-28T05:36:10.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.png\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Challenge is to efficiently create the Sombrero function of various sizes, resolutions, and frequencies.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eFigure Example:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Freq=1; XY_max_value=3; Num Rows / Cols 64\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eCreate the 2-D array m(row,col)=sin(pi*R*freq)/(pi*R*freq) where R is the distance from the center of the array. The array is [nrc,nrc] with X(1,1)=Y(1,1)= - xymax and X(nrc,nrc)=Y(nrc,nrc)=xymax.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [xymax,nrc,freq]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [m] an array of size(nrc,nrc) representing the sin(x)/x function\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eHints:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eMatlab provides excellent functions and array operators to readily create vectors and grids. [ linspace, meshgrid ]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eFuture:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePolar grid creation to produce Zernike surfaces\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\"}]}"},{"id":449,"title":"Grandpa's telescope","description":"Two grandkids Dorothy and Benjamin are sharing a telescope made by their grandpa, who used an old lens of spectacles as the objective. This objective lens has power of p diopter. Dorothy definitively watches a doghouse at distance d meters. Benjamin basically watches a birdhouse at distance b meters. After watching the doghouse, how much shift of the eyepiece in mm is necessary to watch the birdhouse? Please give a general solution, the test suite may be more extensive later.","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.4333px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 105px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 52.5px; transform-origin: 407px 52.5px; vertical-align: baseline; \"\u003e\u003cdiv style=\"font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 52.5px; text-align: left; transform-origin: 384px 52.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 383.5px 8px; transform-origin: 383.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eTwo grandkids Dorothy and Benjamin are sharing a telescope made by their grandpa, who used an old lens of spectacles as the objective. This objective lens has power of p diopter. Dorothy definitively watches a doghouse at distance d meters. Benjamin basically watches a birdhouse at distance b meters. After watching the doghouse, how much shift of the eyepiece in mm is necessary to watch the birdhouse? Please give a general solution, the test suite may be more extensive later.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function mm = telescope(d,b,p)\r\n% diopter = 1/focal_length_meter = 1/object_distance + 1/image_distance\r\nmm=1000*meter;\r\nend","test_suite":"%%\r\nfiletext = fileread('telescope.m');\r\nillegal = contains(filetext, 'assignin') || contains(filetext, 'regexp') || ...\r\n          contains(filetext, 'switch') || contains(filetext, 'elseif'); \r\nassert(~illegal)\r\n\r\n%%\r\nd=200; b=100; p=0.5;\r\nmm = telescope(d,b,p)\r\nmm_correct = 21;\r\nassert(abs(round(mm) - mm_correct)\u003c1000*eps)\r\n\r\n%%\r\nd=100; b=200; p=0.5;\r\nmm = telescope(d,b,p)\r\nmm_correct = 21;\r\nassert(abs(round(abs(mm)) - mm_correct)\u003c1000*eps)\r\n\r\n%%\r\nd=100; b=100; p=0.5;\r\nmm = telescope(d,b,p)\r\nmm_correct = 0;\r\nassert(round(mm) == mm_correct)\r\n\r\n%%\r\nd=51; b=26; p=1;\r\nmm = telescope(d,b,p)\r\nmm_correct = 20;\r\nassert(round(mm) == mm_correct)\r\n\r\n%%\r\nd=4004; b=8; p=0.25;\r\nmm = telescope(d,b,p)\r\nmm_correct = d-b;\r\nassert(round(mm) == mm_correct)\r\n\r\n%%\r\nd=255; b=55; p=0.2;\r\nmm = telescope(d,b,p)\r\nmm_correct = (d-b)*p*10;\r\nassert(abs(mm - mm_correct)\u003c1e-4)\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":3,"created_by":166,"edited_by":223089,"edited_at":"2023-01-07T06:15:33.000Z","deleted_by":null,"deleted_at":null,"solvers_count":26,"test_suite_updated_at":"2023-01-07T06:15:33.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2012-03-04T22:25:38.000Z","updated_at":"2025-12-12T09:35:32.000Z","published_at":"2012-03-05T20:14:39.000Z","restored_at":null,"restored_by":null,"spam":null,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTwo grandkids Dorothy and Benjamin are sharing a telescope made by their grandpa, who used an old lens of spectacles as the objective. This objective lens has power of p diopter. Dorothy definitively watches a doghouse at distance d meters. Benjamin basically watches a birdhouse at distance b meters. After watching the doghouse, how much shift of the eyepiece in mm is necessary to watch the birdhouse? Please give a general solution, the test suite may be more extensive later.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":44070,"title":"Under the sea: Snell's law \u0026 total internal reflection","description":"\u003chttps://en.wikipedia.org/wiki/Snell's_law\u003e\r\n\r\nWhen a light travels from one medium to another medium, depending on the refractive index, the light will bend with a certain angle. For certain combination of materials, it might be that light cannot escape one medium at all from a certain angle (greater than critical angle). It is called total internal reflection. If you point a flashlight from \"under the sea\" the light won't leave the water at all. \r\n\r\nFor given refractive indices, find critical angle where total internal reflection happens. If total internal reflection does not happen for any angle, then return \"-1\".\r\n\r\nExample1: n_in = 1.333, n_out = 1, theta_crit = 48.6 degrees;\r\nExample2: n_out = 1, n_in = 1.333, theta_crit = -1 (total internal reflection does not occur, if you are in the air, and beaming light at the water.)\r\n\r\nInput of function: n_in, n_out (refractive index, positive) \r\nOutput: critical angle (rounded to nearest integer), if total internal reflection occurs. Else return -1.","description_html":"\u003cp\u003e\u003ca href = \"https://en.wikipedia.org/wiki/Snell's_law\"\u003ehttps://en.wikipedia.org/wiki/Snell's_law\u003c/a\u003e\u003c/p\u003e\u003cp\u003eWhen a light travels from one medium to another medium, depending on the refractive index, the light will bend with a certain angle. For certain combination of materials, it might be that light cannot escape one medium at all from a certain angle (greater than critical angle). It is called total internal reflection. If you point a flashlight from \"under the sea\" the light won't leave the water at all.\u003c/p\u003e\u003cp\u003eFor given refractive indices, find critical angle where total internal reflection happens. If total internal reflection does not happen for any angle, then return \"-1\".\u003c/p\u003e\u003cp\u003eExample1: n_in = 1.333, n_out = 1, theta_crit = 48.6 degrees;\r\nExample2: n_out = 1, n_in = 1.333, theta_crit = -1 (total internal reflection does not occur, if you are in the air, and beaming light at the water.)\u003c/p\u003e\u003cp\u003eInput of function: n_in, n_out (refractive index, positive) \r\nOutput: critical angle (rounded to nearest integer), if total internal reflection occurs. Else return -1.\u003c/p\u003e","function_template":"function theta_crit = totalInternalReflection(n_in,n_out)\r\n  theta_crit = -1;\r\nend","test_suite":"%%\r\nn_in = 3; n_out = 3;\r\ntheta_crit_correct = -1;\r\nassert(isequal(totalInternalReflection(n_in,n_out),theta_crit_correct))\r\n\r\n%%\r\nn_in = 1; n_out = 1.333;\r\ntheta_crit_correct = -1;\r\nassert(isequal(totalInternalReflection(n_in,n_out),theta_crit_correct))\r\n\r\n%%\r\nn_in = 1.333; n_out = 1;\r\ntheta_crit_correct = 49;\r\nassert(isequal(totalInternalReflection(n_in,n_out),theta_crit_correct))\r\n\r\n%%\r\nn_in = 4; n_out = 3;\r\ntheta_crit_correct = 49;\r\nassert(isequal(totalInternalReflection(n_in,n_out),theta_crit_correct))\r\n\r\n%%\r\nn_in = 4; n_out = 2;\r\ntheta_crit_correct = 30;\r\nassert(isequal(totalInternalReflection(n_in,n_out),theta_crit_correct))","published":true,"deleted":false,"likes_count":2,"comments_count":6,"created_by":115733,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":58,"test_suite_updated_at":"2017-02-16T21:45:07.000Z","rescore_all_solutions":false,"group_id":37,"created_at":"2017-02-14T00:59:14.000Z","updated_at":"2026-02-08T13:00:17.000Z","published_at":"2017-02-14T00:59:14.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Snell's_law\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e\u0026lt;https://en.wikipedia.org/wiki/Snell's_law\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e\u0026gt;\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhen a light travels from one medium to another medium, depending on the refractive index, the light will bend with a certain angle. For certain combination of materials, it might be that light cannot escape one medium at all from a certain angle (greater than critical angle). It is called total internal reflection. If you point a flashlight from \\\"under the sea\\\" the light won't leave the water at all.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFor given refractive indices, find critical angle where total internal reflection happens. If total internal reflection does not happen for any angle, then return \\\"-1\\\".\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eExample1: n_in = 1.333, n_out = 1, theta_crit = 48.6 degrees; Example2: n_out = 1, n_in = 1.333, theta_crit = -1 (total internal reflection does not occur, if you are in the air, and beaming light at the water.)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eInput of function: n_in, n_out (refractive index, positive) Output: critical angle (rounded to nearest integer), if total internal reflection occurs. Else return -1.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":433,"title":"jogging?","description":"Imagine x-y coordinate system and you are at the origin and your partner is on the x-axis at some small distance (d) away from you.  You and your partner started jogging simultaneously, left foot first. You and your partner maintained identical rate of steps per second (r) and length of every step (s). Your track and your partner's track are parallel but at angle alpha to x-axis. Please note that alpha is less than 90 degrees. At the initial moment of starting your partner appeared to be ahead of you due to the angle alpha not being 90 degrees. After you finished jogging a long distance, a photograph of your foot prints at a random location looked as if your partner was neither behind nor ahead of you. Please calculate the largest alpha (degrees) possible under these constraints.","description_html":"\u003cp\u003eImagine x-y coordinate system and you are at the origin and your partner is on the x-axis at some small distance (d) away from you.  You and your partner started jogging simultaneously, left foot first. You and your partner maintained identical rate of steps per second (r) and length of every step (s). Your track and your partner's track are parallel but at angle alpha to x-axis. Please note that alpha is less than 90 degrees. At the initial moment of starting your partner appeared to be ahead of you due to the angle alpha not being 90 degrees. After you finished jogging a long distance, a photograph of your foot prints at a random location looked as if your partner was neither behind nor ahead of you. Please calculate the largest alpha (degrees) possible under these constraints.\u003c/p\u003e","function_template":"function degrees = jogging(d,r,s)\r\ndegrees=0;\r\nend","test_suite":"%%\r\nd = 4; r = 1; s = 1; degrees_correct = 60;\r\ndegrees = round(jogging(d,r,s));\r\nassert(degrees==degrees_correct)\r\n%%\r\nd = 5; r = 1; s = 1; degrees_correct = 66;\r\ndegrees = round(jogging(d,r,s));\r\nassert(degrees==degrees_correct)\r\n%%\r\nd = 6; r = 1; s = 1; degrees_correct = 71;\r\ndegrees = round(jogging(d,r,s));\r\nassert(degrees==degrees_correct)\r\n%%\r\nd = 7; r = 1; s = 1; degrees_correct = 73;\r\ndegrees = round(jogging(d,r,s));\r\nassert(degrees==degrees_correct)\r\n%%\r\nd = 8; r = 1; s = 1; degrees_correct = 76;\r\ndegrees = round(jogging(d,r,s));\r\nassert(degrees==degrees_correct)\r\n%%\r\nd = 7; r = 1; s = 2; degrees_correct = 55;\r\ndegrees = round(jogging(d,r,s));\r\nassert(degrees==degrees_correct)\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":3,"created_by":166,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":40,"test_suite_updated_at":"2012-03-02T10:41:06.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2012-03-01T21:44:31.000Z","updated_at":"2026-01-31T12:59:31.000Z","published_at":"2012-03-02T16:52:52.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eImagine x-y coordinate system and you are at the origin and your partner is on the x-axis at some small distance (d) away from you. You and your partner started jogging simultaneously, left foot first. You and your partner maintained identical rate of steps per second (r) and length of every step (s). Your track and your partner's track are parallel but at angle alpha to x-axis. Please note that alpha is less than 90 degrees. At the initial moment of starting your partner appeared to be ahead of you due to the angle alpha not being 90 degrees. After you finished jogging a long distance, a photograph of your foot prints at a random location looked as if your partner was neither behind nor ahead of you. Please calculate the largest alpha (degrees) possible under these constraints.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":1650,"title":"LASER Tracker - Mirror Distance and Angle","description":"Determine the mirror's distance and relative angle to the LASER Tracker given the distances to a reference SMR (Spherical Mounted Retro-reflector) and the angle to the SMR.\r\n\r\nTheta is the included angle between d1 and d2.\r\nPhi is the angle of interest and is between d2 and d3.\r\nThe Test method is locate the SMR to capture the mirror reflectance. Record L. Rotate the SMR to be directly viewed by the Tracker. Record d1 and Theta.\r\nGiven Theta, d1, and d2+d3 determine d2 and Phi.\r\nInput: [d1, L, Theta] where L=d2+d3 and d1*cos(Theta) \u003c d2\r\nOutput: [d2 Phi]\r\nExamples:\r\nInput: [2^.5, 2+2^.5, pi/4]..... Output: [2 pi/4]\r\nInput: [2.3994, 4, .2991]..... Output: [3, pi/4 ]","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.440001px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: none; white-space: normal; \"\u003e\u003cdiv style=\"block-size: 636px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 332px 318px; transform-origin: 332px 318px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 309px 21px; text-align: left; transform-origin: 309px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eDetermine the mirror's distance and relative angle to the LASER Tracker given the distances to a reference SMR (Spherical Mounted Retro-reflector) and the angle to the SMR.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 294px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 309px 147px; text-align: center; transform-origin: 309px 147px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" width=\"582\" height=\"288\" style=\"vertical-align: baseline;width: 582px;height: 288px\" src=\"data:image/JPEG;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAEgAkYDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA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Qyy8tLKRzJIeWY/U1eoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACql1ptjesHurK3nZRgGWJXI/MVbpD0pMDzX4XaVptxpGrtNp9pIy6xdKpeBSQA/AHHapj4m8Wap4z13w/okGlxRaaYmFzdK5G1lztwp5JPfsBVn4WwTQaPrCzRSRltYumAdSuQX4Iz2pnhOCZPih42leGRY5GtdjspAbEZzg96F09BdH6/qT3mreM7q+vI7G30vSrOz+U3Oqbj9pOOXQKRtQe5NZumfFISeAdR1++ske50+6Nk0drLujuZcqAY2/uksPX8a5pY9LHiXXz480fU9T1H7W39mxG3lmjeDJ2LEF+Ue+f8AGqGjeH9V1P4a+KLS20eW01CHW/tsOntHs4UowRe3QEcU15je56LZaz400/VdNTXdOsriw1BthfTkkLWbkZHmZzlexYYwawpPEln4X+Ifi+7uVaWaRLSO2tY+ZLiUpwij/OK1V8cXviLUNJ0/w3aXcUjSB9SmurN1S2jA+ZCWABYngYrEv/BVv4o+IHi5riCSK7S3tvsF6AQYZAudyH6gZo6iOkvfFer+GfCMOoeILS3l1i8nWG2sLQlRvf7qFiTkju3Sqk3ijxR4auLGfxLHpNzp15Ols76eXVrR3OFLbidy544xXO+IYtW8efDywuLjSJJdX0a/Vr7TmUqZ9mVbb0zuByMU23g8C391p0Xh/wADT3t9LMhlSWGWBbRcjLuzDHB7DOaOodDopPE/izUvHWueHNFi0uOPTlhkFzdq54dc7SFPJJ6HjGK9BiD+UglIMmPmKjAz3xXA+F7eaP4u+NZnhkWJ47TY7KQrYQ5wehr0KhbD6hRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUmASCQMilooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//9k=\" data-image-state=\"image-loaded\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 309px 10.5px; text-align: left; transform-origin: 309px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eTheta is the included angle between d1 and d2.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 309px 10.5px; text-align: left; transform-origin: 309px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003ePhi is the angle of interest and is between d2 and d3.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 309px 21px; text-align: left; transform-origin: 309px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eThe Test method is locate the SMR to capture the mirror reflectance. Record L. Rotate the SMR to be directly viewed by the Tracker. Record d1 and Theta.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 309px 10.5px; text-align: left; transform-origin: 309px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eGiven Theta, d1, and d2+d3 determine d2 and Phi.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 309px 10.5px; text-align: left; transform-origin: 309px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eInput:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e [d1, L, Theta] where L=d2+d3 and d1*cos(Theta) \u0026lt; d2\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 309px 10.5px; text-align: left; transform-origin: 309px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eOutput:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e [d2 Phi]\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 309px 10.5px; text-align: left; transform-origin: 309px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eExamples:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 309px 10.5px; text-align: left; transform-origin: 309px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eInput: [2^.5, 2+2^.5, pi/4]..... Output: [2 pi/4]\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 309px 10.5px; text-align: left; transform-origin: 309px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eInput: [2.3994, 4, .2991]..... Output: [3, pi/4 ]\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function [d2 Phi]=solve_mirror(d1,L,Theta)\r\n d2=0;\r\n Phi=pi();\r\nend","test_suite":"%%\r\nd2=2;\r\nPhi=pi/4;\r\nd3=sqrt(2);\r\n\r\nx1=d2-d3*cos(Phi);\r\ny1=d3*sin(Phi);\r\n\r\nTheta=atan(y1/x1);\r\nd1=hypot(x1,y1);\r\n\r\n[od2, oPhi]=solve_mirror(d1,d2+d3,Theta);\r\n\r\nassert(abs(d2-od2)\u003c.001)\r\nassert(abs(Phi-oPhi)\u003c.001)\r\n%%\r\nd2=2;\r\nPhi=1.5*pi/4;\r\nd3=2;\r\n\r\nx1=d2-d3*cos(Phi);\r\ny1=d3*sin(Phi);\r\n\r\nTheta=atan(y1/x1);\r\nd1=hypot(x1,y1);\r\n\r\n[od2, oPhi]=solve_mirror(d1,d2+d3,Theta)\r\n\r\nassert(abs(d2-od2)\u003c.001)\r\nassert(abs(Phi-oPhi)\u003c.001)\r\n%%\r\nd2=3;\r\nPhi=.5*pi/4;\r\nd3=1;\r\n\r\nx1=d2-d3*cos(Phi);\r\ny1=d3*sin(Phi);\r\n\r\nTheta=atan(y1/x1);\r\nd1=hypot(x1,y1);\r\n\r\n[od2, oPhi]=solve_mirror(d1,d2+d3,Theta)\r\n\r\nassert(abs(d2-od2)\u003c.001)\r\nassert(abs(Phi-oPhi)\u003c.001)\r\n%%\r\nd2=3+rand;\r\nPhi=(.5+rand/10)*pi/4;\r\nd3=1+rand;\r\n\r\nx1=d2-d3*cos(Phi);\r\ny1=d3*sin(Phi);\r\n\r\nTheta=atan(y1/x1);\r\nd1=hypot(x1,y1);\r\n\r\n[od2, oPhi]=solve_mirror(d1,d2+d3,Theta)\r\n\r\nassert(abs(d2-od2)\u003c.001)\r\nassert(abs(Phi-oPhi)\u003c.001)\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":3097,"edited_by":26769,"edited_at":"2024-11-19T13:38:39.000Z","deleted_by":null,"deleted_at":null,"solvers_count":35,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":26,"created_at":"2013-06-15T23:44:39.000Z","updated_at":"2026-02-19T10:13:32.000Z","published_at":"2013-06-16T00:28:14.000Z","restored_at":null,"restored_by":null,"spam":null,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eDetermine the mirror's distance and relative angle to the LASER Tracker given the distances to a reference SMR (Spherical Mounted Retro-reflector) and the angle to the SMR.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"center\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"288\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"582\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTheta is the included angle between d1 and d2.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePhi is the angle of interest and is between d2 and d3.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Test method is locate the SMR to capture the mirror reflectance. Record L. Rotate the SMR to be directly viewed by the Tracker. Record d1 and Theta.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGiven Theta, d1, and d2+d3 determine d2 and Phi.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [d1, L, Theta] where L=d2+d3 and d1*cos(Theta) \u0026lt; d2\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [d2 Phi]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eExamples:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eInput: [2^.5, 2+2^.5, pi/4]..... Output: [2 pi/4]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eInput: [2.3994, 4, .2991]..... Output: [3, pi/4 ]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.JPEG\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAEgAkYDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA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Qyy8tLKRzJIeWY/U1eoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACql1ptjesHurK3nZRgGWJXI/MVbpD0pMDzX4XaVptxpGrtNp9pIy6xdKpeBSQA/AHHapj4m8Wap4z13w/okGlxRaaYmFzdK5G1lztwp5JPfsBVn4WwTQaPrCzRSRltYumAdSuQX4Iz2pnhOCZPih42leGRY5GtdjspAbEZzg96F09BdH6/qT3mreM7q+vI7G30vSrOz+U3Oqbj9pOOXQKRtQe5NZumfFISeAdR1++ske50+6Nk0drLujuZcqAY2/uksPX8a5pY9LHiXXz480fU9T1H7W39mxG3lmjeDJ2LEF+Ue+f8AGqGjeH9V1P4a+KLS20eW01CHW/tsOntHs4UowRe3QEcU15je56LZaz400/VdNTXdOsriw1BthfTkkLWbkZHmZzlexYYwawpPEln4X+Ifi+7uVaWaRLSO2tY+ZLiUpwij/OK1V8cXviLUNJ0/w3aXcUjSB9SmurN1S2jA+ZCWABYngYrEv/BVv4o+IHi5riCSK7S3tvsF6AQYZAudyH6gZo6iOkvfFer+GfCMOoeILS3l1i8nWG2sLQlRvf7qFiTkju3Sqk3ijxR4auLGfxLHpNzp15Ols76eXVrR3OFLbidy544xXO+IYtW8efDywuLjSJJdX0a/Vr7TmUqZ9mVbb0zuByMU23g8C391p0Xh/wADT3t9LMhlSWGWBbRcjLuzDHB7DOaOodDopPE/izUvHWueHNFi0uOPTlhkFzdq54dc7SFPJJ6HjGK9BiD+UglIMmPmKjAz3xXA+F7eaP4u+NZnhkWJ47TY7KQrYQ5wehr0KhbD6hRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUmASCQMilooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//9k=\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":1276,"title":"PONG 002: Rectangle, Interactive Download, Easier Play","description":"Variation of the Original Classic PONG game brought to Cody.\r\nPONG 002 is a rectangular board (2000,1000) with slower initial velocities and more precise paddle movement.\r\nPONG 2 uses plot and fill versus patches to improve video play.\r\nThe faster square version is \u003chttp://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download PONG 001\u003e\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PONG2_300.jpg\u003e\u003e \r\n\r\n\r\nAttempt to keep the ball alive against a Wall. The ball speeds up on every hit. When it is missed it restarts at a new location. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed.\r\n\r\nPaddle center is provided and paddle covers +/- 50 units.\r\nThe field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\r\n\r\nTo aid in development of your routine, a PONG_Interactive_002a.m file that creates a solver script and video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_002b.m PONG_Interactive_002b.m\u003e. (Right click, 'save link as'). The routine creates a PONG_002_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_002_video_Life1.mp4 PONG Demo Video\u003e MP4 (Rt Click, Open in New Tab)\r\n\r\n*Inputs:* (paddle,ball)  \r\n \r\n   paddle = 500 ; Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n   ball=[500 500 30 20]; % x y vx vy  Positon and Velocity, Treated as a Point\r\n\r\n*Output:* Direction\r\n\r\n   1 for Up, -1 for Down, 0-No move\r\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u003c=1 is allowed\r\n\r\n*Pass Criteria:* 15 hits, a score of 425 or better\r\n\r\n*Scoring:* 100 - 5 * Hits + 100 * Lives,  (500 - 5 * hits  for \u003c 100 hits)\r\n\r\n*Game Theory:* Position Paddle to minimize travel to next location. Vx=1.08*Vx and Vy=1.04*Vy after every return.\r\n\r\n*Near Future:* Multi-Ball Three Wall, Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position\r\n\r\n\r\n","description_html":"\u003cp\u003eVariation of the Original Classic PONG game brought to Cody.\r\nPONG 002 is a rectangular board (2000,1000) with slower initial velocities and more precise paddle movement.\r\nPONG 2 uses plot and fill versus patches to improve video play.\r\nThe faster square version is \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download\"\u003ePONG 001\u003c/a\u003e\u003c/p\u003e\u003cimg src = \"https://sites.google.com/site/razapor/matlab_cody/PONG2_300.jpg\"\u003e\u003cp\u003eAttempt to keep the ball alive against a Wall. The ball speeds up on every hit. When it is missed it restarts at a new location. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed.\u003c/p\u003e\u003cp\u003ePaddle center is provided and paddle covers +/- 50 units.\r\nThe field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/p\u003e\u003cp\u003eTo aid in development of your routine, a PONG_Interactive_002a.m file that creates a solver script and video has been posted at \u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_002b.m\"\u003ePONG_Interactive_002b.m\u003c/a\u003e. (Right click, 'save link as'). The routine creates a PONG_002_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/p\u003e\u003cp\u003e\u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PONG_002_video_Life1.mp4\"\u003ePONG Demo Video\u003c/a\u003e MP4 (Rt Click, Open in New Tab)\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e (paddle,ball)\u003c/p\u003e\u003cpre\u003e   paddle = 500 ; Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n   ball=[500 500 30 20]; % x y vx vy  Positon and Velocity, Treated as a Point\u003c/pre\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction\u003c/p\u003e\u003cpre\u003e   1 for Up, -1 for Down, 0-No move\r\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u0026lt;=1 is allowed\u003c/pre\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e 15 hits, a score of 425 or better\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e 100 - 5 * Hits + 100 * Lives,  (500 - 5 * hits  for \u0026lt; 100 hits)\u003c/p\u003e\u003cp\u003e\u003cb\u003eGame Theory:\u003c/b\u003e Position Paddle to minimize travel to next location. Vx=1.08*Vx and Vy=1.04*Vy after every return.\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Multi-Ball Three Wall, Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position\u003c/p\u003e","function_template":"function pdir = PONG_002_solver(paddle,ball)\r\n  pdir=randi([-1 1]);\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',500);\r\n\r\n pwidth=50; % Total size +/- 50 for 101 Paddle\r\n bwidth=10; % Radius of ball\r\n\r\n vup=10; % Sub-sampling ball movements for Interactive\r\n spfx=1.08; % Speed increase factor\r\n spfy=1.04; % to Avoid fixed Paddle solution\r\n negVmax=-200;\r\n posVmax=210;\r\n mov_step=25; % Paddle Quantized Movement  (1/4 Paddle)\r\n maxLives=4;\r\n maxHits=100; % Return Mission Complete\r\n\r\n% Initial Start\r\n paddle=500; % position y % min max paddle [50 950]\r\n ball=[500 500 30 20]; % x y vx vy  Treated as a Point\r\n\r\nlives=0; % Lives\r\nhits=0;\r\nentry=0;\r\n\r\nwhile lives\u003cmaxLives \u0026\u0026 hits\u003cmaxHits\r\n\r\n [curdir]=PONG_002_solver(paddle,ball); % FUNCTION CALL\r\n\r\n if abs(curdir)\u003e1,curdir=0;end % Max 1 / -1  of scalar allowed\r\n curmov=mov_step*curdir;\r\n\r\n if entry==0 % Initialize movement history vector\r\n  curdirvec=curdir;\r\n  entry=1;\r\n else\r\n  curdirvec=[curdirvec curdir]; % Saving moves for file create\r\n end\r\n\r\n% Paddle Move\r\n paddle=max(pwidth,min(1000-pwidth,paddle+curmov)); % [50 : 950] limits\r\n\r\n% Ball Move\r\n\r\n  for j=1:vup\r\n    % ball=[500 500 1 1]; % x y vx vy  Treated as a Point\r\n\r\n    if ball(1)+ball(3)/vup\u003c=0 % Check if Point is Over\r\n\r\n    % Find x=0 crossing and check if paddle is within\r\n    % [paddle-pwidth-bwidth,paddle+pwidth+bwidth] pwidth=50; \r\n    % set speed scalar\r\n    \r\n      xc=ball(2)-ball(1)*ball(4)/ball(3);\r\n      if xc\u003e=1000\r\n       xc=1000-(xc-1000);\r\n      else\r\n       xc=abs(xc);\r\n      end\r\n      \r\n      paddlemax= paddle+pwidth+bwidth;\r\n      paddlemin= paddle-pwidth-bwidth;\r\n      \r\n      if xc\u003epaddlemax || xc\u003cpaddlemin % Swing and a Miss\r\n       lives=lives+1;\r\n       fprintf('Oops %i\\n',lives);\r\n       \r\n       if lives\u003e=maxLives,break;end\r\n       %paddle=500; % position y % min max paddle [50 950]\r\n\r\n       % Reset Ball Keep deterministic but different\r\n       ball=[500-100*lives 500 30+11*lives 20-3*lives];\r\n\r\n       break;\r\n      end\r\n      \r\n      \r\n      % Ball returned\r\n      hits=hits+1;\r\n      ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n      \r\n      ball(1)=-ball(1);\r\n      ball(3)=-spfx*ball(3);\r\n      \r\n      if ball(2)\u003c0\r\n       ball(2)=-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      elseif ball(2)\u003e1000\r\n       ball(2)=2000-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      else\r\n       ball(4)=spfy*ball(4);\r\n      end\r\n      \r\n      ball(3)=max(negVmax,min(posVmax,ball(3)));\r\n      ball(4)=max(negVmax,min(posVmax,ball(4)));\r\n      \r\n    else % Wall bounces\r\n     ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n     \r\n     if ball(1)\u003e=2000 % To the right\r\n      ball(1)=2000-(ball(1)-2000);\r\n      ball(3)=-ball(3);\r\n      if ball(2)\u003e=1000 % TR\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BR\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     else % Middle\r\n      if ball(2)\u003e=1000 % TM\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BM\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     end\r\n    \r\n     \r\n    end % Ball Pass / New Position\r\n\r\n  end % j vup\r\n\r\n\r\nend % while Alive and Hits \u003c Total Success\r\n\r\n%fprintf('%i ',curdirvec);fprintf('\\n'); % Moves\r\nfprintf('Hits %i\\n',hits)\r\nfprintf('Lives %i\\n',lives)\r\nscore= max(0,maxHits-5*hits+100*lives); % \r\n \r\nfprintf('Score %i\\n',score)\r\n% Passing Score is 15 hits to Score 425 or Less\r\n\r\nassert(score\u003c=425,sprintf('Score %i\\n',score))\r\n\r\n\r\nfeval( @assignin,'caller','score',floor(min( 500,score )) );\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":7,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-02-16T18:19:26.000Z","updated_at":"2026-02-10T12:07:15.000Z","published_at":"2013-02-17T00:16:33.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eVariation of the Original Classic PONG game brought to Cody. PONG 002 is a rectangular board (2000,1000) with slower initial velocities and more precise paddle movement. PONG 2 uses plot and fill versus patches to improve video play. The faster square version is\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG 001\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAttempt to keep the ball alive against a Wall. The ball speeds up on every hit. When it is missed it restarts at a new location. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePaddle center is provided and paddle covers +/- 50 units. The field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PONG_Interactive_002a.m file that creates a solver script and video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_002b.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG_Interactive_002b.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). The routine creates a PONG_002_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_002_video_Life1.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG Demo Video\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e MP4 (Rt Click, Open in New Tab)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e (paddle,ball)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   paddle = 500 ; Paddle Center on the Y-axis, Paddle is +/- 50 from center\\n   ball=[500 500 30 20]; % x y vx vy  Positon and Velocity, Treated as a Point]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Direction\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   1 for Up, -1 for Down, 0-No move\\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u003c=1 is allowed]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e 15 hits, a score of 425 or better\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e 100 - 5 * Hits + 100 * Lives, (500 - 5 * hits for \u0026lt; 100 hits)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eGame Theory:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Position Paddle to minimize travel to next location. Vx=1.08*Vx and Vy=1.04*Vy after every return.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Multi-Ball Three Wall, Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAO7+F3/ACF9V/7B5/8AR0VFL8LP+Qvq3T/kHnqf+m0VFbw2MZ7kHxT/AOR2b/rxtP8A0QlcVXbfFb/keG/68bP/ANJ0riaxe5qgooopDCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDvvhWu7WNWGcf8S8n/AMjRUU74T/8AIa1b/sHHv/03horWLdjOW5mfEdmfxc5Zix+y2wyT/wBMUrkq6v4i/wDI3P8A9ett/wCiUrlKiXxMqHwoKKKKkoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAO4+GZI1XVMEj/AEHsf+m0VFJ8NP8AkK6p/wBeH/taKiuuklyoyla5T+In/I3P/wBett/6JSuUrq/iL/yNz/8AXrbf+iUrlK5p/Ey4fCgoooqSgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA7f4af8hXVP+vD/ANrRUUfDT/kK6p/14f8AtaKiuun8KM5blP4if8jc/wD1623/AKJSuU7V1fxE/wCRuf8A69bb/wBEpXKdq5p/EyofCgoooqSgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA7f4Z/8AIV1P/rx/9rRUUfDP/kK6p/14/wDtaKiuul8KMpblP4if8jc//Xrbf+iUrlK6v4i/8jc//Xrbf+iUrlO9c0/iZcPhQUUUVJQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAdv8ADXH9q6pnH/Hj3OP+W0VFN+G6B9U1LIziyJHt+9jH9aK66d+VGUtyr8RP+Ruf/r1tv/RKVyneur+Iv/I3P/1623/olK5SuafxMuHwoKKKKkoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAO3+Gf/IV1P8A68f/AGtFRSfDP/kK6p/14f8AtaKiuun8KM5blT4if8jc/wD1623/AKJSuU7V1fxE/wCRuf8A69bb/wBEpXKdq5p/EyofCgoooqSgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA7f4af8AIV1P/rx9f+m0dFHwz/5Cuqf9eH/taKiuun8KM5blP4i/8jc//Xrbf+iUrlK6v4if8jc//Xrb/wDolK5TvXNP4mVD4UFFFFSUFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHb/AAz/AOQrqf8A14/+1oqKPhp/yFdU/wCvD1/6bRUV1078qMpblP4i/wDI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\"}]}"},{"id":1279,"title":"PONG 003: 3-Ball Rectangle, Interactive Download","description":"Variation of the Original Classic PONG game brought to Cody.\r\nPONG 003 is a rectangular board (2000,1000) with reasonable velocities and precision paddle movement. Three Times the Fun with 3-Balls.\r\n\r\nOther Cody PONG Games:  \u003chttp://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download PONG 001\u003e and \u003chttp://www.mathworks.com/matlabcentral/cody/problems/1276-pong-002-rectangle-interactive-download-easier-play PONG 002\u003e\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PONG3_300.jpg\u003e\u003e \r\n\r\n\r\nAttempt to keep the balls alive against a Wall. The balls speeds up on every hit. When all have been missed the next round restarts the balls at new locations. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed. The Balls do not interact with each other.\r\n\r\nPaddle center is provided and paddle covers +/- 50 units.\r\nThe field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\r\n\r\nTo aid in development of your routine, a PONG_Interactive_003c.m file that creates a solver script and video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_003c.m PONG_Interactive_003c.m\u003e. (Right click, 'save link as'). The routine creates a PONG_003_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_003_video_89.mp4 3-Ball PONG Demo Video\u003e MP4 (Rt Click, Open in New Tab)\r\n\r\n*Inputs:* (paddle,ball)  \r\n \r\n     paddle = 500 ; %Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n     balls=[500 500 32 20;500 550 30 18;500 450 28 22;450 550 33 20;450 450 29 21];\r\n     % x y vx vy  Position and Velocity, 1 - Row per ball\r\n     %Passed Balls are [-50 -50 -50 -50]\r\n\r\n*Output:* Direction\r\n\r\n   1 for Up, -1 for Down, 0-No move\r\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u003c=1 is allowed\r\n\r\n*Pass Criteria:* Score of 925 or better\r\n\r\n*Scoring:* 600 - Hits + 100 * Lives; Hit=(ActiveBalls)^2\r\n\r\n*Game Theory:* Position Paddle to minimize travel to next ball while taking into account multiple ball score bonus. Vx=1.08*Vx and Vy=1.04*Vy after every return.\r\n\r\n*Near Future:* Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position, Multi-Ball with Ball-Ball Collision\r\n","description_html":"\u003cp\u003eVariation of the Original Classic PONG game brought to Cody.\r\nPONG 003 is a rectangular board (2000,1000) with reasonable velocities and precision paddle movement. Three Times the Fun with 3-Balls.\u003c/p\u003e\u003cp\u003eOther Cody PONG Games:  \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download\"\u003ePONG 001\u003c/a\u003e and \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/1276-pong-002-rectangle-interactive-download-easier-play\"\u003ePONG 002\u003c/a\u003e\u003c/p\u003e\u003cimg src = \"https://sites.google.com/site/razapor/matlab_cody/PONG3_300.jpg\"\u003e\u003cp\u003eAttempt to keep the balls alive against a Wall. The balls speeds up on every hit. When all have been missed the next round restarts the balls at new locations. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed. The Balls do not interact with each other.\u003c/p\u003e\u003cp\u003ePaddle center is provided and paddle covers +/- 50 units.\r\nThe field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/p\u003e\u003cp\u003eTo aid in development of your routine, a PONG_Interactive_003c.m file that creates a solver script and video has been posted at \u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_003c.m\"\u003ePONG_Interactive_003c.m\u003c/a\u003e. (Right click, 'save link as'). The routine creates a PONG_003_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/p\u003e\u003cp\u003e\u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PONG_003_video_89.mp4\"\u003e3-Ball PONG Demo Video\u003c/a\u003e MP4 (Rt Click, Open in New Tab)\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e (paddle,ball)\u003c/p\u003e\u003cpre\u003e     paddle = 500 ; %Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n     balls=[500 500 32 20;500 550 30 18;500 450 28 22;450 550 33 20;450 450 29 21];\r\n     % x y vx vy  Position and Velocity, 1 - Row per ball\r\n     %Passed Balls are [-50 -50 -50 -50]\u003c/pre\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction\u003c/p\u003e\u003cpre\u003e   1 for Up, -1 for Down, 0-No move\r\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u0026lt;=1 is allowed\u003c/pre\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e Score of 925 or better\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e 600 - Hits + 100 * Lives; Hit=(ActiveBalls)^2\u003c/p\u003e\u003cp\u003e\u003cb\u003eGame Theory:\u003c/b\u003e Position Paddle to minimize travel to next ball while taking into account multiple ball score bonus. Vx=1.08*Vx and Vy=1.04*Vy after every return.\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position, Multi-Ball with Ball-Ball Collision\u003c/p\u003e","function_template":"function pdir = PONG_003_solver(paddle,balls)\r\n  pdir=randi([-1 1]);\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',1000);\r\n\r\n pwidth=50; % Total size +/- 50 for 101 Paddle\r\n bwidth=10; % Radius of ball\r\n\r\n vup=10; % Sub-sampling ball movements for Interactive\r\n spfx=1.08; % Speed increase factor\r\n spfy=1.04; % to Avoid fixed Paddle solution\r\n negVmax=-200;\r\n posVmax=210;\r\n mov_step=25; % Paddle Quantized Movement  (1/4 Paddle)\r\n maxLives=4;\r\n maxHits=600; % Return Mission Complete\r\n qballs=3; % quantity of balls 1 to 5\r\n\r\n% Initial Start\r\n paddle=500; % position y % min max paddle [50 950]\r\n balls=[500 500 32 20;500 550 30 18;500 450 28 22;450 550 33 20;450 450 29 21]; % x y vx vy  Treated as a Point\r\n  balls=balls(1:qballs,:);\r\n\r\nlives=0; % Lives\r\nhits=0;\r\nentry=0;\r\nactive=ones(1,size(balls,1));\r\n\r\nwhile lives\u003cmaxLives \u0026\u0026 hits\u003cmaxHits+100*lives % Allow 0 Score\r\n\r\n [curdir]=PONG_003_solver(paddle,balls); % FUNCTION CALL\r\n\r\n if abs(curdir)\u003e1,curdir=0;end % Max 1 / -1  of scalar allowed\r\n curmov=mov_step*curdir;\r\n\r\n if entry==0 % Initialize movement history vector\r\n  curdirvec=curdir;\r\n  entry=1;\r\n else\r\n  curdirvec=[curdirvec curdir]; % Saving moves for file create\r\n end\r\n\r\n% Paddle Move\r\n paddle=max(pwidth,min(1000-pwidth,paddle+curmov)); % [50 : 950] limits\r\n\r\n% Ball Move\r\n\r\n  for j=1:vup\r\n   for nballs=1:size(balls,1)\r\n    if active(nballs)==0,continue;end\r\n    ball=balls(nballs,:);\r\n    % ball=[500 500 1 1]; % x y vx vy  Treated as a Point\r\n\r\n    if ball(1)+ball(3)/vup\u003c=0 % Check if Point is Over\r\n\r\n    % Find x=0 crossing and check if paddle is within\r\n    % [paddle-pwidth-bwidth,paddle+pwidth+bwidth] pwidth=50; \r\n    % set speed scalar\r\n    \r\n      xc=ball(2)-ball(1)*ball(4)/ball(3);\r\n      if xc\u003e=1000\r\n       xc=1000-(xc-1000);\r\n      else\r\n       xc=abs(xc);\r\n      end\r\n      \r\n      paddlemax= paddle+pwidth+bwidth;\r\n      paddlemin= paddle-pwidth-bwidth;\r\n      \r\n      if xc\u003epaddlemax || xc\u003cpaddlemin % Swing and a Miss\r\n       active(nballs)=0;\r\n       balls(nballs,:)=-50; % Place off screen/ Id as Passed\r\n       if sum(active)==0,lives=lives+1;end % All 3 Balls Lost\r\n       fprintf('Oops Life %i  Ball %i\\n',lives,nballs);\r\n       \r\n       if lives\u003e=maxLives,break;end\r\n\r\n        if sum(active)==0\r\n        %balls=[500 500 32 20;500 550 30 18;500 450 28 22]; % x y vx vy  \r\n         balls=[500-100*lives 500 32+12*lives 20-3*lives; ...\r\n                500-100*lives 550 30+11*lives 18-3*lives; ...\r\n                500-100*lives 450 28+10*lives 22-3*lives; ...\r\n                450-100*lives 550 33+11*lives 17-3*lives; ...\r\n                450-100*lives 450 29+10*lives 23-3*lives]; % x y vx vy\r\n         balls=balls(1:qballs,:);\r\n         active=ones(1,size(balls,1));\r\n         break;\r\n        end\r\n\r\n       continue; % Ball Not returned, next ball\r\n      end\r\n      \r\n      \r\n      % Ball returned\r\n      hits=hits+sum(active)^2; % Multi-Ball Bonus\r\n      ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n      \r\n      ball(1)=-ball(1);\r\n      ball(3)=-spfx*ball(3);\r\n      \r\n      if ball(2)\u003c0\r\n       ball(2)=-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      elseif ball(2)\u003e1000\r\n       ball(2)=2000-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      else\r\n       ball(4)=spfy*ball(4);\r\n      end\r\n      \r\n      ball(3)=max(negVmax,min(posVmax,ball(3)));\r\n      ball(4)=max(negVmax,min(posVmax,ball(4)));\r\n\r\n\r\n      balls(nballs,:)=ball;      \r\n    else % Wall bounces\r\n     ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n     \r\n     if ball(1)\u003e=2000 % To the right\r\n      ball(1)=2000-(ball(1)-2000);\r\n      ball(3)=-ball(3);\r\n      if ball(2)\u003e=1000 % TR\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BR\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     else % Middle\r\n      if ball(2)\u003e=1000 % TM\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BM\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     end\r\n    \r\n     balls(nballs,:)=ball;\r\n    end % Ball Pass / New Position\r\n\r\n   end % nballs\r\n\r\n  end % j vup\r\n\r\nend % while Alive and Hits \u003c Total Success\r\n\r\n%fprintf('%i ',curdirvec);fprintf('\\n'); % Moves\r\nfprintf('Hits %i\\n',hits)\r\nfprintf('Lives %i\\n',lives)\r\nscore= max(0,maxHits-hits+100*lives); % \r\n \r\nfprintf('Score %i\\n',score)\r\n% Passing Score is 75 hit points to Score 925 or Less\r\n\r\nassert(score\u003c=925,sprintf('Score %i\\n',score))\r\n\r\n\r\nfeval( @assignin,'caller','score',floor(min( 1000,score )) );\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":6,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-02-17T23:20:24.000Z","updated_at":"2026-02-10T12:14:41.000Z","published_at":"2013-02-18T01:44:44.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eVariation of the Original Classic PONG game brought to Cody. PONG 003 is a rectangular board (2000,1000) with reasonable velocities and precision paddle movement. Three Times the Fun with 3-Balls.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eOther Cody PONG Games: \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG 001\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/1276-pong-002-rectangle-interactive-download-easier-play\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG 002\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAttempt to keep the balls alive against a Wall. The balls speeds up on every hit. When all have been missed the next round restarts the balls at new locations. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed. The Balls do not interact with each other.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePaddle center is provided and paddle covers +/- 50 units. The field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PONG_Interactive_003c.m file that creates a solver script and video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_003c.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG_Interactive_003c.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). The routine creates a PONG_003_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_003_video_89.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e3-Ball PONG Demo Video\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e MP4 (Rt Click, Open in New Tab)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e (paddle,ball)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[     paddle = 500 ; %Paddle Center on the Y-axis, Paddle is +/- 50 from center\\n     balls=[500 500 32 20;500 550 30 18;500 450 28 22;450 550 33 20;450 450 29 21];\\n     % x y vx vy  Position and Velocity, 1 - Row per ball\\n     %Passed Balls are [-50 -50 -50 -50]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Direction\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   1 for Up, -1 for Down, 0-No move\\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u003c=1 is allowed]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Score of 925 or better\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e 600 - Hits + 100 * Lives; Hit=(ActiveBalls)^2\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eGame Theory:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Position Paddle to minimize travel to next ball while taking into account multiple ball score bonus. Vx=1.08*Vx and Vy=1.04*Vy after every return.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position, Multi-Ball with Ball-Ball Collision\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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gqcWGt4/56wfykorqpv3Tnn8RwvjtdviMD/p3i/9BFczXV/ENdnigD/p1hP/AI4K5SsKnxM2h8KCiiioKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD2H4JjOn65/wBdYP5SUU/4ILnTtd/662/8pKK3g9DGe5xnxMXZ4tA/6c7c/wDkMVx1dr8Uxt8ZKP8Apxtf/RS1xVZS3ZrHYKKKKkYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAe0fAxc6br3/Xa3/lJRT/AIEjOma//wBdrb/0GWitFsZy3PN/Gssk2v75ZGdvIjGWOTgDAH5VzldB4x/5Dv8A2xT+Vc/RV+Njp/AgooorMsKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPXfgxI6WGtBHZcywZwfZ6Kb8Gv+PHWf8ArpD/ACeiumn8JzVH7xwnjL/kO/8AbFP5Vz9dx4w0eNrFtY81vMEqW/l44xs3ZzXD1hOalOVu5WHqRnD3emgUUUVJuFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB0uleH4LmxWed23PyoU9BWHfWps7ySDdu2HGatWWt3dlbmGMqU/h3DO2qE0rzytJI252OSawpxqqbcnoetjK2CnhacKELTW7I6KKK3PJCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPW/g3/wAeOs/9dYf5PRR8G/8Ajx1n/rrD/J6K6qfwnNU+IzvGH/Ioyf8AX6n/AKKrzWvS/GH/ACKMn/X6n/oqvNK4YfHP/EzLAfw36sKKKK0O4KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPW/g1/x46z/wBdIf5PRSfBv/jx1n/rrD/J6K6qfwnNU+IyfGV7bDw+9kZl+0m5jk8rvt8rGfzrzuuk8b/8jB/2wj/lXN1zSgoTlbq2PC01Cnp11CiiikdAUUUUAFFamg+H9T8S6mun6VbNPcMCxGQAqjqSTwBVrxN4P1rwjdRQava+V5oJikVgyPjrgj09PesnXpKp7JyXN26js7XMGiiitRBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB618G/wDjx1n/AK6w/wAnoo+Df/HjrP8A11h/k9FdVP4TmqfEcT44/wCRh/7YR/yrm66Xxz/yMP8A2wj/APQa5qsavxs1o/w4+gUUUVmaBRRRQB2/wx8a2/grxBLcXkDy2lzF5UhjALpyCCAevTkf4VqfFf4h2HjNrG00uGQWtqWczSqAzsQBgDsBj8fwrzSiuGWXYeWKWLa99aFc75eUKKKK7iQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA9a+Df/HjrP8A11h/k9FHwb/48dZ/66w/yeiuqn8JzVPiOK8c/wDIwj/r3j/9Brmq6bx1/wAjF/27x/8AoNczWNb42aUf4cfQKKKKzNQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii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\"}]}"},{"id":1000,"title":"Image Processing 004: Zernike Coefficients","description":"*Fit Zernike Terms to a wavefront.*\r\n\r\nThe class notes of \u003chttp://www.visualopticslab.com/OPTI535/Lectures/Class06_08.pdf Schwiegerling UofA\u003e on ANSI Standard Zernike terms is the basis for this challenge.  Pages 13 and 14 give the term definitions implemented in the zern_data_v01.m routine provided in the function template.\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/_/rsrc/1350774824076/matlab_cody/Zernike_UA_480.jpg\u003e\u003e\r\n\r\n\r\nANSI Standard Zernike Chart:\r\n\r\n\r\n\r\n*Algorithm Description:*\r\n\r\n  M=surface array to be fit by Zernike terms; \r\n  -valid data is circle of normalized radius\u003c=1\r\n  Use the R and T arrays to create the A array\r\n  R=radial normalized distance from center of array\r\n  T=angular radian value from center of array\r\n  A=fitting array [valid_data_pts,terms]\r\n\r\n  Create A * z_fit = M(valid_data_pts)\r\n  [valid_pts,terms] * [terms,1] = [valid_pts,1]\r\n\r\n  Loop term=0:terms-1\r\n  - Create the 2-D array of z-terms uisng z=zern_data_v01(term,R,T)\r\n  - A(:,term+1) = z(valid_data_pts)\r\n  End Loop\r\n  \r\n  Solve for z_fit: pinv(A)*M(valid_pts)  or A\\M(valid_pts)\r\n\r\n*Inputs:* [M N R T] where N is number of Zernike terms for fit\r\n\r\n*Outputs:* [v] Zernike fit vector of length N\r\n\r\nCreation of the M surface and expected v fit vector can be seen in the Test Suite.\r\n\r\n\r\n\r\n\r\n\r\n","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.4333px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 888.85px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 444.433px; transform-origin: 407px 444.433px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 109.15px 7.91667px; transform-origin: 109.15px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eFit Zernike Terms to a wavefront.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 56.7833px 7.91667px; transform-origin: 56.7833px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe class notes of\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 1.95px 7.91667px; transform-origin: 1.95px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"http://www.visualopticslab.com/OPTI535/Lectures/Class06_08.pdf\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSchwiegerling UofA\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 253.6px 7.91667px; transform-origin: 253.6px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e on ANSI Standard Zernike terms is the basis for this challenge. Pages 13 and 14 give the term definitions implemented in the zern_data_v01.m routine provided in the function template.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 319.917px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 159.967px; text-align: center; transform-origin: 384px 159.967px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline\" src=\"data:image/JPEG;base64,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\" data-image-state=\"image-loaded\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 92.9667px 7.91667px; transform-origin: 92.9667px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eANSI Standard Zernike Chart:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 75.8333px 7.91667px; transform-origin: 75.8333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eAlgorithm Description:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 326.933px; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-end-end-radius: 4px; border-end-start-radius: 4px; border-start-end-radius: 4px; border-start-start-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; margin-block-end: 10px; margin-block-start: 10px; margin-bottom: 10px; margin-inline-end: 3px; margin-inline-start: 3px; margin-left: 3px; margin-right: 3px; margin-top: 10px; perspective-origin: 404px 163.467px; transform-origin: 404px 163.467px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 169.4px 7.91667px; transform-origin: 169.4px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 61.6px 7.91667px; transform-origin: 61.6px 7.91667px; \"\u003eM=surface array \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 100.1px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 100.1px 7.91667px; \"\u003eto be fit by Zernike terms\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 7.91667px; transform-origin: 7.7px 7.91667px; \"\u003e; \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 173.25px 7.91667px; transform-origin: 173.25px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 46.2px 7.91667px; transform-origin: 46.2px 7.91667px; \"\u003e-valid data \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 127.05px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 127.05px 7.91667px; \"\u003eis circle of normalized radius\u0026lt;=1\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 169.4px 7.91667px; transform-origin: 169.4px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 15.4px 7.91667px; transform-origin: 15.4px 7.91667px; \"\u003eUse \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 154px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 154px 7.91667px; \"\u003ethe R and T arrays to create the A array\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 188.65px 7.91667px; transform-origin: 188.65px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 77px 7.91667px; transform-origin: 77px 7.91667px; \"\u003eR=radial normalized \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 111.65px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 111.65px 7.91667px; \"\u003edistance from center of array\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 165.55px 7.91667px; transform-origin: 165.55px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 65.45px 7.91667px; transform-origin: 65.45px 7.91667px; \"\u003eT=angular radian \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 100.1px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 100.1px 7.91667px; \"\u003evalue from center of array\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 146.3px 7.91667px; transform-origin: 146.3px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 61.6px 7.91667px; transform-origin: 61.6px 7.91667px; \"\u003eA=fitting array \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 84.7px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 84.7px 7.91667px; \"\u003e[valid_data_pts,terms]\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 7.91667px; transform-origin: 0px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 138.6px 7.91667px; transform-origin: 138.6px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 26.95px 7.91667px; transform-origin: 26.95px 7.91667px; \"\u003eCreate \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 111.65px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 111.65px 7.91667px; \"\u003eA * z_fit = M(valid_data_pts)\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 173.25px 7.91667px; transform-origin: 173.25px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e[valid_pts,terms] * [terms,1] = [valid_pts,1]\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 7.91667px; transform-origin: 0px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 73.15px 7.91667px; transform-origin: 73.15px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 19.25px 7.91667px; transform-origin: 19.25px 7.91667px; \"\u003eLoop \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 53.9px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 53.9px 7.91667px; \"\u003eterm=0:terms-1\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 250.25px 7.91667px; transform-origin: 250.25px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 50.05px 7.91667px; transform-origin: 50.05px 7.91667px; \"\u003e- Create the \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 200.2px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 200.2px 7.91667px; \"\u003e2-D array of z-terms uisng z=zern_data_v01(term,R,T)\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 127.05px 7.91667px; transform-origin: 127.05px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e- A(:,term+1) = z(valid_data_pts)\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 30.8px 7.91667px; transform-origin: 30.8px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 15.4px 7.91667px; transform-origin: 15.4px 7.91667px; \"\u003eEnd \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 15.4px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 15.4px 7.91667px; \"\u003eLoop\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 7.91667px; transform-origin: 0px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 215.6px 7.91667px; transform-origin: 215.6px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 23.1px 7.91667px; transform-origin: 23.1px 7.91667px; \"\u003eSolve \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 119.35px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 119.35px 7.91667px; \"\u003efor z_fit: pinv(A)*M(valid_pts)\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 7.91667px; transform-origin: 7.7px 7.91667px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 65.45px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 65.45px 7.91667px; \"\u003eor A\\M(valid_pts)\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 10px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 23.3333px 7.91667px; transform-origin: 23.3333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eInputs:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 162.55px 7.91667px; transform-origin: 162.55px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e [M N R T] where N is number of Zernike terms for fit\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 29.1667px 7.91667px; transform-origin: 29.1667px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eOutputs:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 98.7833px 7.91667px; transform-origin: 98.7833px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e [v] Zernike fit vector of length N\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 250.083px 7.91667px; transform-origin: 250.083px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eCreation of the M surface and expected v fit vector can be seen in the Test Suite.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function v = Zernike_Fit(M,N,R,T)\r\n% M surface array\r\n% N Number of Zernike terms for fit  0:N-1\r\n% R Radial distance from center of M array for each M location\r\n% T angle from center of M array to each M location\r\n  v=zeros(N,1);\r\nend\r\n\r\n% The function zern_data_v01 has been loaded and rehashed\r\n% z = zern_data_v01(j,r,t) % is sufficient in the main routine\r\n\r\n%% zern_data_v01.m\r\n% Author: Team\r\n% function to create a zernike polynomial\r\n% Using ANSI standard zernikes\r\n\r\n% input\r\n%  j = term #\r\n%  r = normalized radial vector\r\n%  t = theta\r\n\r\nfunction z = zern_data_v01(j,r,t)\r\n\r\n    % Convert single index term to standard\r\n    n= ceil((sqrt(9+8*j)-1)/2)-1; % 0-0; 2-1; 5-2; 9-3; ...\r\n    m= 2*j-n*(n+2);\r\n    \r\n    % zernike term\r\n   \r\n    z = r*0; %zeros(size(r));\r\n        \r\n        % radial component\r\n    for s = 0:(n-abs(m))/2\r\n     z = z + (-1)^s * factorial(n-s) * r.^(n-2*s) ./ ...\r\n        (factorial(s) * factorial((n+abs(m))/2 - s) * factorial((n-abs(m))/2 - s));\r\n    end\r\n        \r\n        % angular component\r\n    z = z .* ((m\u003e=0)*cos(m*t) - (m\u003c0)*sin(m*t));\r\n    \r\n    % normalization\r\n    z = z * sqrt(2*(n+1)/(1+(m==0)));\r\n    \r\n    % value added processing\r\n    z = z .* (r\u003c=1);\r\n    \r\nend\r\n\r\n","test_suite":"fname='https://sites.google.com/site/razapor/matlab_cody/zern_data_v01.m?attredirects=0\u0026d=1';\r\nurlwrite(fname,'zern_data_v01.m')\r\n%urlwrite('http://tinyurl.com/matlab-zernike','zern_data_v01.m')\r\nrehash path\r\n% z = zern_data_v01(j,r,t) % is sufficient in the main routine\r\n%%\r\nM=zeros(256);\r\nterms=6; % Number of Terms to fit  0:terms-1\r\n% Test Suite portion using zern_data_v01\r\n[ ydim xdim ] = size(M);\r\nx = linspace(-1,1,xdim);\r\ny = linspace(1,-1,ydim);\r\n[X Y] = meshgrid(x,y);\r\nR = sqrt(X.^2 + Y.^2);\r\nT = atan2(Y,X);\r\n% Create surface\r\nz_fit=zeros(terms,1); % Map 0:9 to 1:10\r\nz_fit(2)=1.0;\r\n\r\n% Build a Surface\r\nM = M +  zern_data_v01(0,R,T); % Force NaN for non-data\r\nM(M==0)=NaN;\r\nM(M\u003e0)=0;\r\nfor term = 0:terms-1\r\n M = M + z_fit(term+1) * zern_data_v01(term,R,T);\r\n% figure(3);imagesc(data_fit) % Visualization\r\n% pause (0.5)\r\nend\r\n\r\n% Data is a circle\r\n% Non-data is assigned NaN\r\n\r\ntic\r\nv = Zernike_Fit(M,terms,R,T)\r\ntoc\r\nassert(max(abs(v-z_fit))\u003c0.01,sprintf('v=%i %i %i %i %i %i',v))\r\n\r\n\r\n%%\r\nM=zeros(256);\r\nterms=10; % Number of Terms to fit  0:terms-1\r\n% Test Suite portion using zern_data_v01\r\n[ ydim xdim ] = size(M);\r\nx = linspace(-1,1,xdim);\r\ny = linspace(1,-1,ydim);\r\n[X Y] = meshgrid(x,y);\r\nR = sqrt(X.^2 + Y.^2);\r\nT = atan2(Y,X);\r\n\r\n% Create surface\r\nz_fit= round(2*rand(terms,1)-1).*rand(terms,1);\r\n\r\n% Build a Surface\r\nM = M +  zern_data_v01(0,R,T); % Force NaN for non-data\r\nM(M==0)=NaN;\r\nM(M\u003e0)=0;\r\nfor term = 0:terms-1\r\n M = M + z_fit(term+1) * zern_data_v01(term,R,T);\r\n% figure(3);imagesc(data_fit) % Visualization\r\n% pause (0.5)\r\nend\r\n\r\ntic\r\nv = Zernike_Fit(M,terms,R,T)\r\ntoc\r\nassert(max(abs(v-z_fit))\u003c0.01)\r\n\r\n\r\n%%\r\nM=zeros(128);\r\nterms=15; % Number of Terms to fit  0:terms-1\r\n% Test Suite portion using zern_data_v01\r\n[ ydim xdim ] = size(M);\r\nx = linspace(-1,1,xdim);\r\ny = linspace(1,-1,ydim);\r\n[X Y] = meshgrid(x,y);\r\nR = sqrt(X.^2 + Y.^2);\r\nT = atan2(Y,X);\r\n\r\n% Create surface\r\nz_fit= round(2*rand(terms,1)-1).*rand(terms,1);\r\n\r\n% Build a Surface\r\nM = M +  zern_data_v01(0,R,T); % Force NaN for non-data\r\nM(M==0)=NaN;\r\nM(M\u003e0)=0;\r\nfor term = 0:terms-1\r\n M = M + z_fit(term+1) * zern_data_v01(term,R,T);\r\n% figure(3);imagesc(data_fit) % Visualization\r\n% pause (0.5)\r\nend\r\n\r\ntic\r\nv = Zernike_Fit(M,terms,R,T)\r\ntoc\r\nassert(max(abs(v-z_fit))\u003c0.01)\r\n\r\n\r\n\r\n\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":4,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":3,"test_suite_updated_at":"2020-09-29T23:07:58.000Z","rescore_all_solutions":true,"group_id":1,"created_at":"2012-10-18T13:25:52.000Z","updated_at":"2020-09-29T23:08:49.000Z","published_at":"2012-10-21T01:08:43.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eFit Zernike Terms to a wavefront.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe class notes of\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.visualopticslab.com/OPTI535/Lectures/Class06_08.pdf\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSchwiegerling UofA\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e on ANSI Standard Zernike terms is the basis for this challenge. Pages 13 and 14 give the term definitions implemented in the zern_data_v01.m routine provided in the function template.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"center\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eANSI Standard Zernike Chart:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eAlgorithm Description:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[M=surface array to be fit by Zernike terms; \\n-valid data is circle of normalized radius\u003c=1\\nUse the R and T arrays to create the A array\\nR=radial normalized distance from center of array\\nT=angular radian value from center of array\\nA=fitting array [valid_data_pts,terms]\\n\\nCreate A * z_fit = M(valid_data_pts)\\n[valid_pts,terms] * [terms,1] = [valid_pts,1]\\n\\nLoop term=0:terms-1\\n- Create the 2-D array of z-terms uisng z=zern_data_v01(term,R,T)\\n- A(:,term+1) = z(valid_data_pts)\\nEnd Loop\\n\\nSolve for z_fit: pinv(A)*M(valid_pts)  or A\\\\M(valid_pts)]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [M N R T] where N is number of Zernike terms for fit\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [v] Zernike fit vector of length N\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eCreation of the M surface and expected v fit vector can be seen in the Test Suite.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.JPEG\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"}],"problem_search":{"errors":[],"problems":[{"id":1305,"title":"Creation of 2D Sinc Surface","description":"This Challenge is to efficiently create the Sombrero function of various sizes, resolutions, and frequencies.\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/sinc64_3_1.png\u003e\u003e\r\n\r\n*Figure Example:* Freq=1; XY_max_value=3; Num Rows / Cols 64\r\n\r\nCreate the 2-D array m(row,col)=sin(pi*R*freq)/(pi*R*freq) where R is the distance from the center of the array. The array is [nrc,nrc] with X(1,1)=Y(1,1)= - xymax and X(nrc,nrc)=Y(nrc,nrc)=xymax.\r\n\r\n*Input:* [xymax,nrc,freq]\r\n\r\n*Output:* [m] an array of size(nrc,nrc) representing the sin(x)/x function\r\n\r\n*Hints:*\r\n\r\nMatlab provides excellent functions and array operators to readily create vectors and grids. [ linspace, meshgrid ]  \r\n\r\n*Future:*\r\n\r\nPolar grid creation to produce Zernike surfaces","description_html":"\u003cp\u003eThis Challenge is to efficiently create the Sombrero function of various sizes, resolutions, and frequencies.\u003c/p\u003e\u003cimg src = \"https://sites.google.com/site/razapor/matlab_cody/sinc64_3_1.png\"\u003e\u003cp\u003e\u003cb\u003eFigure Example:\u003c/b\u003e Freq=1; XY_max_value=3; Num Rows / Cols 64\u003c/p\u003e\u003cp\u003eCreate the 2-D array m(row,col)=sin(pi*R*freq)/(pi*R*freq) where R is the distance from the center of the array. The array is [nrc,nrc] with X(1,1)=Y(1,1)= - xymax and X(nrc,nrc)=Y(nrc,nrc)=xymax.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e [xymax,nrc,freq]\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e [m] an array of size(nrc,nrc) representing the sin(x)/x function\u003c/p\u003e\u003cp\u003e\u003cb\u003eHints:\u003c/b\u003e\u003c/p\u003e\u003cp\u003eMatlab provides excellent functions and array operators to readily create vectors and grids. [ linspace, meshgrid ]\u003c/p\u003e\u003cp\u003e\u003cb\u003eFuture:\u003c/b\u003e\u003c/p\u003e\u003cp\u003ePolar grid creation to produce Zernike surfaces\u003c/p\u003e","function_template":"function m=sinx_div_x(xymax,nrc,freq)\r\n m=zeros(nrc);","test_suite":"%%\r\nnrc=65;\r\nxymax=3;\r\nfreq=1;\r\n\r\nm=sinx_div_x(xymax,nrc,freq);\r\n\r\n%figure(3);imagesc(m)\r\n%figure(4);surf(m)\r\n\r\n xv=repmat(-xymax:2*xymax/(nrc-1):xymax,nrc,1);\r\n yv=xv';\r\n mexp=zeros(nrc);\r\n for r=1:nrc\r\n  for c=1:nrc\r\n  Rv=sqrt(xv(r,c)^2+yv(r,c)^2);\r\n  if Rv\u003eeps\r\n   mexp(r,c)=sin(Rv*pi*freq)/(Rv*pi*freq);\r\n  else\r\n   mexp(r,c)=1;\r\n  end\r\n  end % c\r\n end %r\r\n\r\n%figure(1);imagesc(mexp)\r\n%figure(2);surf(mexp)\r\n\r\nassert(~any(any(isnan(m))))\r\nassert(max(max(abs(m-mexp)))\u003c.01)\r\n\r\n%%\r\nnrc=127;\r\nxymax=3;\r\nfreq=4;\r\n\r\nm=sinx_div_x(xymax,nrc,freq);\r\n\r\n%figure(3);imagesc(m)\r\n%figure(4);surf(m)\r\n\r\n xv=repmat(-xymax:2*xymax/(nrc-1):xymax,nrc,1);\r\n yv=xv';\r\n mexp=zeros(nrc);\r\n for r=1:nrc\r\n  for c=1:nrc\r\n  Rv=sqrt(xv(r,c)^2+yv(r,c)^2);\r\n  if Rv\u003eeps\r\n   mexp(r,c)=sin(Rv*pi*freq)/(Rv*pi*freq);\r\n  else\r\n   mexp(r,c)=1;\r\n  end\r\n  end % c\r\n end %r\r\n\r\n%figure(1);imagesc(mexp)\r\n%figure(2);surf(mexp)\r\n\r\nassert(~any(any(isnan(m))))\r\nassert(max(max(abs(m-mexp)))\u003c.01)\r\n\r\n%%\r\nnrc=96;\r\nxymax=16;\r\nfreq=0.5;\r\n\r\nm=sinx_div_x(xymax,nrc,freq);\r\n\r\n%figure(3);imagesc(m)\r\n%figure(4);surf(m)\r\n\r\n xv=repmat(-xymax:2*xymax/(nrc-1):xymax,nrc,1);\r\n yv=xv';\r\n mexp=zeros(nrc);\r\n for r=1:nrc\r\n  for c=1:nrc\r\n  Rv=sqrt(xv(r,c)^2+yv(r,c)^2);\r\n  if Rv\u003eeps\r\n   mexp(r,c)=sin(Rv*pi*freq)/(Rv*pi*freq);\r\n  else\r\n   mexp(r,c)=1;\r\n  end\r\n  end % c\r\n end %r\r\n\r\n%figure(1);imagesc(mexp)\r\n%figure(2);surf(mexp)\r\n\r\nassert(~any(any(isnan(m))))\r\nassert(max(max(abs(m-mexp)))\u003c.01)\r\n\r\n\r\n\r\n\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":2,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":24,"test_suite_updated_at":"2013-03-01T06:34:16.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2013-02-28T03:54:48.000Z","updated_at":"2025-06-24T13:11:54.000Z","published_at":"2013-02-28T05:36:10.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.png\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Challenge is to efficiently create the Sombrero function of various sizes, resolutions, and frequencies.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eFigure Example:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Freq=1; XY_max_value=3; Num Rows / Cols 64\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eCreate the 2-D array m(row,col)=sin(pi*R*freq)/(pi*R*freq) where R is the distance from the center of the array. The array is [nrc,nrc] with X(1,1)=Y(1,1)= - xymax and X(nrc,nrc)=Y(nrc,nrc)=xymax.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [xymax,nrc,freq]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [m] an array of size(nrc,nrc) representing the sin(x)/x function\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eHints:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eMatlab provides excellent functions and array operators to readily create vectors and grids. [ linspace, meshgrid ]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eFuture:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePolar grid creation to produce Zernike surfaces\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjAAAAGkCAIAAACgjIjwAABGvElEQVR42u2di1UjOxZFlQEhEAIhEAIhEAIhEAIhEIJDIARCIARCqHnTdBfy/elKVWW77H0Wa1Y/j7vbXZa0de5HKhNCCCF0ASo8AoQQQgAJIYQQAkgIIYQAEkIIIQSQEEIIASSEEEIIICGEEAJICCGEEEBCCCEEkBBCCCGAhBBCCCAhhBBCAAkhhBBAQgghhAASQgghgIQQQggBJIQQQgAJIYQQAkgIIYQAEkIIIQSQEEIIAaSL/pcU4IoQQgDpAmgEkBBCCCBdhDcCSAghBJAuCEsIIYQAEkBCCCEEkAASQggBJICEEEIIINlAAk4IIQSQABJCCCGABJAQQgggXSycEEIIASSAhBDa69Jxyb8GSDAJIXSFiztrBUACSAixuCMWN4CEmM8s7mjPz/laxwZAQizuiNmHABJTYv8LPWIkIwSQrnDnztLD+o7QLY9hJidiYiCGMZ8ZICHWd8RIRugWgMSsQAxjhAASQqzvCDGGARJiYiB07cP4KmcfCwojDCFGMgJIzAqEGMYI4ZAQ6ztCjGGAhJgYCDGMmX0AiRGGECMZASRmBUIMY4RwSAixviPGMEBCTAyEGMZ8coDE8EKIkYwAErMCIYYxQgAJIdZ3xBgGSIiJgRDDmE8OkJgYCDGSEUBiViDEMEYIICHE+o4YwwAJMTEQYhjz4QESEwMhRjICSMwKhBjGCAEkhFjfEWMYICHE4o4Yxnx4gMTEQIiRjHBIzAqEGMYIASSEWN8RIoeEEIs7Yhjz+QESEwMhRjK6jZHDrECIYYwQQEKI9R0hxjBAQkwMhMghASTE+o4YyQjdEJCYFYhhjBBAQoj1HSHGMEBCTAyEbmYYlz8CSIiJgRAjGd0SkEql5hvq9zArEIs7QgBpq9loTk5mLGJ9R4xhgASQmBgIMYzP/PnJIV0KkK6qKYz1HTGS0S2PnCsAkpdkYlYgFneEANLZHBKzF7G+I8YwQDoPkFhumBgI3fIwJocEkJgYCDGSEUBKvKH+X4RY3BECSGsa0qDpVb+BOYxY3xFjGCDxhTExEGIYn/rzX8dkBEh8bIQYycYnv+Rf45DYMiDE4n6FizsLBUBiGiMGBos7YnEDSIjFncUd7fk563FCDolBxmdmcUdsBxFASkyJq2mSZXFncUcIIF3JNGYXj3jIiDEMkBATAyGG8Sk23FcwH1lQmBgIMZIRQGJWIMQwRgiHhFjfEWIMAyTExECIYbzOxyaHhJgYCDGSEUBiViAWd4QAEkKs7wgxhgESYmIgxDCWH/uamutZUJgYCDGSEUBiViDEMEYIh4RY3xFiDAMkxMRAiGG8zicnh4SYGAgxkhFAYlYgFneEABJCrO8IMYYBEmJiIMQwlp9cfP5935TNcGRiIMRIRgCJWYEQwxghHBJifUeIMQyQEBMDIYbxKh+eHBJiYiDESObJAyRmBWKJQegqRzuPALG+I8QYBkiIiYEQw3jRh9eff8edVQxHJgZCjGSePEDiu0GIYYwQDgmxviPEGAZIiImBEMN4o89PDgkxMRBiJPPkARKzAjGMEbqC0c4jQKzvCDGGARJiYiDEMF7/8+/0H8WCwsRAiJHMkwdIfDcIMYwRwiEh1neEGMMACTExEGIYr/b5r6YViQWFiYFG5r8WT4aRzJMHSMwKdGoUvR7/lH//yzBG6NaBxC4VnWB9/+83vv358fTKIERstW8cSNd0nzwT45J3PDWN3o5/yr//fQVLDOMzjc/r+EcBJCYG6jBGBx9Ib1glRjJPHiB5/8msQKvsPWcUzT8Bk2oXtcoIZBijG5pxOCTEFtJ754dCUQZIqzMJoRtZ5QASYmJENPqymJQB0gEmMYxP6OOv498FkJgYKKLRlxWv8ySAdLNMYiTz5AGS/E9mBVpOo69jusye6eP4Z/5dxWLSkqHIMEY3NPuuEkjMYTS2vpcKMDWQinrFBNJHhaWiTBUPH2GDrhxIk9UYy+RnYqxlj77UfzaB9GFVQ8AkhvGmn/86WpEKI4yPjcTO5kvZozEgCZP0cTNMYiTz5AFSe8uAUBeQ/j+EFgBJ558GxiTD+FwL+iX/+mqfP9sExBZyptF0f1RcNy0G0ldVAv51Y4G7vSzuu/tGyCHBJHTND3l2QjOQZhotB9KXKs9b6JNY3BnGyYDQ/ljLWslnJiwz26MfINU08oCkFQBJMEn4pOsL0TCSz2j0cUgX+oUxKwjLZCZqbY9+gDT5QPrFiXpPUcXfX061XtfgZBijG1pPcEgs7jeVXDUa10J7NIn0jw+tmkwrAgmh29mj3ASQWNyZGA0nfd8AUv2eGEj1b/nyK8hhEsN49c9/Ba1ITAkmxm0/cOF7nmy01DTKAGlyWpqm22ASI/lcT5gcErMCXYM9+qGRANIvooaAVBeRDwOJYYxuaEryCNBtbi2LTgttAKSgsakQuENstQESYmIIIM00qoF0hKgFQNK9TQCJYbzRHmvv/zomAxPjRh/1/5/2iwsk+coyIOlyiZqFV3lGLWPsLA+ZHBKzAu0bSDV7fvCjX1kOJP27kkBiGKPbWQMZ6+gWUfRDo78O6Unh5+lEQLpik4TADEBCTIwOe6SBpO3RukAaM0mIYZz8/HtvRWIaMDFu0SHNNJK5otc2kGI1HNLTTWSSGMnnesjkkJgV6FaAdFQK8Xz0M79Sqn6jVYDEMEa3swYy1tHt0mh6P67tfnWBVP/GGEhHWLKApCvLCdwhttoACd3e/ssB0kwj1yG9HP00gWQyySsuB0gM47U+/97jeEwAJsbt2qMMkIQ36gLS3OcUA+n6mMRIPtdzJofErED7BlJNIwGkXxc1CqSaSUFFXwAkhjG6oRgG3xm6HRr9upb3yiG92kA6clELgGSeB6F7ngqHCaGb32oz9NFNTIxeIMn3LAOSeSQEQGIYb/H5d22yGfpMjFuxR9Pnv+X+3Y3X/QCpfs9aQPJOhZARwpdyHdceMurO8pzJITEr0J6AJEhjO6T3rYAUHwxxdLwewxjd3hrIWEc3MCc/DCD9vhLao62BZJRRvBC1Qze61WbcoyufGLM9ugQg1a24MZBgEsN47PPvuhWJQc/EuP6nqhNIR4iqg3WfmwMpPh7iqPKCkcwTWINGOCRmBbpEexQAyXRRAZCMY1XTQAoacuVFTQzjvQ22v3q6iC+OHBJCF2qPfv6rptEMJPlKCKS/f+bH0Y8m0zCQ5moLULQ/CNU/m3195JAQ2t/EkNmjZUD6hcSnDSQNpwBI3iER9dkQMOlih7EBoRMCqfn591sOznBnfb8VezQvIzN7fuN4nw0gGe/xgfT7Sggk3ZZ7NUC61pEc+6HfX5zQ4JJDYlagPdFIAKnmyt//67MNJOM9CSAZl1aEQKq7oDBJlwihx+nvjwkk5ZlYAwESuvlVo6jw2jQIpPrPGXFI85t9IBlHu1pxwuiOWrTpiHqYjlAkgEQOCSCtu3gx9y5/YpSkDtPfHwtImXhdDaSGr0oDaWZSEkjiJPIlYoj2DuMjDs0/JpBynuks03C/rUi3CqTn6ffnYiYwK0jZQLU9ygOp7at6gKSP0fOac9cF0rlYtdObG/+v+0nSqAaSGb4TTKrfcHIgkUPa3/5dAun5bAlJ8JOyOz+Op/7P5isJIP2nrz93QmjY1L9rLSDF2SnRDmUw6X36/RH/+T5lHxeOKuDQ/GMCSdimjGd6nNjjAqSeUaiBpFOUwOlSrU+sj+mxRst/+pweagD8RyMPSDWN1gWScY54C0jzb0wBaVdG6vxD8W6SNKqBVEsgamZSK9UEZgBSYkQmEpIen6BLZmKs7370Euy9UgGphkoGSNoereyQJuM8PbMjSnTI/v3XNZV5Pp6vOrTBdg0c+g9C9Y8JpKZtyqSayCEBpD4gmX7Ib3MT3pyNz4YeaBhI/8BTA+nnxRlIM40uH0jSJL1N//+ZfzH/9AN7Uwt1ISNZmqEf/JhAStqmTKrp2DOdGEjkkHa7f/f8kGebgqhxoVjRgcowWnpVAcmL1zWB9OuiWkDSTMoDqWZSXGRRnysxAqQxF5XM1V2qf5KfSeNH/GfGNi3wTOSQAFLPqI390PFRiQaQ1HC8LQLppSoTjsvv5etX9BIs/tNJIM00+oFNTaMaSEfQmrpNUheQzEOMdF9UHbX7y6QASFpjLmqH+Sfx11Y/DpDkm1u2aYFnAjMAaY00khUONjoPvGqca4HTiSoQlgOpWpR/aPT+53zTJJDEewaApJnULJdwi84DIP38q5P4GXNRSzJPfv5p42H5jytHNDomjQutnG0a9UznskE7TSPdPJC8SF3gh4LaG2/U5sbBhQY94vjb8nqEDKtGgVST5gc2NY0uE0iCSTNWj/Q6Hf30PJ9xF3Um52T9Gd82V4xXNITit5V1PdOJQ3PkkK4ihyQI5LQURH7IBNL9dJRNvWDntL7p6Y3ReYupt4xai2ldzpAHknhPJo0UrbZpIHmc84D09z9fpg4gDWAswE8Arcy+xCdTazB9//tf8dNES5Nbm3smckgAqXP9TdQsuECKh+O9s9W6pLMhXJYsdD/N6oPeFJFYScP2o/9o9AMkgRkTSIJGAZDE36J/1/y35IGkUadLLeo3t9HivS0JpLJqAUWHNGwyr2T+nKZtcoC0hmcCM9cGpEyN6UBwrOGHnJoF+aLXwVDnOZN1PqdC1JoGaMz9DETkzMX0P68w/2wPpJ8/fP7xgFT/XRkg1d1RTSD9QlE/jVnzA9HvMYE0kItaMfPkEmVFjBUn5xR7prLIM53vBgpySKd71ms95bYfCiyRQE7gh8zyU9szBWGHsi2HxvzQQvcTeJ1gHWwBSdBIEOLtz/mmzXidBpKmURNIJpbyQBLlfzJqZ6p+Gk0gBS7KA1JX5mkd27Rnz/TvFXJIACmXQ8r4oXTNQhigszATAamNqK4Wxe5u/67u1DH3k1wrRSQqMEn9QJpfiYE0p6PGgPS3PzcEUnyEhGiokqdezWdfZYCUcVHeFxpAa3PbVONnFYxNJ/NM5JBuC0hjTzzrh0SkLlezkINNHEYwf9fY9nBBv2pmiQkiPN6eOhlNOo7F2dt59Z4fGgkg/bBnAEg13oaBNDOpC0iiAlDW2uWB1Oui6i/OfI+XsjpDqinvopp/zlaeCczcHJAGoluL/FAjRte1+aphE5mfcSDFa0HApOSCkkk5vCbKveIU0cu/M9rNOJUC0p//5y0A0vyKySQTb0uAJE6O0EAKTpEQ50fYTDIfl3hbE0hd3BJfpQekVTxTo/RuFYyt7ZlOmxVOvk4O6dQOqaOoYdgPNc8maUfbet3PqnXYNX6a3T9NP9Sb+/GWsySQnIusAiAJ9iSBNKNoLSCJw141kLy+XXGExO85FCaQSr+Lqt+v3+OZrWSZ3+V6pu9NPJOVMyaHtG8g1TuLXt6U3DmD5qlT3X7ozjm9saNZb2H+9tutLFjYr2ruapPlCRkg6Y18XLPw4t9i9bd0/yBoFACpfkUDSXijdYGkyyUGgCSRY5420gRSF7eEc4pjfQs901BL0zKSreqZThK1I4d0uUUNgw7pfurzQ/fNArmS6wwfzf1soUzFdhCji91PsmJbh+PWA5Jmj3hFAGm2VhsBaT7QyASS17qrgTTj7bdJTjd6e6QR7XcBkJJBvEzBXsYznbOfaRXPZFc6XA5mCNmdJ2SX4dZQfsiq4Xb3TUGwbsU4Q1nkhwZqFvKwCcI7MWzMPLwfsvuh0bzc/9DoAoGkmdQFJCNqV5fkZIAkXFQAJAGtTKwvro94TbQ0va12dN4Gnuk7ewyEqnS4nBwSDmnlBhovNCfe0A2k7vzQcIHces5mCz+Ur9jugo3OGCXdz1MrKdICkmaPeKUGUm2tNgWSefDrYNSuCSQRBoi55UHL/E7Fb+zyTJnavBXUVaG6sKXJXRBOuXcnh3S5vqpk7jPN5IdWqOH+XtkSlTJywmneD3UlhPKwCUJAHpCcS+VXB5L4jVsDyTxqz+uX0mdA/JokD0hPTqI05pbHtkzmqR4PzwvyTNqFL77odsvon26Wms4CJHJIuwn0uUy6mzbzQ9vke4bL6ob9UD5G1wUbXbedAZJ1ssYPjR5/Do9rxet+3qyBVP/GkwFJH26UaeCt0WubJFEs2gRS/YcEQGpmnnSVed4zNY+BWGe+TCf0TCUT2lnl1+SQrghIHfVy+TajDfxQzZhMVH11P5SM0SVzP3pB7AXS47QikGoaXQKQdIW6MEnzRzoCkjb9MZAEigIgxZmnJZ4pPgbiIorx8p7Jht8Zlzsc0m6YZFuixl1eyRpus31vKIc0fNJPUL+ULFh4S68g2hLNq9hAOK7HIc00+gFSTZSfVwSNNJC0PToxkHTldzeQzJKcGEh14WgAJDOlpAN9SzyTeQxEHLVbU+t6pnOG7Mgh7aAUIlkr4Z/DvdwPFSfQ3DpeYaCILi5hyPuhuP+xXm4CIAUGyFzgdIfyekCaabQukLQGgFSfKBF3TUVRu+C+OLP7u36PCaQ64hdsIAY8U+2hvbBeHLUbKMbbUO0yhzMmh3BI+3RIi45dyDTZDXmj5mZwSYoo74dMINXrTgCkGSRN9xMcnOHfoGjG62pExUCaf28eSMde7r3+0WRKAsk85SgJpL8fqQmkwEWZx943A33DnimoIJ9fyTcwrR9yGPZM3ppwQcfZkUPaW8iuUS8XtBB1tTj0ROHyNUVdlijvh0RZVKZCwTM3gfvJXH4Y2iMPSDWNaiCZ1ioA0vyXzn+OBpKG0xIg6capUt0BKD6YCyQRAwiA1CyFaJaPNz2TeS6RTkPW4zY+g3ydY/FWtEoGtMghAaR2dYphibIpomaMblnGKJ45+ZDdQE9r4Icy1Qc90Tb5G+OTbe+NZ2ICaX5lRSAJFGWAVGMpAFJ80FEApPlDNoBUwlu374/9a5x5En4rX/jg9dgGZZlepUONqCXH4nXAabheqWwashvLUwCkzZ9+NJTav30sRTSwaeoMI+T70uOQXWCJzCvvkn4oU6EQA6leMfNAUkZ2Jsrd9G0CyQRJTaMmkOaw3hiQft6ZAZJZGah7p2r0SpOkyW3eIKehlck8eUG8YBcS9Nh6x0B4Tl0jKjh08dTtSo2ICDkkHFKyqGGLY0/TMqtaeyvo4pBdYImW+KFMQshL/zz65zadCkj1e2Ig1X/FMJDmv3RdINkmSWRBAiBlavMyQbzAM3m9uoJn4vSHZLOBzoCuX4M3EMM/UdSOHNI15pBWqOr26rwXaPiQBa+EoTmrAz80FqDTK5rOnHvnNsVAOtZMox8gadIMA0m8bSGQ6r86AJJ3uoRmkgDSvz98iq40FXdsz+/JZJ68kpPAM+WrIbzq8GLdbNuMSAcOaeE5eHfjtDvjWrcvk3TjQFqxy3UlAi1vKopnbHzIQqaVJBOgM9evJpCEAQqA9D0Je9QFpPo9HpD0e5YDqT6SPABSaR0Iq02Vm/Owy3aO35PJPMURPNMzaUo9dB4Ca1biBUc8DGeVxq3V2RwSOaTTJYTiF9cG0kI/JIbm4glw8Osa4ouLTPyIV17UrG6emFlTJw7QNSsUaiyVnoumdGrkH5BmGv0ASdLoz7cc2yMNJO89awHJK7TLHzAhonZ1iUfiAtMpApKXeaq/yqRnemi1NHk9al6ZQ7NjyQyJb1h6N53XIZXceTQAaemTLUNX8w3lkFbvPEgnjWosrdL3ajYViRxSssDJ80NxgC5ZoRAboMxFU9+TjtetBaQ5HbUdkH7+tABIzTMmWmkk8yoE/1Kfo+9lcoGUCeLlqyHqrYnOUMY3mCR3YG9DZz+ukFs6kUPaYpsOkDYEUoJYC6+EmEZQtPzmiPfJ8ExBBV2MH+/Un7EAnbcwZYq7kiX4FpB0yme+ceiIRtMUAKn+0zYFUs0kE0hmV68oWNcmyVoZS/uWufupXQoRBPHq/EoSUaL5ySsNrwtn6pGcaVdaWHrXPUknckgAaQU/u9KJv6M1db3HRHpVDCVxSliAn+DUn0wFXSbjbQApvI03Dqh+Tv+Wwe+1gBSYrS2ANDMpDyRRsy6ANOfMWjWi5lOd4jtP3SCeiApmInvmwRDNMgdz9OpacN1s15sfWqco/Gw3UJBD2iqHdCogbawl3kgXNZh9r0FYw2wz0viZZ3szRpesCa7XsghIx8tiBkjfkwbS/3/1dVTmUF8SfkQjB0g1jU4GJH1CebOxVzRRlePDKarB8fXnp+QulHNq8+qqUQGk2DaZkT2z3tLb9AS3qsdZpYHSu6DubiCY4VTikUO6dYeUTiNtX0Q3dlLqe6KCKCiiM0sYRN64qyo38EMekOqVqwGk5nWIRQPpyB6FQBKvaNjUNDolkOIav+KcNBEA6d8bYiAJaHmXcFe/q0kj70JLYZFFsO4+fRRv0K5Uj+e49G6s7Oh9eWKJHBJA6mhFykTk+gfl6zReV+oVsDb7Xuu/WlfN6nKmfIooKFjQATpvqWoAKbpU5ohGFZD+0ujrt+7ulz07AVJskpJAskySF3D+qn68ncG3DaTANgXVEProvBpReqR5Zw7FcTyvW1ZsDbsuUnpfrQzvvC0uOKS9AOk7DLsP6dUJ040FDd7V1k83HplVDHFJ97OPH6+GOx+gi+/ebQBJPHzbHuWBpF+J43UXBSTvr9YJMMskmRWhXz6Q/MzT7/cYUMrZiJinctSv6GHmVXgGcbygCnyV5qS3pV205JAAUr7Q7nsdYyTq3LStSeZU4zajZrwu32b06ODHq+E2C3lTwZw4ke4B6euXKHM5gw8kyZ4WkOZY33mBNJ97tBxIqrRhHtiff34CIAWBvu/INtXWNhOqNest9RgLaGR6o5fwDNYlzUlLsFTBCW+076KGaVpqeHtakYoVZM/p+ThhE4zdrpvEmm1GzdIGPWn1MXQit9xVuRsH6LIlc00gfZnxunkd/0ujmUkaSOqVIxotAJIzHEaAVDOptM6bMEoKq/Yp9Yk+qx8TSMI5lQSNvhuppnkeNWv9S7F7qPV9WrpZ+0UVgnt1dwPNSeaUHMDS3YYHKGxR6gWQzhladbzRgsCxMDH5BFK8QdN/rD5DRRz8VXd4vFh31ZglT5nexnag5lv2URpAqhfElkMS9ugwGUCyzJAHJPEb80ASURgDfhWZuoBkng87AKRjJn2GQPKCeAJFnzlKFXU6kdV1q8+C0u0B9eZJtCsJ26Tv+osPYM03J3m14O+TEZnPJJTIIQGkBUUNy6oY4pvETIfk1TV48yroe9VVDF4YRDeFmCmioGbBBZJ+niaQ6pWxD0iGPdoSSL9G7een6cYUSJpAck/kazVUiZbeHJD+04cFpK9qS1H/xoRn0rFZ3XWrz273jvMICsS9cgbd8+A1Jy00SWLWJ+B0ylATOaRdA2mBN3qZDBSJ4dtrjw6TG7XLnJQaZIyaTApK5ryaBbtcO7FUubEjP6v3qfrqaxodJlFNJ1+pKXVMshhIEkVJIE1HV62fGkjfkx+yK/9oFABJ/8b6e/kc77rNnKXbpJF5oMOzs1fLVDok94jLSu/wRrcOpDJ45neop6m7yDtfZmoeXqfrvM02I3PbGDBpXh3Mq/OSNQs6px15nRhI89pnZeNqe/TziIQ9ygOp/o0hkI5AOAak+c3HV9zmi87rll6vyVdWeUQ5pBlFHxaTAmul6yMyPnhKdEBbiSXh2uvUUXyggzBJYo/4NnXUGXmnpYg/LR27I4d000Caum9FWlbk/eqfnTpQVte0R16ArhRZxVDPWDG3xRJQrFNQUzULYmEKyxMaQPqUZHqbpD0SQKopVdPoYIfRkkD6peByIFVYygCpmMcg6baqGEh//0aB+Q8fSLVtMr8L0zOVsII8cx6HlVgSMWTRoP1kGaPn6SiG1jRJzTqjTLdsssDhYUMYlCs6sgEgDel5kkx6naIi766uo3e/ZDxgkpifL87lEaLLNS6Cup+imgU3Rmdm5jK5dGsRfJuy8bpVgXREo7WA9D2tDCSREquZ9CnG9uHPjwckwarSolHtmeIKclFFWezutHt1mrgOHXuF4LFJaiZ0B9JImkZvx9VDL6c7QIgc0vUBafJ62Y6sw7NVt6bP2O4a9M2j6urtmL5OImaSOYdF+VyyTSTwQzaQdEjHyxgVB0hWTk6sDoJGh6rOTbwignghkAwarQokzRsDSF9TwKQUkI5M0qH6KRaNNKLqLyLwTLqlyUOUjuuGzsnrTBKldwGNguMb8p0YQausHqIvZzjzu1zRUd83AaSeVqSeQgav5ajpkLzh3vRDdRTiTfVhmAG6krgqot0ponevTT9Ur1kekPQO/Xi9e1Ox0PmhvU3dQPKST1/qWLzDtC2Q/v2BDSD5p/NFtm+uhpcmSQPp75jzgVT8IF7xNxlxoYpT4aJjwmZnksgtlWKE7HRn0vDZDc0T9ztN0rnideSQ9hayu2uR6ckCQLEOlMs7JO8KPu+oOh2OEPZIxNaLdRBDzKQaP8ahcyUsotNAihcvM3BkxesCIJmrhnglDaSj92wNpE/j0lsJpOA8pBBIVtROAOkHRe8+kIrjmYpTL95saQrqLa2OWt2ZZFY66JCdPr5h2CQFOaSYRmLdqEowyCEBpJSLciN1oqbOZFKzE3ZJ45FGUXAQgyhAmmevKKsTRXQzgXTLiLl8GKvMZ4JJpQWkg209XydJowBI+lFPfjWEcBX1e04AJHWr0yCQpkm3VR3VJco0Uk2j954gXvFr8z4SvWWlkViqQ3zeqay60kGfJyRMUsChvEMK0ki6rsGM3T2dggrFOneNkN0OgXR/vF4Hdd4v1m6o2QmbDAiUEmGpZlLx7zcSt0Q/OodaPpgdIZlD5zIxuk+Vh/iosOQBqVo0xYEUAkhvPSc3i1cUkIz3nAZIn1MDSMmGXxNIRmmDptF7OohXErV5okSlOJWWVmJJZ5XMQnCPRrph1pukww6p+Ceu6tNSXibTJJFDIoe0oNDuaZIhu5fJjlDHDsncyOcd0puqZ9V7wxfr7iLdYNguWEj0Nsr9b0mUCGf24Icjk6Tjdbp+N2ZPHkj6d50QSEZVhf6E4o/V9RpFnaJUd1AdwUYDqYRBvOIjqjiIahbjFT+OV4xC8Dvl7PW54IJG3iRd6JDMRG/GIV1AKxI5pF2F7B7UFd1mG2xy86X7wAcckmePXsOyulKO7pIQPimo6o7wY/a0mn7oU9UpBMtZsYH0pv6lByv8kgGSfiW2R6cH0sG6b3A5kA6TMknvVrxu2DN532mzGK+E99g6JwwJGj04Y75rkuYdkteubha+il9U1wySQ7ppIGXrGh4m3cXWYFJz8xX3NCQdkviFaLDQGV2zfqEOd9y1ul9lS2Ozp9VrUtHJcLF46R26Y4+epzaQ5vmfQVS9cL9NFwGkg3XloBe18/quSmkBqcbP3wftA8nzTCVRLJ6kkR5s1vXBpRxd9+fR6EnVuQ07pKBfMHZIHo2eT9QhRA7pWkzSg0UmUUvdFZ42T8pa4pB0dYNoDNSt7PrOiHmGyyI663obFz+Zo8/i9SsIHFn/TP2Qn6elQKof7yUAyTzC3DwYqQkk0SxsZ5Le/v1434XnmYKw3qfVwOQllooK4lmF4HHIzgytlyIPMQkcUrNdvYQHenmtgZpJ/35xyiWOHNKe00hmyE6fy5Dvcsg0fo+lTF+dEqNHtVv0LtOTm1OzqjvfbvKRjtH1AEn8Az0g1U8mRtShKs+LiyPOAqSDe5aEDSRdRqjbs2Yg/Q7Rt+OfEuaTmnkmUcKnLbI+q1BnlZw+WTFidcgucEheL3m8HdTt6u9Tu1lQ9yM6NDpvGokc0j7TSI/WYIodUum5cmKgqPTNqiDSITtd5619Uvsu1++QScWp+m3Gc+ql7cNJZvz7CrQLFDSKgWQiqn7OQXFEE0gZDQMpLrvwOn9NIHnJSxtI9f9lAskL64ljIMzq8JI44kGV3un904NzqbFOI5knTMbbxEy7+vvULoU1u6CeN2xFSv6Zu3BLAEmlkR4Vk3odUjJC3eWQ4gh1/Qtd532UGEuWeuseoy+rzLeEXa5BjM7ccR8DSbDWA5IofM8AqaZRHkhm9aP4c/RgWBdIh0Q1R20BxWCzTZL5StIzHRSQMqG8L8celcb9s2bIzqOROGEyqGIIyureW/M645CO4+rkkABSziE9ql94DqneAb0lyJTvmDHD06ZDerGQ+eBcJ3GvzjWXt7vqsjqzx+grXRP8nojRvUkkP0yNeJ0uLBS3QHmIWgIkbaqaQPKwlARSKRGQprAjWAPpoG9JeFvmmZbQyMwqWbFis1v2wToCvM71eg4p3iDGe8SBI48vwyGRQ9ptDunxOOT1mO4DLwsOy0qapDe/fEjUXOiyuqJPBjIzRmZZ3bd1c2ivHwq22GKTfpypFuBZBUgeWjwg1YvaGJDqgZEH0ptToRCYJO+f2TZJJpA8zyTq9MTpD8U6esMrc9D91McHOtypuruHyTBJ9YlZOgdZSrvUKLlHFGd6NY88NqthySEBpCy3Mg7JTCPp6oN3697YrksqvQtX9IGqYjbWTBJ13mb22KjBja9r8/CTrFnQQHL6wMSJfIJGz+qS3BcfUfMTfk47pLrSbzmQ6tUqCSTvANlk1E7XEBZ9lZwAUuyZzNK7g1/pILJKxW9XKuHVWa2Qna6u9lA0IC9G5x0v6e1ZLYe0xa/JIV0RkAYc0hYmSawp9S9ewjMczaxvXedt1tcaVQzxTUVF3WLQ5YfMBVEByazUyABJv1LTKA+k+nr4tYBkMikOKpbiniXRRJT4BxZ9g6r4RjzPZH6hXnW4iOaZ2xezOjym0TGE9GENsm4jtEe9DilIHZn3AZ7WIZnL3U7TSNcPpI40kumQ4uOEzfMUzIB10iEdwtklAnfFOpqhj0lFncrsNTOWYyAd/Hq52A+9WWRSKBU0erTsUR5IXn2EBpL2RqsD6fUYS8NAimvcTSAV775t/dXo2F3JHfFwSFy/FBxy+FWNSatV1nRIz8dHOwZM6t0UxheVmfmqF7VKHG9qT7nEkUPacxrJdEjJNJLeJYkVocsnibOz9OEF3sl1esbq1kIZBjEzRmKB0McuHPzTo9/TUaBcvC4JJA9ReSDVf++mQJr/zM9E2UXQJBADKRNfinJIcRrJK8Y7yDMJ3axScc7Ba4XsTIf07Nw3EVTQmTV18VbS7BkI7NGLvYxQ+Y1D6nRIj2prY66DGRQlTVJx7kvWEfDXY4ckonaePfJu6owyRsVvMzpYS0/J+SH1yoN1inNxbmN7rhaj+ot48LNKgmQmkMSffwIgvfqwyQQVX1qdWM+qquJ5ckzSm/WfTUqZxXiH48RScQ/PlYPqS41GQSOngb2rSiifNPIajzIXlenKo6dtD2ugqOF6K7+9wF1Q1PDqnDWnTdJYZrUpfaBq/QtxIJjce5ZWxsgrqzuo1ec9EQV6Mz6/tnQie3TvFBNmgFTT6NnP64j3nAZIr630T3CSbFxYqCs4hP/LRu3eWpUO4pVDwjnp+kxzb2RFmB+srsEXq5tV/2czD/eePoPfQ5GO2lmRDHJIAKn9a8MhFXVMnNgBeSbJ60fpKjwNCoReJ5tG2iEVHbITR9V9WmtBvqzuEOaQSqu2WH3mO+t60BhIJqJMe+QBSb/nlEB69tM/8dl9TSAJkySA9DAlyupKP6KCrFI5PuXBu+5PM2kyegMerVzO2zTojQ5TtvFIYykualDnG5FDun4gNcdbh0PSaaT6xFJd1CC2SLKW6fiepIHOpGbdqnZIv0zyzk71mFSsg+kOflW3VxDs+6GqX1SuMvOH1L2986Jcn4T0Yr2SB5LueToXkJ6dSwibQHrx02kaSMU5ecRWkPMLEBV7o3fVISBCdgGNjj/2Y0/Irmv/JwJ0uvHo1al9TUbtyCHhkLI5JG2S9L3gzaKGVyf5qYd7pvSuK2pnB9lFJ6yuqROXGOmLq3W6KLBE7z0hu29pj9YCkq4g1wu0WS5xLiCZt2w0j+8zmaRDzR6QXJNUQrcUIEpXtRwsVol7lcwqO7+oIbmHyxcQNcvqtBl6dR57OT7YRSR6n8ghAaSxViSx0OtbKV/8MdrsTBpoTvIkIooGjXTGqFgXkAe3u5qHxAxYIm2Pvg17JLJHdVevOLxcv6KDeCaQgvq9MwLp2Q/5amg1O4LNf7KIfKaW+K4DHYo1GPTeRdzy51XZFcMbDZAmKKsLihreW8WKr34MX4D/uD3j9OkJQnb7BFIdr3u0bhjyOgx0+Fjfqrduc1KgBpPEVWkl4ZN07OWtxxK9qWqu76O/fV0gCc+kYVPUze6XA6RMlivTg2XW49T/3shwvLXL9F0aBec7FCeHpKvsRCtSUSU5i2vqDlO0R6xfeVN9F7qEQVQxPFtnXG1Z1EAO6XQJofjF9QvtTBrVFuQlrL7rck5jedc8jR68KLwoYTADdMW5OeLgrzt6RWs6pC9ZClibOXHbes2eB+eVDJBqGi0BkusoFgNJx3szQAqids+T3c/QVULthvU0xnQcr/gm6eCH7IqKNqenSW/GSCeNkvYoCNmVo/vLNw3Zlau4yLxcvqEp1oHqvU+2L430eHx0ozZJYmkIKh1MFC2vu8v7JCPuoRs+PDNU/JBLSfih4hDrWwLJuJ+pdNsjzzPF9igPJC3954h47zCQHp2K7fw5fsU/hCllkvJfcbFcVFB6V5zmJEGjrz4aJSdIPmMk7pWIy+riBN72RQ3XE83aS4TtdEDSldM1jZ6cu8Nf/LuTxRbbrLsbaN/LoMh2SF9WRVNRHfXNjFGzKEvrQ9mjL8seTYY9SgJJv1IvDfc5h/Q82YuO/sNNIIl+XtFHmQTSo1WxHZvyOIsWRO0eJiuE27RKJXe+Q1EX/RWrVVbTqIx4o7E2o6Cq+9W6uLkO2YlvpBS5c7Ui/+SQAFIuZCeWPBGye/LvRxgL2Yk1a63SO8MeiVfMkJ3nkzIZoy6peJ2gkbRH3+qrmbKIqmnUCySxZA8ASXy8LiB5x5wHZ1XouKV4AsLG3SVDdu+JrFIQx3u3kknz6KpN0vH/NmnU3Ml5hwO9J+q8k2bI80NPxy3eGxfaZZZNgDT+ZIW9XQ6kVCuSWNpOELLTIYK1skrtogYzZKeTRvlYTZNMzrnOAZB+CwKt5qoYUfVZZzXeBDYefQvStF9e1E4DqR5aeSA9+t1UXmHhg7W1Mg1i7U0fpk6H1HTGcchO06jYDmlh0ijuTMrMx7jUO47RPVkNjudrRSKHNF7RcJ4cUmCSnqzC2bpbVph0s+7uzYnjvYXnOQaJpT6fVCwmFeWTzKTRWw4/mXhd0HFSHUBuAkm8MwMkHf2LgRQE6FYB0oMaA2NlF3kgPSjGu0BqMuktMRK8kF05dkt1OcOhm0bB+O+q8463iWbsXcfnzRIGHVOpvlDSRRQ1TFmHZJoks0XJtE1BEM+L45UiS+9WPvhO97pnQnZm32tJ1wRrFHk1vpaBu1fnSnhAMj3T/H/VNIqBJOr9tgOSCOJlgKQHWFBb+DBFQLo/DiIdHSulKvK7fZKO45lVdrFDSn+A5C7NDNmZbUb6IIaFITu9dGwJpIXrJEC6SCDpVUMsDfOAywfxXqZ2HO/N2r6V/ttm20zSRQ0mirz8QZzoNmlU/6+OGU5+m5Q4VGKSQPI8kweke3/Fn4v91gLSY4sT+cL0e2Xjeks8bCCJDrAvn0mHMFSbrGsQf1qNpQSNNHKWXyfhZYxeJzfn1xWye7JjsOSQbh1I43UN+oA73Zykb6kwK3FfEyE7M6u0jlvyHJJ5BnNwUmq8EsU0ytgjD0iTBJKJqCBeZwJJ0+jEQNIrmgkk84TZ+E+OTVL95O/05VhmrDWzIwkaY/X150XdYNJTUJcpefDw8z41SrpfnZSwvqjzyYn6njZkl0mTA6TxNJJOJi1JCXabpHkD/tgfsgs6RbyQndmAOdauFE3UyUKCeQOsWEq6vNG7wyTdAvlh3T7wpWjUD6R5VY2BJFzCWYA0/41NIJln+sV5ozidZpy9K5j0oZhk1tRlLr7S+5u6BTvscOi6Xq9ZROf1GJmXSojJ69V5P1lXeYl85PYhO3JI+/mnLqlrEKtDELJLlt7FAYFmyG4F6ajdwTkHsyubXY7bTXQXZAZImXjdZL9yRKMWkPSKfEYg6YugTCDd9zQFG8+kWEAS/adfqtqlhFwpnUUN7+PGqMsPBQ1G3okMpbgZoxd/susFQVvw42+KHBJA6qxreHBLNuXIMzvgvNK7VyerFNyllGnoG6zE+3Ji+s2ihqC6t6gWSK8n37wORwOp/DvTKLZHonz522WSbM86IZDMSJr4e5tA8g5SsisP9WMpVtRucgKqZrXLQHOSSbKPVP9QxhKZvirYyXkXkCeLvIMAnROjE1/NaZY4gHTRQOpuRbp3jm9wEpUjzulV3U3ebFdarRKvrrI1UdRb71ssh+T15H/49ujjaPX8PfVVlYbbQbzvBJDUb7wQIN05W2yTqQaQzOJD69qRe/MxmhX5ukhyiUl6Pz6sYSVLVFpNr17jkRmiMIMWdcboSdV5i6Syvnv6OBFADgkg9YTsmofWjNEok1V6CxH15rildYrxgrOC4qWnqMxTcbogYyDVm3EPSGZ53vx/fTeA5FmrywKScylU+/QKv/7QjoKKJxkXvOgEYdIkmcnFBX4oY4mKdb1epu/1xWkU007o6eJCduSQrg5IwT7Uc+JB6d2zOik8yCq9+ogK7p+tgbRIXtXTe8Ih6fvZ4o6TD5VY0pQSdzU1gVTaQAqsVReQMloKpOPRZQPp2/FDTsWHC6T6rocPp+ClWYHZjOW+b5Uiypcw6BdfJruK4cVpFFvCJKJ2AGkQSHXILliPvPTSk3/9uZlVem0hKojaJYMYWc906Fl0zEqqYl1XcVBLm04sadv0qYCk19Dp+CJ2B0i2IUgDSeq7atYRq7xY8Uu7ZdUFknMTR7tl2Cz6ME3Sl38XiVntstAhWZZowA8FVd1v/undxTkpVeDHDGOYsXdxgEv9yoNzs9eWUTtySNeYQ7LbNUrjVE2xRXqa7Ff0yH512pVE7UOmOmiTYrxi3Qkb3GBdrBPBaxrpw561bfpQNPp0SsNrGn06TAp+YwtIMt8W4Cd+pbh8susa1MeLgBRUIcZMMp/Mh8WkcvwNJh3SZn4oY4m0KyrhsQselop1endcvGBuXlXohRwSDmlZyM7zRg9TwxsFvUrJKTHWP5uZ1SOHPjQdUv36Qa1lglIHRSMPSF8WV7SR+g59QBpIqdaosVdKN5CMkZnp04p9ZFEljsXyqSIFmNmp+JZodT8UT4pk+MG8Blq0GQVT2zz4w1w3qm+QjNFNAym5gzhCkd4s66PAROldbdK9rNJza4PmISrTP+sV463jmTIOSSxMemddrPuWPlrxOpMrJrdie9QC0pEr2ghIX3LwtIH0JUegbQQnp2ROWMm671UnjYpzOZb5/Q6nLEMgLfFDxbl9ykzQavzEGaNM0qiOEotzm6pcADkkgJQO2enNcsY5mWlMfTmKTiy9HFeRxpV4+WK8TANTvqUplbvWuDpYGSkziCfKHGrGHBxCfPpAKpYD+ArrxYuqe94OSF/yGro2kLxjZ71urRK6yeIE6MwqBp1JekvBxrsoL9geecMy74cylqgU46j1IIyhLVGQNDJj/tuH7CYaY68sjWSjaJhGzY2Vd92fRlS+GC9O6m6VZyqJrFJdC66DeLrMoabRwcnAe0AKum698jz9nhMA6fhSqBSQvtx2K7cc0XtipjE9qBN9wnSR13/d1dPa1UKU9EPeSXRBtcKzf7SgrmKIk0ZeL/bGIbvm+gaQdphGulMhu6D0rlj3nplZpcyxQ96U8M6+yx+Lt5Zn0otOwzN5teACVDo69Kle+bLKkc3ah480kAIXdUogfckhFwHpKwSSWZH45QdCYyZ1huBKyd5rHDMp3lrl/ZA+iS4uoiv+wXSPVgrZ7zSSIVYRbiGHBJA6emNjn2S+YmaV9H7KO3aoGTQwK/HiY/G28Ew1pbK26d2K2r37cbyD84qgkQekjxyQipVEOSOQxAlyTSDpkrnerJuZMXpvwyZ2P5mahXhjtIUfChK05rELXkfRo3+URpA0spaUky1xO4IfQMpF7bT7Th3l4ieW9GWgZu1DUIknaoTGPNNbuqIpsE3dReSCRrrM4eC88mVRKt7yf/jrcvM9ZwHSl3+LrlmfXRwgeXWJXn5uA43VLBTnYoheP9RV1Z0JqusQiG4zCpNGIjBLDgkg5VqRahTdqdF2N6UalTwambstXfvgHfHg7fUyM/Y1HQzpsk2LKsiT9ih4sUbRIQGkPLTOC6SPCksBkMxTLepnUiwgtSoRFrofb9gEQMpcJd7cb2WmSVDV7fWzmwfTBW1G99btU2pVIYcEkHqOs6tN0r2VVRIxYp3SFEM531HrVeLF/eSix9YDkg5rbFeeN96K2wWk0mppCm4jvGQgeZdFfSUK5Td2P/NuIzMw4mMYvRidvo3F9EPxpHhWkyI4c8Esoiul0WPktBnJaL9qLSBjBJBGQ3bJOJ5+Ue+nvEPw4qDBi3UjbZJSzWqIsVRT3jyN15Qbq2Ai1fRhLdZJaDWBNKCFQPpoHanwkTo5e133E9dtNxNCXTULZqI0GY4LaoXyRXReVENfD2/i5+5sITtySLtnkjTXXtdkk0b5gx7iSjzvzKG4eymYosPleeYylIGWBtLae/UWbA6J93iQEBK/6yPxilYvkD7KadQFpGb1QQCbsZqFZn4o7nJ9bl0Yn8/7qoPpGhmj+hD3E0btyCHtPo1klTm1CsHFi3FiydttmTfSBtu6gFIZzxQnhzPrxZLM01hn7riv0t2dmTxTxld9LEBUE35DIBmzO8mmtLz76R08+ZqFjB8KClaDqu6giO7BP3zd26TeSfzo7rcT77nJIe3TIZlt/GKzY7ryZmIpWeagTyFqzrTnRGTP3GA2j4EY2OR2lUuYQLpZjVUWrAWkAQOUGRimHc8E6Jo1C0k/VNS5qHFVty6iax6WejfZjUfyPKqjhYWkEUDKA6lECaTiHMfZas9ulDl4GzTzivTVPVNwkbO57gysTb0W6r0zGLh84b4pDQBpYBcSB9+C92RqFuLxH5+LGlR1C/zow3A9/ETrg/HEmqG23l/v1BsBpM6Q3Z04z7+VWLr3b542yxyafeB6cxc3MOU9U6alyVyDMtCKN9fDLmqT04829iindDZJ99Ms5e8yQK892aD4ssqkuY9D2SV3Lqo+XsErotMHtMfb0yhkRw4JIGVzSN7Jm1NHYskzTOY12KLHu0mjp7CBKemZvL1nHD+JA30BgV6nEReV74Jaa5leApITWJl1geR9F571yQApCLtlgm+lRO9plsw1/dCDdS6qxo94RVcxePgJblmUKwk5JICUbUUSHHKGV6uyU9Y+JEe/Li1NVocnPVNcnldy95gF0Ooql2iGgJa7qK6q5UvDxsJPOxyOi91PbIDi6rgYNs/+PilTMtfctMXhuIfwHCD/2IXW/tV+D0kjgJTvjTUHk1ULfjc1bLt5MXYcH9Av1nPsYRrxTM/h4eJmbCQO9DXLomIgmQArzvlGeSYl5aW1tguRncDZJL3OQD1ClwFKBt9i2DypSHKmZC62RMlwXKajI1FE5xijMxQ1kEO6AocUR+3CdqUAUQ9OJd6DdZp4PG3ynimOcuiVInhPV7Ve7KKS3MoX9enWqCVgW2i/LgRImTK2ruK3ZntQJmnkVcE1vU7mPWaKKNjqxU1F9+Hp3W4RXQnv3NrWIc1/MjmknTHJ/LVTD7MYUV4l3oN18lXSM9WgCjyTV5v3nH5P5tjK4KSiuGKiNx01Fg9cAqTLqYhbEUhjaIlh85Ko2B4IvokTfYL3xCkiXbmQbyoaKaITK4Y8s+PE225ySOesXAiU++3iuBe9zelFVHE3X/rFB3UQVib51OWZnnPvSQb6vJOKMsmnsXTUEiD1aowBva/km3jij7oESB5aku7Hqz5oAsnbQulDTh9bNQuZFFE+HHc/NYroomsVFy1E5JCI2s1AEjSKLXkLUbrM4d45TdyjVHKmZfJMz8f15c3iiGQQ7yWdoMrgZwxj+bDeWmA7AaIy//BMLG4MSL3up9mgaiaEkgnRzEn5XSmie/9c1PZpllNrk1oyJ+2SQwJI+Vak2SrF2x8fUWJjdZejVOyZzLBeJs/05HTdDhRHeHG8TPIp46K6gJQBT3I1vzQgxXXVC71Opvog437yBshLCAV+qK5HMI9UaLYQNZsxPNMTHkPnFNF5EkDa1iSRQ9pfQK/HIeVDdn7zbBx9Do7FW9EzeV23zW72oMmpWdQX1+89T91A8uzUsK9aHUj5AOAq6Z9hr/M8Nbxp0v08qT8nBtKT6m0woRUf+fg45Ie8qdTcMiaaiqwFwYyylK0dEjmkaw3ZlWAkJZpnRTx6iiodNKLuW8mnMc/kxT1KadimfKzPi9VkoPUSYiyuRF8LSAsVfJ7Yr+SVaf0ZQMtzZ8PQc6uUpmmAguBbcMRcKS6QMiVzcYqoY/cZV3h7ITvSSFcBJFERN/yN9oTs4mvWTEueO+KhHSLww3oZz/QQHgwRn+76uCDWF199lgeSWNQGMBYAKUmU+E8+7ytNVo15nd7cjwebzAlyesg9tqx8vNkaKJlLpYgmBzZTmDEqrfDdSXNIewnflR3RyAuM9j7o/qIGe2uj3vOdOOIhLMaLG5i6PFNQm2ceA+EBKRnrC6rMk0BqxnzGgNTkzS7wM5za6fU6ydxPM/2TGRgmkOJrWYIjFYb90J16T9QX71mibAnDiVuRyCHtA0j9dQ2lNeAyQzkT1gsbmBZ6pqRt8paDDLQya1OciHqaxoGkNYaxXQPJfGLJh5N3P71fehwifkzE6IIAXdxBkfFD0dGoHpOSfshLOJ2oroEc0ua0XwikZSYpzi31FuO1wnrNUoiMZ0rapmbApOtqwa7NcsZFxdGkdX3V9QEptjtdxQjBFzqnCTMBOp0Q6o3RxUcqdPkhu6xuuR9K4YrUEUAac0heEacXsmsW4/lhPX2U+IBn6rJNzdqHDLTW2lBn8DOGsd7l/hK0BZCeWojKA8mrkWkCSY/AZhFdcwe20A9FXa4DfqhksEQOaU9A0hy6AIcUJJa8Ix5CP5Q5SjzvmZK2Ka4X9/xQ/B5vget1UWaF3gDGxgJ9mcrA7V6JLYin5UAKYmt5IHntQTGQNGziIrpkT6t3ok+3H+q1RN3QIod060BKtCJ1bX/yxXg5zxTEGbyNXleqqVkvrlelDLT08Xp5F/UUJhgWAilGziqo2w5IvXGzJfG3pi2OG4bi9qBSGkAyR2kco0v1tDpR9E38UMoVnQZI5JA2qWUQ39w5QnbjVTR+j2146Eiyo7bLNsVH55krSPweczedgVZspHoxFpx4lMlXXQeQkr6qC0hm8duD+sOT7icgTQCbu6EYXftIhXX90Di6yBvtvg/ptEDKnpOYqMTTozZTCuF4Jq8WKDgGovhH5wUoakIr47Q8F5UvoMhkp8bCg9cKpGajT9LurO5+7nsqtr0B7wJpam34tvBDYud6oRDCIW31NBd+u6Xjmr6yeBs15pkmu9LBvX8lba3iIF7wnjFojbmozPlG+cL0rYG0RCcGUtPuJKuxl7ufOIwcFMjFfeVugjZuMxrzQx0MO28hGA5pB5HAISD1GqbmyPbePFBBnm5pCi5j7so8beeivMKtuJl3LSD16jH9eYJzm5JaHUjiu+iNyDXdj7d3yQToAiBlbyHyWohOpAvZweOQdmO21ihtyG+seivIxw7U8j2TV+SagVZmTfE4lHRRHoEGMNYb6OsNIZ7yFY/xQfxtCZCaf12X+8nvZqKIdAmB1HV3+EI/RF8RQLpoIA1kmLqG+xqeaWTjmQjiZaIuSSAFS95CIMVL6vCffC4gPYSvBHwd/pMDungFcgFsPOfUhk1JF8jlL8rr7ejYN4dwSLdjknrrGpoZpuWeKXd03l0aWnFk5m7qc1EP4RU1Y0DKbOfXQt1lAsl8JQgzjgEpOBnB26yMDbmOArlkzUJX+idliXadmABI+/621o4wf2/gmRIhddcPTY1qPa8IIumiluSiMqGk5Wv3VQKp2egTP8Cx9E++PMH8vR37rUxad7jJ/ar8EA7pmt3rJXmm+B7luPChF1q5zNOS/PZ9mkBjJFtokk6gEwDpPnEWXG89Qv68uHWyQXk/NLBBJD8EkHYbTj25Z0peyDQtgtZA5mnARQUmaWBlXLJ2X8zWuGO8rA6k2Lh0ASk2QH0ButgGLalZoHcVIF11fu8knqkkPFPXXcuJdsJ40fGWm7yRum/tqZcD6erWnTarlgMp5koHkKbErULTUDZo+RbwCjlEDolvawvbtOTwku+hjefUHcSLj4pIGqlhjDUrJnqWmKvZEUdjahhIGUR1AClZC7dixfZtFW2XxYfaAKTdO6RlcFreGR57prFewmXJp6aR6sVY7KsIsywZjb1AusujJV+hIPBzEe2rDCqAdD1ASqwF+TMgereHU4tbDn5SZ64MGKnRVQ/2nGVwDobjxtI/U+ti1tX8EF83QAJIwzG9hbnZJLemVsBkbN3pdFFemRaLyDkGc9tLjbifUx/hc5vjhxwS39a5nNNa50J+5wr2lkT/Lh0/kG+N7dRwhcJqh5zyHZFDAkgndk5l2SHE37kmp4VRl0wuiuXjdlgVhI7HBzPbFEJ2AOmSndPyjedwxUTTRTG3gVbJo4vHBZAA0hWYpzJwcctQ5qnhophpjGTEwABI7cX9GmMjHiHWCtZfefES6zu6SiCRQ2Ld2YWL2rBaicUdsWIggHSdw4spgZiACCAxHxBiMCP5tC/81/saGOSQmMaI9Z3Fve/XV/B4ARLrDg8ZsbhfyeKOABIjjFnB4n4lizsjGQEkpgSLO4s7YokDSJf6be2vd4zFnWmM0LLlAiCxuLO4I4ThQLcNpCs7JospgVjfEUBiPiDEYEYMDIC0pXliyCLWd3T1I5kcEosO4jkjRjK6UiCZ6Z8lOSHSSAgxkhFAWjp85zu+lgxxpgRicUcMDIC0zoNeDiRmMmJ9R1c/kskh7QNIDFkWd4QYyQAJIDErEOs7QjsHkudDcUiIxR2hPY6NazhKkhwSYn1HqDmYySGdYqXAIbG4I8RgvoZnewWjgRwSQqzvCCCdYeyaR6MuPCyVKYFY3BEDAyBdEOd4Doj1HV3xSCaHxLqDeMiIkYwA0lWPMGYFYvYhgMSUQIiRjBgbAGmzr4qZjFjfEascQGLd4SEjxGBGAGm3w4spgZiACCAxHxBiMCMGBkBiGiMGBkJDI5kcEusO4iEjRjICSNc+wpgViNmHABJTAiFGMmJsAKTNvipmMmJ9RwxmgMRXxUNGiMF880+VR7Df4cWUQExABJCYDwgxmBEDAyBt9lUxjRHrO2IkAyS+LR4yQozkm3+qPIJdjzBmBWL2IYDElECIkYwYGABps2+LmYxY39EWI+c0vy4JASTWHcRDRntd9HekvU9AVod9r5Ws72h3i/7VLPGsGACJxR2x6F/nLn53ExAgAaRtvyqYxKJ/Hbt41ko+MEDCIaHr3MWzVvKZecgAiW8r+pw7XeKZxnxgHjKfGSDtb5+eWeKZxnxmHjIfGCBhkvjATGM+MA+ZzwyQGGR8YD4zD5kPDJAAEh+YacwH5jPzkAFS6okvOSSDWcFn5gPzma/1IV/6I71ufzMwYpgVfGY+MJ8ZASSAxNLDB2ZxRwAJILH08JlZ3xECSAAJICGEEEACSAghBJAAEkIInXaF9A58uYQb/AASQgits8THL17sank5yyZAQghd7hb+wtd3c8HZyyoEkM62YUEI7XFPeeHre+YyqstciIID+AESQuikC9DFbtoAEkBCCA2a771kCy4wPnMF67u4mWwvQIo/IUBCrO+Xvr7vPVuwFyA1b/y6wA+8u1EBkNDZhhrr+6Zb48v/wOKj7sghXf5D3uMwvuSgKEDq2Lzv5WPvItax3/UdIPGQARJAuhQ/u6PZy9Kz3U5lL09Yf1RGBUC62C04QLoeIOlPy9LDB94XkHa6vu+01OUSpxWPACBd4KIJkFZfK+fFkfUdASSABJCwdFAfIYAEkC71H3Kx5afJj7pHIGE4EEACSACp8ZwnokkIASQEkM67uO/iGE2EEEACSEs/POs7Qggg7ZtJrOMIIQSQEEIIASSEEEIIICGEEAJICCGEEEBCCCEEkHgECCGEABJCCCEEkBBCCAEkhBBCCCAhhBACSAghhBBAQgghBJAQQgghgIQQQgggIYQQQgAJIYQQQEIIIYQAEkIIoT3qf8EH+l6la53LAAAAAElFTkSuQmCC\"}]}"},{"id":449,"title":"Grandpa's telescope","description":"Two grandkids Dorothy and Benjamin are sharing a telescope made by their grandpa, who used an old lens of spectacles as the objective. This objective lens has power of p diopter. Dorothy definitively watches a doghouse at distance d meters. Benjamin basically watches a birdhouse at distance b meters. After watching the doghouse, how much shift of the eyepiece in mm is necessary to watch the birdhouse? Please give a general solution, the test suite may be more extensive later.","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.4333px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 105px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 52.5px; transform-origin: 407px 52.5px; vertical-align: baseline; \"\u003e\u003cdiv style=\"font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 52.5px; text-align: left; transform-origin: 384px 52.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 383.5px 8px; transform-origin: 383.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eTwo grandkids Dorothy and Benjamin are sharing a telescope made by their grandpa, who used an old lens of spectacles as the objective. This objective lens has power of p diopter. Dorothy definitively watches a doghouse at distance d meters. Benjamin basically watches a birdhouse at distance b meters. After watching the doghouse, how much shift of the eyepiece in mm is necessary to watch the birdhouse? Please give a general solution, the test suite may be more extensive later.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function mm = telescope(d,b,p)\r\n% diopter = 1/focal_length_meter = 1/object_distance + 1/image_distance\r\nmm=1000*meter;\r\nend","test_suite":"%%\r\nfiletext = fileread('telescope.m');\r\nillegal = contains(filetext, 'assignin') || contains(filetext, 'regexp') || ...\r\n          contains(filetext, 'switch') || contains(filetext, 'elseif'); \r\nassert(~illegal)\r\n\r\n%%\r\nd=200; b=100; p=0.5;\r\nmm = telescope(d,b,p)\r\nmm_correct = 21;\r\nassert(abs(round(mm) - mm_correct)\u003c1000*eps)\r\n\r\n%%\r\nd=100; b=200; p=0.5;\r\nmm = telescope(d,b,p)\r\nmm_correct = 21;\r\nassert(abs(round(abs(mm)) - mm_correct)\u003c1000*eps)\r\n\r\n%%\r\nd=100; b=100; p=0.5;\r\nmm = telescope(d,b,p)\r\nmm_correct = 0;\r\nassert(round(mm) == mm_correct)\r\n\r\n%%\r\nd=51; b=26; p=1;\r\nmm = telescope(d,b,p)\r\nmm_correct = 20;\r\nassert(round(mm) == mm_correct)\r\n\r\n%%\r\nd=4004; b=8; p=0.25;\r\nmm = telescope(d,b,p)\r\nmm_correct = d-b;\r\nassert(round(mm) == mm_correct)\r\n\r\n%%\r\nd=255; b=55; p=0.2;\r\nmm = telescope(d,b,p)\r\nmm_correct = (d-b)*p*10;\r\nassert(abs(mm - mm_correct)\u003c1e-4)\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":3,"created_by":166,"edited_by":223089,"edited_at":"2023-01-07T06:15:33.000Z","deleted_by":null,"deleted_at":null,"solvers_count":26,"test_suite_updated_at":"2023-01-07T06:15:33.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2012-03-04T22:25:38.000Z","updated_at":"2025-12-12T09:35:32.000Z","published_at":"2012-03-05T20:14:39.000Z","restored_at":null,"restored_by":null,"spam":null,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTwo grandkids Dorothy and Benjamin are sharing a telescope made by their grandpa, who used an old lens of spectacles as the objective. This objective lens has power of p diopter. Dorothy definitively watches a doghouse at distance d meters. Benjamin basically watches a birdhouse at distance b meters. After watching the doghouse, how much shift of the eyepiece in mm is necessary to watch the birdhouse? Please give a general solution, the test suite may be more extensive later.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":44070,"title":"Under the sea: Snell's law \u0026 total internal reflection","description":"\u003chttps://en.wikipedia.org/wiki/Snell's_law\u003e\r\n\r\nWhen a light travels from one medium to another medium, depending on the refractive index, the light will bend with a certain angle. For certain combination of materials, it might be that light cannot escape one medium at all from a certain angle (greater than critical angle). It is called total internal reflection. If you point a flashlight from \"under the sea\" the light won't leave the water at all. \r\n\r\nFor given refractive indices, find critical angle where total internal reflection happens. If total internal reflection does not happen for any angle, then return \"-1\".\r\n\r\nExample1: n_in = 1.333, n_out = 1, theta_crit = 48.6 degrees;\r\nExample2: n_out = 1, n_in = 1.333, theta_crit = -1 (total internal reflection does not occur, if you are in the air, and beaming light at the water.)\r\n\r\nInput of function: n_in, n_out (refractive index, positive) \r\nOutput: critical angle (rounded to nearest integer), if total internal reflection occurs. Else return -1.","description_html":"\u003cp\u003e\u003ca href = \"https://en.wikipedia.org/wiki/Snell's_law\"\u003ehttps://en.wikipedia.org/wiki/Snell's_law\u003c/a\u003e\u003c/p\u003e\u003cp\u003eWhen a light travels from one medium to another medium, depending on the refractive index, the light will bend with a certain angle. For certain combination of materials, it might be that light cannot escape one medium at all from a certain angle (greater than critical angle). It is called total internal reflection. If you point a flashlight from \"under the sea\" the light won't leave the water at all.\u003c/p\u003e\u003cp\u003eFor given refractive indices, find critical angle where total internal reflection happens. If total internal reflection does not happen for any angle, then return \"-1\".\u003c/p\u003e\u003cp\u003eExample1: n_in = 1.333, n_out = 1, theta_crit = 48.6 degrees;\r\nExample2: n_out = 1, n_in = 1.333, theta_crit = -1 (total internal reflection does not occur, if you are in the air, and beaming light at the water.)\u003c/p\u003e\u003cp\u003eInput of function: n_in, n_out (refractive index, positive) \r\nOutput: critical angle (rounded to nearest integer), if total internal reflection occurs. Else return -1.\u003c/p\u003e","function_template":"function theta_crit = totalInternalReflection(n_in,n_out)\r\n  theta_crit = -1;\r\nend","test_suite":"%%\r\nn_in = 3; n_out = 3;\r\ntheta_crit_correct = -1;\r\nassert(isequal(totalInternalReflection(n_in,n_out),theta_crit_correct))\r\n\r\n%%\r\nn_in = 1; n_out = 1.333;\r\ntheta_crit_correct = -1;\r\nassert(isequal(totalInternalReflection(n_in,n_out),theta_crit_correct))\r\n\r\n%%\r\nn_in = 1.333; n_out = 1;\r\ntheta_crit_correct = 49;\r\nassert(isequal(totalInternalReflection(n_in,n_out),theta_crit_correct))\r\n\r\n%%\r\nn_in = 4; n_out = 3;\r\ntheta_crit_correct = 49;\r\nassert(isequal(totalInternalReflection(n_in,n_out),theta_crit_correct))\r\n\r\n%%\r\nn_in = 4; n_out = 2;\r\ntheta_crit_correct = 30;\r\nassert(isequal(totalInternalReflection(n_in,n_out),theta_crit_correct))","published":true,"deleted":false,"likes_count":2,"comments_count":6,"created_by":115733,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":58,"test_suite_updated_at":"2017-02-16T21:45:07.000Z","rescore_all_solutions":false,"group_id":37,"created_at":"2017-02-14T00:59:14.000Z","updated_at":"2026-02-08T13:00:17.000Z","published_at":"2017-02-14T00:59:14.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Snell's_law\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e\u0026lt;https://en.wikipedia.org/wiki/Snell's_law\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e\u0026gt;\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhen a light travels from one medium to another medium, depending on the refractive index, the light will bend with a certain angle. For certain combination of materials, it might be that light cannot escape one medium at all from a certain angle (greater than critical angle). It is called total internal reflection. If you point a flashlight from \\\"under the sea\\\" the light won't leave the water at all.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFor given refractive indices, find critical angle where total internal reflection happens. If total internal reflection does not happen for any angle, then return \\\"-1\\\".\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eExample1: n_in = 1.333, n_out = 1, theta_crit = 48.6 degrees; Example2: n_out = 1, n_in = 1.333, theta_crit = -1 (total internal reflection does not occur, if you are in the air, and beaming light at the water.)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eInput of function: n_in, n_out (refractive index, positive) Output: critical angle (rounded to nearest integer), if total internal reflection occurs. Else return -1.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":433,"title":"jogging?","description":"Imagine x-y coordinate system and you are at the origin and your partner is on the x-axis at some small distance (d) away from you.  You and your partner started jogging simultaneously, left foot first. You and your partner maintained identical rate of steps per second (r) and length of every step (s). Your track and your partner's track are parallel but at angle alpha to x-axis. Please note that alpha is less than 90 degrees. At the initial moment of starting your partner appeared to be ahead of you due to the angle alpha not being 90 degrees. After you finished jogging a long distance, a photograph of your foot prints at a random location looked as if your partner was neither behind nor ahead of you. Please calculate the largest alpha (degrees) possible under these constraints.","description_html":"\u003cp\u003eImagine x-y coordinate system and you are at the origin and your partner is on the x-axis at some small distance (d) away from you.  You and your partner started jogging simultaneously, left foot first. You and your partner maintained identical rate of steps per second (r) and length of every step (s). Your track and your partner's track are parallel but at angle alpha to x-axis. Please note that alpha is less than 90 degrees. At the initial moment of starting your partner appeared to be ahead of you due to the angle alpha not being 90 degrees. After you finished jogging a long distance, a photograph of your foot prints at a random location looked as if your partner was neither behind nor ahead of you. Please calculate the largest alpha (degrees) possible under these constraints.\u003c/p\u003e","function_template":"function degrees = jogging(d,r,s)\r\ndegrees=0;\r\nend","test_suite":"%%\r\nd = 4; r = 1; s = 1; degrees_correct = 60;\r\ndegrees = round(jogging(d,r,s));\r\nassert(degrees==degrees_correct)\r\n%%\r\nd = 5; r = 1; s = 1; degrees_correct = 66;\r\ndegrees = round(jogging(d,r,s));\r\nassert(degrees==degrees_correct)\r\n%%\r\nd = 6; r = 1; s = 1; degrees_correct = 71;\r\ndegrees = round(jogging(d,r,s));\r\nassert(degrees==degrees_correct)\r\n%%\r\nd = 7; r = 1; s = 1; degrees_correct = 73;\r\ndegrees = round(jogging(d,r,s));\r\nassert(degrees==degrees_correct)\r\n%%\r\nd = 8; r = 1; s = 1; degrees_correct = 76;\r\ndegrees = round(jogging(d,r,s));\r\nassert(degrees==degrees_correct)\r\n%%\r\nd = 7; r = 1; s = 2; degrees_correct = 55;\r\ndegrees = round(jogging(d,r,s));\r\nassert(degrees==degrees_correct)\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":3,"created_by":166,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":40,"test_suite_updated_at":"2012-03-02T10:41:06.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2012-03-01T21:44:31.000Z","updated_at":"2026-01-31T12:59:31.000Z","published_at":"2012-03-02T16:52:52.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eImagine x-y coordinate system and you are at the origin and your partner is on the x-axis at some small distance (d) away from you. You and your partner started jogging simultaneously, left foot first. You and your partner maintained identical rate of steps per second (r) and length of every step (s). Your track and your partner's track are parallel but at angle alpha to x-axis. Please note that alpha is less than 90 degrees. At the initial moment of starting your partner appeared to be ahead of you due to the angle alpha not being 90 degrees. After you finished jogging a long distance, a photograph of your foot prints at a random location looked as if your partner was neither behind nor ahead of you. Please calculate the largest alpha (degrees) possible under these constraints.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":1650,"title":"LASER Tracker - Mirror Distance and Angle","description":"Determine the mirror's distance and relative angle to the LASER Tracker given the distances to a reference SMR (Spherical Mounted Retro-reflector) and the angle to the SMR.\r\n\r\nTheta is the included angle between d1 and d2.\r\nPhi is the angle of interest and is between d2 and d3.\r\nThe Test method is locate the SMR to capture the mirror reflectance. Record L. Rotate the SMR to be directly viewed by the Tracker. Record d1 and Theta.\r\nGiven Theta, d1, and d2+d3 determine d2 and Phi.\r\nInput: [d1, L, Theta] where L=d2+d3 and d1*cos(Theta) \u003c d2\r\nOutput: [d2 Phi]\r\nExamples:\r\nInput: [2^.5, 2+2^.5, pi/4]..... Output: [2 pi/4]\r\nInput: [2.3994, 4, .2991]..... Output: [3, pi/4 ]","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.440001px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: none; white-space: normal; \"\u003e\u003cdiv style=\"block-size: 636px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 332px 318px; transform-origin: 332px 318px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 309px 21px; text-align: left; transform-origin: 309px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eDetermine the mirror's distance and relative angle to the LASER Tracker given the distances to a reference SMR (Spherical Mounted Retro-reflector) and the angle to the SMR.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 294px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 309px 147px; text-align: center; transform-origin: 309px 147px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" width=\"582\" height=\"288\" style=\"vertical-align: baseline;width: 582px;height: 288px\" src=\"data:image/JPEG;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAEgAkYDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA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Qyy8tLKRzJIeWY/U1eoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACql1ptjesHurK3nZRgGWJXI/MVbpD0pMDzX4XaVptxpGrtNp9pIy6xdKpeBSQA/AHHapj4m8Wap4z13w/okGlxRaaYmFzdK5G1lztwp5JPfsBVn4WwTQaPrCzRSRltYumAdSuQX4Iz2pnhOCZPih42leGRY5GtdjspAbEZzg96F09BdH6/qT3mreM7q+vI7G30vSrOz+U3Oqbj9pOOXQKRtQe5NZumfFISeAdR1++ske50+6Nk0drLujuZcqAY2/uksPX8a5pY9LHiXXz480fU9T1H7W39mxG3lmjeDJ2LEF+Ue+f8AGqGjeH9V1P4a+KLS20eW01CHW/tsOntHs4UowRe3QEcU15je56LZaz400/VdNTXdOsriw1BthfTkkLWbkZHmZzlexYYwawpPEln4X+Ifi+7uVaWaRLSO2tY+ZLiUpwij/OK1V8cXviLUNJ0/w3aXcUjSB9SmurN1S2jA+ZCWABYngYrEv/BVv4o+IHi5riCSK7S3tvsF6AQYZAudyH6gZo6iOkvfFer+GfCMOoeILS3l1i8nWG2sLQlRvf7qFiTkju3Sqk3ijxR4auLGfxLHpNzp15Ols76eXVrR3OFLbidy544xXO+IYtW8efDywuLjSJJdX0a/Vr7TmUqZ9mVbb0zuByMU23g8C391p0Xh/wADT3t9LMhlSWGWBbRcjLuzDHB7DOaOodDopPE/izUvHWueHNFi0uOPTlhkFzdq54dc7SFPJJ6HjGK9BiD+UglIMmPmKjAz3xXA+F7eaP4u+NZnhkWJ47TY7KQrYQ5wehr0KhbD6hRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUmASCQMilooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//9k=\" data-image-state=\"image-loaded\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 309px 10.5px; text-align: left; transform-origin: 309px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eTheta is the included angle between d1 and d2.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 309px 10.5px; text-align: left; transform-origin: 309px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003ePhi is the angle of interest and is between d2 and d3.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 309px 21px; text-align: left; transform-origin: 309px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eThe Test method is locate the SMR to capture the mirror reflectance. Record L. Rotate the SMR to be directly viewed by the Tracker. Record d1 and Theta.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 309px 10.5px; text-align: left; transform-origin: 309px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eGiven Theta, d1, and d2+d3 determine d2 and Phi.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 309px 10.5px; text-align: left; transform-origin: 309px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eInput:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e [d1, L, Theta] where L=d2+d3 and d1*cos(Theta) \u0026lt; d2\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 309px 10.5px; text-align: left; transform-origin: 309px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eOutput:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e [d2 Phi]\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 309px 10.5px; text-align: left; transform-origin: 309px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eExamples:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 309px 10.5px; text-align: left; transform-origin: 309px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eInput: [2^.5, 2+2^.5, pi/4]..... Output: [2 pi/4]\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 309px 10.5px; text-align: left; transform-origin: 309px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eInput: [2.3994, 4, .2991]..... Output: [3, pi/4 ]\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function [d2 Phi]=solve_mirror(d1,L,Theta)\r\n d2=0;\r\n Phi=pi();\r\nend","test_suite":"%%\r\nd2=2;\r\nPhi=pi/4;\r\nd3=sqrt(2);\r\n\r\nx1=d2-d3*cos(Phi);\r\ny1=d3*sin(Phi);\r\n\r\nTheta=atan(y1/x1);\r\nd1=hypot(x1,y1);\r\n\r\n[od2, oPhi]=solve_mirror(d1,d2+d3,Theta);\r\n\r\nassert(abs(d2-od2)\u003c.001)\r\nassert(abs(Phi-oPhi)\u003c.001)\r\n%%\r\nd2=2;\r\nPhi=1.5*pi/4;\r\nd3=2;\r\n\r\nx1=d2-d3*cos(Phi);\r\ny1=d3*sin(Phi);\r\n\r\nTheta=atan(y1/x1);\r\nd1=hypot(x1,y1);\r\n\r\n[od2, oPhi]=solve_mirror(d1,d2+d3,Theta)\r\n\r\nassert(abs(d2-od2)\u003c.001)\r\nassert(abs(Phi-oPhi)\u003c.001)\r\n%%\r\nd2=3;\r\nPhi=.5*pi/4;\r\nd3=1;\r\n\r\nx1=d2-d3*cos(Phi);\r\ny1=d3*sin(Phi);\r\n\r\nTheta=atan(y1/x1);\r\nd1=hypot(x1,y1);\r\n\r\n[od2, oPhi]=solve_mirror(d1,d2+d3,Theta)\r\n\r\nassert(abs(d2-od2)\u003c.001)\r\nassert(abs(Phi-oPhi)\u003c.001)\r\n%%\r\nd2=3+rand;\r\nPhi=(.5+rand/10)*pi/4;\r\nd3=1+rand;\r\n\r\nx1=d2-d3*cos(Phi);\r\ny1=d3*sin(Phi);\r\n\r\nTheta=atan(y1/x1);\r\nd1=hypot(x1,y1);\r\n\r\n[od2, oPhi]=solve_mirror(d1,d2+d3,Theta)\r\n\r\nassert(abs(d2-od2)\u003c.001)\r\nassert(abs(Phi-oPhi)\u003c.001)\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":3097,"edited_by":26769,"edited_at":"2024-11-19T13:38:39.000Z","deleted_by":null,"deleted_at":null,"solvers_count":35,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":26,"created_at":"2013-06-15T23:44:39.000Z","updated_at":"2026-02-19T10:13:32.000Z","published_at":"2013-06-16T00:28:14.000Z","restored_at":null,"restored_by":null,"spam":null,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eDetermine the mirror's distance and relative angle to the LASER Tracker given the distances to a reference SMR (Spherical Mounted Retro-reflector) and the angle to the SMR.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"center\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"288\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"582\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTheta is the included angle between d1 and d2.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePhi is the angle of interest and is between d2 and d3.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Test method is locate the SMR to capture the mirror reflectance. Record L. Rotate the SMR to be directly viewed by the Tracker. Record d1 and Theta.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGiven Theta, d1, and d2+d3 determine d2 and Phi.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [d1, L, Theta] where L=d2+d3 and d1*cos(Theta) \u0026lt; d2\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [d2 Phi]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eExamples:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eInput: [2^.5, 2+2^.5, pi/4]..... Output: [2 pi/4]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eInput: [2.3994, 4, .2991]..... Output: [3, pi/4 ]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.JPEG\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAEgAkYDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA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Qyy8tLKRzJIeWY/U1eoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACql1ptjesHurK3nZRgGWJXI/MVbpD0pMDzX4XaVptxpGrtNp9pIy6xdKpeBSQA/AHHapj4m8Wap4z13w/okGlxRaaYmFzdK5G1lztwp5JPfsBVn4WwTQaPrCzRSRltYumAdSuQX4Iz2pnhOCZPih42leGRY5GtdjspAbEZzg96F09BdH6/qT3mreM7q+vI7G30vSrOz+U3Oqbj9pOOXQKRtQe5NZumfFISeAdR1++ske50+6Nk0drLujuZcqAY2/uksPX8a5pY9LHiXXz480fU9T1H7W39mxG3lmjeDJ2LEF+Ue+f8AGqGjeH9V1P4a+KLS20eW01CHW/tsOntHs4UowRe3QEcU15je56LZaz400/VdNTXdOsriw1BthfTkkLWbkZHmZzlexYYwawpPEln4X+Ifi+7uVaWaRLSO2tY+ZLiUpwij/OK1V8cXviLUNJ0/w3aXcUjSB9SmurN1S2jA+ZCWABYngYrEv/BVv4o+IHi5riCSK7S3tvsF6AQYZAudyH6gZo6iOkvfFer+GfCMOoeILS3l1i8nWG2sLQlRvf7qFiTkju3Sqk3ijxR4auLGfxLHpNzp15Ols76eXVrR3OFLbidy544xXO+IYtW8efDywuLjSJJdX0a/Vr7TmUqZ9mVbb0zuByMU23g8C391p0Xh/wADT3t9LMhlSWGWBbRcjLuzDHB7DOaOodDopPE/izUvHWueHNFi0uOPTlhkFzdq54dc7SFPJJ6HjGK9BiD+UglIMmPmKjAz3xXA+F7eaP4u+NZnhkWJ47TY7KQrYQ5wehr0KhbD6hRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUmASCQMilooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//9k=\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":1276,"title":"PONG 002: Rectangle, Interactive Download, Easier Play","description":"Variation of the Original Classic PONG game brought to Cody.\r\nPONG 002 is a rectangular board (2000,1000) with slower initial velocities and more precise paddle movement.\r\nPONG 2 uses plot and fill versus patches to improve video play.\r\nThe faster square version is \u003chttp://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download PONG 001\u003e\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PONG2_300.jpg\u003e\u003e \r\n\r\n\r\nAttempt to keep the ball alive against a Wall. The ball speeds up on every hit. When it is missed it restarts at a new location. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed.\r\n\r\nPaddle center is provided and paddle covers +/- 50 units.\r\nThe field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\r\n\r\nTo aid in development of your routine, a PONG_Interactive_002a.m file that creates a solver script and video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_002b.m PONG_Interactive_002b.m\u003e. (Right click, 'save link as'). The routine creates a PONG_002_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_002_video_Life1.mp4 PONG Demo Video\u003e MP4 (Rt Click, Open in New Tab)\r\n\r\n*Inputs:* (paddle,ball)  \r\n \r\n   paddle = 500 ; Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n   ball=[500 500 30 20]; % x y vx vy  Positon and Velocity, Treated as a Point\r\n\r\n*Output:* Direction\r\n\r\n   1 for Up, -1 for Down, 0-No move\r\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u003c=1 is allowed\r\n\r\n*Pass Criteria:* 15 hits, a score of 425 or better\r\n\r\n*Scoring:* 100 - 5 * Hits + 100 * Lives,  (500 - 5 * hits  for \u003c 100 hits)\r\n\r\n*Game Theory:* Position Paddle to minimize travel to next location. Vx=1.08*Vx and Vy=1.04*Vy after every return.\r\n\r\n*Near Future:* Multi-Ball Three Wall, Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position\r\n\r\n\r\n","description_html":"\u003cp\u003eVariation of the Original Classic PONG game brought to Cody.\r\nPONG 002 is a rectangular board (2000,1000) with slower initial velocities and more precise paddle movement.\r\nPONG 2 uses plot and fill versus patches to improve video play.\r\nThe faster square version is \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download\"\u003ePONG 001\u003c/a\u003e\u003c/p\u003e\u003cimg src = \"https://sites.google.com/site/razapor/matlab_cody/PONG2_300.jpg\"\u003e\u003cp\u003eAttempt to keep the ball alive against a Wall. The ball speeds up on every hit. When it is missed it restarts at a new location. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed.\u003c/p\u003e\u003cp\u003ePaddle center is provided and paddle covers +/- 50 units.\r\nThe field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/p\u003e\u003cp\u003eTo aid in development of your routine, a PONG_Interactive_002a.m file that creates a solver script and video has been posted at \u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_002b.m\"\u003ePONG_Interactive_002b.m\u003c/a\u003e. (Right click, 'save link as'). The routine creates a PONG_002_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/p\u003e\u003cp\u003e\u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PONG_002_video_Life1.mp4\"\u003ePONG Demo Video\u003c/a\u003e MP4 (Rt Click, Open in New Tab)\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e (paddle,ball)\u003c/p\u003e\u003cpre\u003e   paddle = 500 ; Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n   ball=[500 500 30 20]; % x y vx vy  Positon and Velocity, Treated as a Point\u003c/pre\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction\u003c/p\u003e\u003cpre\u003e   1 for Up, -1 for Down, 0-No move\r\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u0026lt;=1 is allowed\u003c/pre\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e 15 hits, a score of 425 or better\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e 100 - 5 * Hits + 100 * Lives,  (500 - 5 * hits  for \u0026lt; 100 hits)\u003c/p\u003e\u003cp\u003e\u003cb\u003eGame Theory:\u003c/b\u003e Position Paddle to minimize travel to next location. Vx=1.08*Vx and Vy=1.04*Vy after every return.\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Multi-Ball Three Wall, Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position\u003c/p\u003e","function_template":"function pdir = PONG_002_solver(paddle,ball)\r\n  pdir=randi([-1 1]);\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',500);\r\n\r\n pwidth=50; % Total size +/- 50 for 101 Paddle\r\n bwidth=10; % Radius of ball\r\n\r\n vup=10; % Sub-sampling ball movements for Interactive\r\n spfx=1.08; % Speed increase factor\r\n spfy=1.04; % to Avoid fixed Paddle solution\r\n negVmax=-200;\r\n posVmax=210;\r\n mov_step=25; % Paddle Quantized Movement  (1/4 Paddle)\r\n maxLives=4;\r\n maxHits=100; % Return Mission Complete\r\n\r\n% Initial Start\r\n paddle=500; % position y % min max paddle [50 950]\r\n ball=[500 500 30 20]; % x y vx vy  Treated as a Point\r\n\r\nlives=0; % Lives\r\nhits=0;\r\nentry=0;\r\n\r\nwhile lives\u003cmaxLives \u0026\u0026 hits\u003cmaxHits\r\n\r\n [curdir]=PONG_002_solver(paddle,ball); % FUNCTION CALL\r\n\r\n if abs(curdir)\u003e1,curdir=0;end % Max 1 / -1  of scalar allowed\r\n curmov=mov_step*curdir;\r\n\r\n if entry==0 % Initialize movement history vector\r\n  curdirvec=curdir;\r\n  entry=1;\r\n else\r\n  curdirvec=[curdirvec curdir]; % Saving moves for file create\r\n end\r\n\r\n% Paddle Move\r\n paddle=max(pwidth,min(1000-pwidth,paddle+curmov)); % [50 : 950] limits\r\n\r\n% Ball Move\r\n\r\n  for j=1:vup\r\n    % ball=[500 500 1 1]; % x y vx vy  Treated as a Point\r\n\r\n    if ball(1)+ball(3)/vup\u003c=0 % Check if Point is Over\r\n\r\n    % Find x=0 crossing and check if paddle is within\r\n    % [paddle-pwidth-bwidth,paddle+pwidth+bwidth] pwidth=50; \r\n    % set speed scalar\r\n    \r\n      xc=ball(2)-ball(1)*ball(4)/ball(3);\r\n      if xc\u003e=1000\r\n       xc=1000-(xc-1000);\r\n      else\r\n       xc=abs(xc);\r\n      end\r\n      \r\n      paddlemax= paddle+pwidth+bwidth;\r\n      paddlemin= paddle-pwidth-bwidth;\r\n      \r\n      if xc\u003epaddlemax || xc\u003cpaddlemin % Swing and a Miss\r\n       lives=lives+1;\r\n       fprintf('Oops %i\\n',lives);\r\n       \r\n       if lives\u003e=maxLives,break;end\r\n       %paddle=500; % position y % min max paddle [50 950]\r\n\r\n       % Reset Ball Keep deterministic but different\r\n       ball=[500-100*lives 500 30+11*lives 20-3*lives];\r\n\r\n       break;\r\n      end\r\n      \r\n      \r\n      % Ball returned\r\n      hits=hits+1;\r\n      ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n      \r\n      ball(1)=-ball(1);\r\n      ball(3)=-spfx*ball(3);\r\n      \r\n      if ball(2)\u003c0\r\n       ball(2)=-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      elseif ball(2)\u003e1000\r\n       ball(2)=2000-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      else\r\n       ball(4)=spfy*ball(4);\r\n      end\r\n      \r\n      ball(3)=max(negVmax,min(posVmax,ball(3)));\r\n      ball(4)=max(negVmax,min(posVmax,ball(4)));\r\n      \r\n    else % Wall bounces\r\n     ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n     \r\n     if ball(1)\u003e=2000 % To the right\r\n      ball(1)=2000-(ball(1)-2000);\r\n      ball(3)=-ball(3);\r\n      if ball(2)\u003e=1000 % TR\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BR\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     else % Middle\r\n      if ball(2)\u003e=1000 % TM\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BM\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     end\r\n    \r\n     \r\n    end % Ball Pass / New Position\r\n\r\n  end % j vup\r\n\r\n\r\nend % while Alive and Hits \u003c Total Success\r\n\r\n%fprintf('%i ',curdirvec);fprintf('\\n'); % Moves\r\nfprintf('Hits %i\\n',hits)\r\nfprintf('Lives %i\\n',lives)\r\nscore= max(0,maxHits-5*hits+100*lives); % \r\n \r\nfprintf('Score %i\\n',score)\r\n% Passing Score is 15 hits to Score 425 or Less\r\n\r\nassert(score\u003c=425,sprintf('Score %i\\n',score))\r\n\r\n\r\nfeval( @assignin,'caller','score',floor(min( 500,score )) );\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":7,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-02-16T18:19:26.000Z","updated_at":"2026-02-10T12:07:15.000Z","published_at":"2013-02-17T00:16:33.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eVariation of the Original Classic PONG game brought to Cody. PONG 002 is a rectangular board (2000,1000) with slower initial velocities and more precise paddle movement. PONG 2 uses plot and fill versus patches to improve video play. The faster square version is\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG 001\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAttempt to keep the ball alive against a Wall. The ball speeds up on every hit. When it is missed it restarts at a new location. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePaddle center is provided and paddle covers +/- 50 units. The field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PONG_Interactive_002a.m file that creates a solver script and video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_002b.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG_Interactive_002b.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). The routine creates a PONG_002_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_002_video_Life1.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG Demo Video\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e MP4 (Rt Click, Open in New Tab)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e (paddle,ball)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   paddle = 500 ; Paddle Center on the Y-axis, Paddle is +/- 50 from center\\n   ball=[500 500 30 20]; % x y vx vy  Positon and Velocity, Treated as a Point]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Direction\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   1 for Up, -1 for Down, 0-No move\\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u003c=1 is allowed]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e 15 hits, a score of 425 or better\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e 100 - 5 * Hits + 100 * Lives, (500 - 5 * hits for \u0026lt; 100 hits)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eGame Theory:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Position Paddle to minimize travel to next location. Vx=1.08*Vx and Vy=1.04*Vy after every return.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Multi-Ball Three Wall, Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAEsAhcDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDmdS1HX9K1OGy0nTAth9mgdANMSfezIhcmQqSeSxzng1311Fcx6r5Q8GRXkMrMUlhKIsaBnwCcYzgIeTzuOOmK0NNluDoMF1Y6KmoTgqh3yMu1RbqwA57sAPq1bVg895o73F34bFrdqHxamZ23ED5eeOv449TXRqm7GSSaWxh21sUS2Nx4UtYd1y0c8YKS7Ytow4YgY5J+XBzjtWCLTW0ijK+GdMlkwu8BUVQCM8HOc5OCMADaME5yOq0q51G81GGC88HraW7KxedpX4YKpHHuSw6/w/hU2qzXthcMLDwkl/CqIQVnZCWJYEd+mAScHhhT5nuxcrvo0cst7oEUMUOoaa8V2d3mBbdDt54JxkDIx3PWsu71XwvArJLpU8iZ+8saKDz+dd1HpOn6hpk99c+C7aK9/ebLef52fbnaSR/e4+maxfsijaF+F1sJGi3lzJ8m7PT7v41bnZLQh0m76nIya/4R3kLpN2h3dAicU1df8JFT/wAS26LDkkxpXpuo+G9KgiEln4R064fd88ZQgsuD0PY5wOnesjStH02/vxDdfDOzsrcxEmaVc4YHoRjvx+Y98P2rva39feR7C3U4i51fwlLDt/sy9jyfvFE4/Gmw6l4ZjiKLalcDIZlD7uue2R+Nd1qejWNlqDpbfDewvrVQCropU5xnrg9+MY4qhDbW8UsYm+FVrFvlWNWQ4wCQCT8vYbj1xwPqD20r2t/X3g6FtpHKJfeGInIityoZtzBkDEk9cZXioDfeFIIZG+ySMrYByAQOc8ZHHX9a9N1rw3ptvJa/2f4H0u9MkpSQuu3ylxkP9MjHrWKunwusW/4S2YPl5cBhw2eADt9PXHJ/Ev28r7E/V31mcWup+EDhDbyeWWyW2jcOPXGajm1XwhHtEVhdTrjO5XC9+nNeoxeF9Dl0I3p8A6dDemJnWzdQWDYOFJHHPH0rKstJsZNWis7z4YWFvDIxHng7gAOrEYxjp3/wp+3mtLF+wf8AMcFJq/hEOjJp9xnIyFI9OpyMH9c06XVfCM5Dm3lVtmOFA/kK9h/4QvwtuA/4RPTP+/RpB4L8Lf8AQp6Z0z/qjVKvJfZJ+rv+dnkdtqfhQSsfIcFsbiUByAO2RT5NX8IGII1pdY65EcYI5Pcc16yPBnhb/oU9N6/88jR/whnhbaP+KT0zp/zyNDrybvylKhZ3cjyaPVPCEalUhfDKASwX/A4P0rJvtS0VJdunKiR7SQZVVsemBjP64r3A+C/C/wD0Kem/9+jSf8IV4V5/4pLS+n/PGlGvJO7iUqNnfmPDF1HT5EUMkLMowSqLyfp/9enfatOPSJP+/Yr3H/hCvCv/AEKOl/8Afmj/AIQrwr/0KOl/9+ar6xLoiHhU3fmPD/P0/wD54x/9+x/hQLjT9x/cp7fux/hXuH/CFeFf+hS0z/vzR/whXhXn/iktM/780/rM+iJ+qL+Y8P8AtFjz/o4/79j/AAp3n2P/AD7rnP8AcH+Fe3DwV4V5/wCKT0z/AL8mj/hCvC3/AEKemdf+eRo+tT7C+qL+Y8RM9hu/4916f3B/hThPYbv+PaPGe6r/AIV7Z/whfhb/AKFPTen/ADyNKPBfhfd/yKemdf8AnjS+s1OiX9fMHg/7x4n5tjt/49Y/++R/hTg9lt/49U6/3B/hXtX/AAhvhfB/4pPTf+/Ro/4Q3wx/0Kmm9f8AnkaaxUusRfU/7x4qXsv+fWPp/cH+FLvst3/HnH1/uD/Cvaf+EN8Mf9CppvT/AJ5GnDwd4Y3Y/wCEV03rj/VGq+svsL6l/ePFA9p/z6J/3wP8KTfZf8+qZ/3B/hXtf/CH+GSp/wCKV03p08o0n/CG+F/+hU03r/zyNDxL6IPqX948UMlj/wA+qdMkbB/hShrJ32raoSTx8o/wr2r/AIQ3wv8A9CppnT/nkaenhDw3HLmPwtpqsDkERH86X1qd9Yj+p/3jxtdOzyLAYxn7q019NO3AsgrE8Hav+H8+K9uXQtHGSNBtAcc4U/40v9h6R/0ArXr6N/jR9alf4QWEad3I8YSzsEcK+mSFVXkhvm79eefzNPaDSPN40qRvnxyOn4Zr2P8AsPSB/wAwK15Ho3+NO/sLSN//ACArXrjo1JYmS6GypPe/4njEcOlIhP8AY4CqOrheOfc8VJ9r00JxpyAA4GDH/jXsX9g6Qf8AmBWnT0b/ABo/sHR/+gFa9fRv8aHiL7xB0W3rY8dF7poXH9mx8jBx5f8AjUf2uw3nFlEqnsRHx+tey/2Do4X/AJAVryOmG/xpRoOjjgaFa4JHZqTrJ/ZE6Kf/AA54XJr2kwO0UtjEpUZwVX/4mlj17SpGO2wjZ8gYwvX/AL5r2g+DvDDszN4U0wswySYetIPBnhfaf+KT0wDOf9TUqs19kf1eNtzxFra2dzK8EWG5BOOn16UC0si2BDCfbAr3QeGPD46eGtPGRg4jP+e1OHhvQgw/4pywHTkRmtPbq97Gbw8m2+Y8JFnaf8+8R49BR9itv+faL8hXu48O6J/0Ltl0/uGmnwzoByT4bsMnrmM0/rC/lJ+rT/mPCWsbbbkWsZP0qB7JM8WkeMdhXvbeF/Dzr83hnT2HJwYjTT4T8Od/C2m9B1iprEJfZGsNJbyPAzZjcf8ARUxzj5elN+x/9Oq/98Cvf/8AhE/Dm4/8UtpvfnyetIPCfhwZx4W00dP+WNN4lfylfV3/ADI8B+yf9Oo6/wBwf4UGzi7wKOP7g/wr3/8A4RTw5/0LGm9f+eVO/wCEX8Pf9Czp3T/nkazlXi94h7CXdHgH2K13f6lOvQqP8KBaWoX/AFMZ464Fe/8A/CL+H92P+EZ07r/zyoHhfw/z/wAUzp3/AH6NTzw/kX4C+ry/mPAPslt/zwj6+lL9mtx0iQDHoP8ACvfv+EX8Pf8AQs6d1/55Uf8ACL+H/wDoWdO6f88qcakE7qH5B7Ca+0eDQiKNyPs0bAnsgOP0qzJBbXduYJbdY+hLxqBj8cV7j/wi/h/d/wAi1p/Xr5Rpq+FvDycr4Z04HGMiI03XV78pSozTTUjxiW7+yeRKLaydVmUh1iUsAB3Q8N+B9K1rjUb17eD7LpMO8FDK01pFgkMCdoAGBjPBJPSvVU8O6HHynh2xU56iMinHQtH286DanjOMH/GolNOz5TTkduh5DPcaqbeRVtYDK75Je3iwo3KcKMdgDz6GmGW/2MJbaBm8pgpSKNNrEjDEBTnHpx1r2MaFo+//AJAVr164P+NL/Yul/wDQDtuno3+Nc06am7tP8DopVqtOLira/wBdzxPVI726hklurK3Fqg3KRAiYbcoGCBk9TRXo/iDToZNNuhNokOniOYpE6TbhOmUIbH8PJIweciilGmoqw6ledSV3b7i9o5NvoizI0qqYcKsVqZi0vkxbc4U4/MA1t3dzcJe2sEenbdzQGQi3dgQxAYZxgYBPUjGBXzd4g8eeIrLVjHpWsXtjbGCAiGGUquREgJx74rK/4WR40/6GfVP/AAIasa0XJ2TtqKm0lZo+lZdVvz45g0aHRLpbIXREt4bb9y0XkscBsdd+Oc47VY0zU7i91XVLOfR7m3jtoSyzS2xRQ4YjAbGHyCp4JHB9a+Yv+Fk+NP8AoaNU/wDAhqQ/EjxoevifUyP+vhquUr7CsfVU09xbeNINPOmSy6bcxYSZIBsicBmJZ855wBjB5I57EvVvrd7K6gskuLARg3KRrulJJHKjGTwTwD2r5W/4WR40/wChn1T/AMCGo/4WR40/6GfU/wDwIapux2R9YTRXFvrEZe0EmnysIwY4wxRiOrDqBnvnAzVS2j1I+I3hlgiFpvlHkmHhYwBscPgDJOPlyep9Dj5Z/wCFk+NP+hn1T/wIaj/hZHjT/oZ9U/8AAg0+Zisj6G8NXnie4vtUtr+waZrdJhGZrQQoXUjywpwMhssOrfdzn11dM1a5/wCEfvdXvdGvTJHGrx6d9l23AYlhsAA5z8vPpmvmT/hZHjT/AKGfVP8AwIal/wCFkeNP+hn1P/wIalL3mmCVj6p0A397aSz6lo/2adrraLeQgCKLAwQw+/6npySB0rD8R3uq2F/amyS5MDJG3l2+mC4WX94BIGccodpGBgCvnL/hZHjT/oZ9U/8AAhqB8SPGg6eJ9T/8CDT5nccrPY+qPEKyW1lusxLERdhHa3tvPZU2Z4Xa38WOccZrH1a41i3tLE28Fws0mmrK4jsBIDcY5DcfLz24r5vHxH8advE+p/8AgQ1H/CyfGn/Q0ap/4ENQpW3FbW59X36XEenPLY2cctyJUG0x7sKVUngEdzXOeJL7V7OKxe3tL6FpbNpHSz0z7TiYEfK2Qdv0+tfOX/CyPGn/AEM+p/8AgQ1L/wALI8af9DRqn/gQ1JOzuDR9f2VpHJp9s9xboJmiRpAVxhiBnjtzmp/sVt/zwT8q+OP+FkeNP+hn1P8A8CDR/wALI8af9DPqf/gQaLjPsf7Fbf8APBPyo+xW3/PCP8q+OP8AhZHjT/oZ9T/8CDR/wsjxp/0M+p/+BBouB9j/AGK2/wCeCflR9itv+eEf5V8cf8LI8af9DPqf/gQaP+FkeNP+hn1P/wACDRcD7H+xW3/PCP8AKj7Fbf8APBPyr44/4WR40/6GfU//AAINH/CyPGn/AEM+p/8AgQaLgfY/2K2/54R/lR9itv8AnhH+VfHH/CyPGn/Qz6n/AOBBo/4WR40/6GfU/wDwINFwPsf7Fbf88I/yo+xW3/PBPyr44/4WR40/6GfU/wDwINH/AAsjxp/0M+p/+BBouB9j/Yrb/nhH+VH2K2/54J+VfHH/AAsjxp/0M+p/+BBo/wCFkeNP+hn1P/wINFwPsf7Fbf8APBPyo+xW3/PBPyr44/4WR40/6GfU/wDwINH/AAsjxp/0M+p/+BBouB9j/Yrb/nhH+VH2K2/54R/lXxx/wsjxp/0M+p/+BBo/4WR40/6GfU//AAINFwPsf7Fbf88E/Kj7Fbf88E/Kvjj/AIWR40/6GfU//Ag0f8LI8af9DPqf/gQaLgfY/wBitv8Angn5UfYrb/nhH+VfHH/CyPGn/Qz6n/4EGj/hZHjT/oZ9T/8AAg0XA+x/sVt/zwj/ACo+xW3/ADwT8q+OP+FkeNP+hn1P/wACDR/wsjxp/wBDPqf/AIEGi4H2P9itv+eCflR9itv+eEf5V8cf8LI8af8AQz6n/wCBBo/4WR40/wChn1P/AMCDRcD7H+xW3/PBPyo+xW3/ADwT8q+OP+FkeNP+hn1P/wACDR/wsjxp/wBDPqf/AIEGi4H2P9itv+eEf5UfYrb/AJ4R/lXxx/wsjxp/0M+p/wDgQaP+FkeNP+hn1P8A8CDRcD7H+xW3/PBPyo+xW3/PBPyr44/4WR40/wChn1P/AMCDR/wsjxp/0M+p/wDgQaLgfY/2K2/54J+VH2K2/wCeEf5V8cf8LI8af9DPqf8A4EGj/hZHjT/oZ9T/APAg0XA+x/sVt/zwj/Kj7Fbf88E/Kvjj/hZHjT/oZ9T/APAg0f8ACyPGn/Qz6n/4EGi4H2P9itv+eEf5UfYrb/ngn5V8cf8ACyPGn/Qz6n/4EGj/AIWR40/6GfU//Ag0XA+x/sVt/wA8E/Kj7Fbf88E/Kvjj/hZHjT/oZ9T/APAg0f8ACyPGn/Qz6n/4EGi4H2P9itv+eCflR9itv+eEf5V8cf8ACyPGn/Qz6n/4EGj/AIWR40/6GfU//Ag0XA+x/sVt/wA8I/yo+xW3/PBPyr44/wCFkeNP+hn1P/wINH/CyPGn/Qz6n/4EGi4H2P8AYrb/AJ4J+VH2K2/54J+VfHH/AAsjxp/0M+p/+BBo/wCFkeNP+hn1P/wINFwPsf7Fbf8APCP8qPsVt/zwj/Kvjj/hZHjT/oZ9T/8AAg0f8LI8af8AQz6n/wCBBouB9j/Yrb/ngn5UfYrb/ngn5V8cf8LI8af9DPqf/gQaP+FkeNP+hn1P/wACDRcD6h8b28UWjqY41Qk4yPqtFeEeBfFWv6/qGo2+r6td3sMdkZES4lLAN5sYzj6E/nRWkL2MJ7nFeLbe4tteaK5/1vkQk/QxqR+hFYVdR8QJfO8Us5xza23T/rilcvUS0bRtHYSiiipGFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHd/C3/kL6r/ANg8/wDo6Kij4Xf8hfVf+wef/R0VFbw+ExnuZ3xBhWDxWyL0+y2xHHrChrla7H4mjHjNuMf6FanH/bBK46spO7bNI7IKKKKkoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAO7+F3/ACF9V/7B5/8AR0VFL8LP+Qvq3T/kHnqf+m0VFbw2MZ7kHxT/AOR2b/rxtP8A0QlcVXbfFb/keG/68bP/ANJ0riaxe5qgooopDCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDvvhWu7WNWGcf8S8n/AMjRUU74T/8AIa1b/sHHv/03horWLdjOW5mfEdmfxc5Zix+y2wyT/wBMUrkq6v4i/wDI3P8A9ett/wCiUrlKiXxMqHwoKKKKkoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAO4+GZI1XVMEj/AEHsf+m0VFJ8NP8AkK6p/wBeH/taKiuuklyoyla5T+In/I3P/wBett/6JSuUrq/iL/yNz/8AXrbf+iUrlK5p/Ey4fCgoooqSgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA7f4af8hXVP+vD/ANrRUUfDT/kK6p/14f8AtaKiuun8KM5blP4if8jc/wD1623/AKJSuU7V1fxE/wCRuf8A69bb/wBEpXKdq5p/EyofCgoooqSgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA7f4Z/8AIV1P/rx/9rRUUfDP/kK6p/14/wDtaKiuul8KMpblP4if8jc//Xrbf+iUrlK6v4i/8jc//Xrbf+iUrlO9c0/iZcPhQUUUVJQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAdv8ADXH9q6pnH/Hj3OP+W0VFN+G6B9U1LIziyJHt+9jH9aK66d+VGUtyr8RP+Ruf/r1tv/RKVyneur+Iv/I3P/1623/olK5SuafxMuHwoKKKKkoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAO3+Gf/IV1P8A68f/AGtFRSfDP/kK6p/14f8AtaKiuun8KM5blT4if8jc/wD1623/AKJSuU7V1fxE/wCRuf8A69bb/wBEpXKdq5p/EyofCgoooqSgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA7f4af8AIV1P/rx9f+m0dFHwz/5Cuqf9eH/taKiuun8KM5blP4i/8jc//Xrbf+iUrlK6v4if8jc//Xrb/wDolK5TvXNP4mVD4UFFFFSUFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHb/AAz/AOQrqf8A14/+1oqKPhp/yFdU/wCvD1/6bRUV1078qMpblP4i/wDI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\"}]}"},{"id":1279,"title":"PONG 003: 3-Ball Rectangle, Interactive Download","description":"Variation of the Original Classic PONG game brought to Cody.\r\nPONG 003 is a rectangular board (2000,1000) with reasonable velocities and precision paddle movement. Three Times the Fun with 3-Balls.\r\n\r\nOther Cody PONG Games:  \u003chttp://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download PONG 001\u003e and \u003chttp://www.mathworks.com/matlabcentral/cody/problems/1276-pong-002-rectangle-interactive-download-easier-play PONG 002\u003e\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PONG3_300.jpg\u003e\u003e \r\n\r\n\r\nAttempt to keep the balls alive against a Wall. The balls speeds up on every hit. When all have been missed the next round restarts the balls at new locations. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed. The Balls do not interact with each other.\r\n\r\nPaddle center is provided and paddle covers +/- 50 units.\r\nThe field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\r\n\r\nTo aid in development of your routine, a PONG_Interactive_003c.m file that creates a solver script and video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_003c.m PONG_Interactive_003c.m\u003e. (Right click, 'save link as'). The routine creates a PONG_003_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_003_video_89.mp4 3-Ball PONG Demo Video\u003e MP4 (Rt Click, Open in New Tab)\r\n\r\n*Inputs:* (paddle,ball)  \r\n \r\n     paddle = 500 ; %Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n     balls=[500 500 32 20;500 550 30 18;500 450 28 22;450 550 33 20;450 450 29 21];\r\n     % x y vx vy  Position and Velocity, 1 - Row per ball\r\n     %Passed Balls are [-50 -50 -50 -50]\r\n\r\n*Output:* Direction\r\n\r\n   1 for Up, -1 for Down, 0-No move\r\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u003c=1 is allowed\r\n\r\n*Pass Criteria:* Score of 925 or better\r\n\r\n*Scoring:* 600 - Hits + 100 * Lives; Hit=(ActiveBalls)^2\r\n\r\n*Game Theory:* Position Paddle to minimize travel to next ball while taking into account multiple ball score bonus. Vx=1.08*Vx and Vy=1.04*Vy after every return.\r\n\r\n*Near Future:* Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position, Multi-Ball with Ball-Ball Collision\r\n","description_html":"\u003cp\u003eVariation of the Original Classic PONG game brought to Cody.\r\nPONG 003 is a rectangular board (2000,1000) with reasonable velocities and precision paddle movement. Three Times the Fun with 3-Balls.\u003c/p\u003e\u003cp\u003eOther Cody PONG Games:  \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download\"\u003ePONG 001\u003c/a\u003e and \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/1276-pong-002-rectangle-interactive-download-easier-play\"\u003ePONG 002\u003c/a\u003e\u003c/p\u003e\u003cimg src = \"https://sites.google.com/site/razapor/matlab_cody/PONG3_300.jpg\"\u003e\u003cp\u003eAttempt to keep the balls alive against a Wall. The balls speeds up on every hit. When all have been missed the next round restarts the balls at new locations. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed. The Balls do not interact with each other.\u003c/p\u003e\u003cp\u003ePaddle center is provided and paddle covers +/- 50 units.\r\nThe field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/p\u003e\u003cp\u003eTo aid in development of your routine, a PONG_Interactive_003c.m file that creates a solver script and video has been posted at \u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_003c.m\"\u003ePONG_Interactive_003c.m\u003c/a\u003e. (Right click, 'save link as'). The routine creates a PONG_003_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/p\u003e\u003cp\u003e\u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PONG_003_video_89.mp4\"\u003e3-Ball PONG Demo Video\u003c/a\u003e MP4 (Rt Click, Open in New Tab)\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e (paddle,ball)\u003c/p\u003e\u003cpre\u003e     paddle = 500 ; %Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n     balls=[500 500 32 20;500 550 30 18;500 450 28 22;450 550 33 20;450 450 29 21];\r\n     % x y vx vy  Position and Velocity, 1 - Row per ball\r\n     %Passed Balls are [-50 -50 -50 -50]\u003c/pre\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction\u003c/p\u003e\u003cpre\u003e   1 for Up, -1 for Down, 0-No move\r\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u0026lt;=1 is allowed\u003c/pre\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e Score of 925 or better\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e 600 - Hits + 100 * Lives; Hit=(ActiveBalls)^2\u003c/p\u003e\u003cp\u003e\u003cb\u003eGame Theory:\u003c/b\u003e Position Paddle to minimize travel to next ball while taking into account multiple ball score bonus. Vx=1.08*Vx and Vy=1.04*Vy after every return.\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position, Multi-Ball with Ball-Ball Collision\u003c/p\u003e","function_template":"function pdir = PONG_003_solver(paddle,balls)\r\n  pdir=randi([-1 1]);\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',1000);\r\n\r\n pwidth=50; % Total size +/- 50 for 101 Paddle\r\n bwidth=10; % Radius of ball\r\n\r\n vup=10; % Sub-sampling ball movements for Interactive\r\n spfx=1.08; % Speed increase factor\r\n spfy=1.04; % to Avoid fixed Paddle solution\r\n negVmax=-200;\r\n posVmax=210;\r\n mov_step=25; % Paddle Quantized Movement  (1/4 Paddle)\r\n maxLives=4;\r\n maxHits=600; % Return Mission Complete\r\n qballs=3; % quantity of balls 1 to 5\r\n\r\n% Initial Start\r\n paddle=500; % position y % min max paddle [50 950]\r\n balls=[500 500 32 20;500 550 30 18;500 450 28 22;450 550 33 20;450 450 29 21]; % x y vx vy  Treated as a Point\r\n  balls=balls(1:qballs,:);\r\n\r\nlives=0; % Lives\r\nhits=0;\r\nentry=0;\r\nactive=ones(1,size(balls,1));\r\n\r\nwhile lives\u003cmaxLives \u0026\u0026 hits\u003cmaxHits+100*lives % Allow 0 Score\r\n\r\n [curdir]=PONG_003_solver(paddle,balls); % FUNCTION CALL\r\n\r\n if abs(curdir)\u003e1,curdir=0;end % Max 1 / -1  of scalar allowed\r\n curmov=mov_step*curdir;\r\n\r\n if entry==0 % Initialize movement history vector\r\n  curdirvec=curdir;\r\n  entry=1;\r\n else\r\n  curdirvec=[curdirvec curdir]; % Saving moves for file create\r\n end\r\n\r\n% Paddle Move\r\n paddle=max(pwidth,min(1000-pwidth,paddle+curmov)); % [50 : 950] limits\r\n\r\n% Ball Move\r\n\r\n  for j=1:vup\r\n   for nballs=1:size(balls,1)\r\n    if active(nballs)==0,continue;end\r\n    ball=balls(nballs,:);\r\n    % ball=[500 500 1 1]; % x y vx vy  Treated as a Point\r\n\r\n    if ball(1)+ball(3)/vup\u003c=0 % Check if Point is Over\r\n\r\n    % Find x=0 crossing and check if paddle is within\r\n    % [paddle-pwidth-bwidth,paddle+pwidth+bwidth] pwidth=50; \r\n    % set speed scalar\r\n    \r\n      xc=ball(2)-ball(1)*ball(4)/ball(3);\r\n      if xc\u003e=1000\r\n       xc=1000-(xc-1000);\r\n      else\r\n       xc=abs(xc);\r\n      end\r\n      \r\n      paddlemax= paddle+pwidth+bwidth;\r\n      paddlemin= paddle-pwidth-bwidth;\r\n      \r\n      if xc\u003epaddlemax || xc\u003cpaddlemin % Swing and a Miss\r\n       active(nballs)=0;\r\n       balls(nballs,:)=-50; % Place off screen/ Id as Passed\r\n       if sum(active)==0,lives=lives+1;end % All 3 Balls Lost\r\n       fprintf('Oops Life %i  Ball %i\\n',lives,nballs);\r\n       \r\n       if lives\u003e=maxLives,break;end\r\n\r\n        if sum(active)==0\r\n        %balls=[500 500 32 20;500 550 30 18;500 450 28 22]; % x y vx vy  \r\n         balls=[500-100*lives 500 32+12*lives 20-3*lives; ...\r\n                500-100*lives 550 30+11*lives 18-3*lives; ...\r\n                500-100*lives 450 28+10*lives 22-3*lives; ...\r\n                450-100*lives 550 33+11*lives 17-3*lives; ...\r\n                450-100*lives 450 29+10*lives 23-3*lives]; % x y vx vy\r\n         balls=balls(1:qballs,:);\r\n         active=ones(1,size(balls,1));\r\n         break;\r\n        end\r\n\r\n       continue; % Ball Not returned, next ball\r\n      end\r\n      \r\n      \r\n      % Ball returned\r\n      hits=hits+sum(active)^2; % Multi-Ball Bonus\r\n      ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n      \r\n      ball(1)=-ball(1);\r\n      ball(3)=-spfx*ball(3);\r\n      \r\n      if ball(2)\u003c0\r\n       ball(2)=-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      elseif ball(2)\u003e1000\r\n       ball(2)=2000-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      else\r\n       ball(4)=spfy*ball(4);\r\n      end\r\n      \r\n      ball(3)=max(negVmax,min(posVmax,ball(3)));\r\n      ball(4)=max(negVmax,min(posVmax,ball(4)));\r\n\r\n\r\n      balls(nballs,:)=ball;      \r\n    else % Wall bounces\r\n     ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n     \r\n     if ball(1)\u003e=2000 % To the right\r\n      ball(1)=2000-(ball(1)-2000);\r\n      ball(3)=-ball(3);\r\n      if ball(2)\u003e=1000 % TR\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BR\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     else % Middle\r\n      if ball(2)\u003e=1000 % TM\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BM\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     end\r\n    \r\n     balls(nballs,:)=ball;\r\n    end % Ball Pass / New Position\r\n\r\n   end % nballs\r\n\r\n  end % j vup\r\n\r\nend % while Alive and Hits \u003c Total Success\r\n\r\n%fprintf('%i ',curdirvec);fprintf('\\n'); % Moves\r\nfprintf('Hits %i\\n',hits)\r\nfprintf('Lives %i\\n',lives)\r\nscore= max(0,maxHits-hits+100*lives); % \r\n \r\nfprintf('Score %i\\n',score)\r\n% Passing Score is 75 hit points to Score 925 or Less\r\n\r\nassert(score\u003c=925,sprintf('Score %i\\n',score))\r\n\r\n\r\nfeval( @assignin,'caller','score',floor(min( 1000,score )) );\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":6,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-02-17T23:20:24.000Z","updated_at":"2026-02-10T12:14:41.000Z","published_at":"2013-02-18T01:44:44.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eVariation of the Original Classic PONG game brought to Cody. PONG 003 is a rectangular board (2000,1000) with reasonable velocities and precision paddle movement. Three Times the Fun with 3-Balls.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eOther Cody PONG Games: \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG 001\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/1276-pong-002-rectangle-interactive-download-easier-play\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG 002\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAttempt to keep the balls alive against a Wall. The balls speeds up on every hit. When all have been missed the next round restarts the balls at new locations. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed. The Balls do not interact with each other.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePaddle center is provided and paddle covers +/- 50 units. The field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PONG_Interactive_003c.m file that creates a solver script and video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_003c.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG_Interactive_003c.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). The routine creates a PONG_003_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_003_video_89.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e3-Ball PONG Demo Video\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e MP4 (Rt Click, Open in New Tab)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e (paddle,ball)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[     paddle = 500 ; %Paddle Center on the Y-axis, Paddle is +/- 50 from center\\n     balls=[500 500 32 20;500 550 30 18;500 450 28 22;450 550 33 20;450 450 29 21];\\n     % x y vx vy  Position and Velocity, 1 - Row per ball\\n     %Passed Balls are [-50 -50 -50 -50]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Direction\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   1 for Up, -1 for Down, 0-No move\\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u003c=1 is allowed]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Score of 925 or better\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e 600 - Hits + 100 * Lives; Hit=(ActiveBalls)^2\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eGame Theory:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Position Paddle to minimize travel to next ball while taking into account multiple ball score bonus. Vx=1.08*Vx and Vy=1.04*Vy after every return.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position, Multi-Ball with Ball-Ball Collision\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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gqcWGt4/56wfykorqpv3Tnn8RwvjtdviMD/p3i/9BFczXV/ENdnigD/p1hP/AI4K5SsKnxM2h8KCiiioKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD2H4JjOn65/wBdYP5SUU/4ILnTtd/662/8pKK3g9DGe5xnxMXZ4tA/6c7c/wDkMVx1dr8Uxt8ZKP8Apxtf/RS1xVZS3ZrHYKKKKkYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAe0fAxc6br3/Xa3/lJRT/AIEjOma//wBdrb/0GWitFsZy3PN/Gssk2v75ZGdvIjGWOTgDAH5VzldB4x/5Dv8A2xT+Vc/RV+Njp/AgooorMsKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPXfgxI6WGtBHZcywZwfZ6Kb8Gv+PHWf8ArpD/ACeiumn8JzVH7xwnjL/kO/8AbFP5Vz9dx4w0eNrFtY81vMEqW/l44xs3ZzXD1hOalOVu5WHqRnD3emgUUUVJuFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB0uleH4LmxWed23PyoU9BWHfWps7ySDdu2HGatWWt3dlbmGMqU/h3DO2qE0rzytJI252OSawpxqqbcnoetjK2CnhacKELTW7I6KKK3PJCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPW/g3/wAeOs/9dYf5PRR8G/8Ajx1n/rrD/J6K6qfwnNU+IzvGH/Ioyf8AX6n/AKKrzWvS/GH/ACKMn/X6n/oqvNK4YfHP/EzLAfw36sKKKK0O4KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPW/g1/x46z/wBdIf5PRSfBv/jx1n/rrD/J6K6qfwnNU+IyfGV7bDw+9kZl+0m5jk8rvt8rGfzrzuuk8b/8jB/2wj/lXN1zSgoTlbq2PC01Cnp11CiiikdAUUUUAFFamg+H9T8S6mun6VbNPcMCxGQAqjqSTwBVrxN4P1rwjdRQava+V5oJikVgyPjrgj09PesnXpKp7JyXN26js7XMGiiitRBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB618G/wDjx1n/AK6w/wAnoo+Df/HjrP8A11h/k9FdVP4TmqfEcT44/wCRh/7YR/yrm66Xxz/yMP8A2wj/APQa5qsavxs1o/w4+gUUUVmaBRRRQB2/wx8a2/grxBLcXkDy2lzF5UhjALpyCCAevTkf4VqfFf4h2HjNrG00uGQWtqWczSqAzsQBgDsBj8fwrzSiuGWXYeWKWLa99aFc75eUKKKK7iQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA9a+Df/HjrP8A11h/k9FHwb/48dZ/66w/yeiuqn8JzVPiOK8c/wDIwj/r3j/9Brmq6bx1/wAjF/27x/8AoNczWNb42aUf4cfQKKKKzNQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii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\"}]}"},{"id":1000,"title":"Image Processing 004: Zernike Coefficients","description":"*Fit Zernike Terms to a wavefront.*\r\n\r\nThe class notes of \u003chttp://www.visualopticslab.com/OPTI535/Lectures/Class06_08.pdf Schwiegerling UofA\u003e on ANSI Standard Zernike terms is the basis for this challenge.  Pages 13 and 14 give the term definitions implemented in the zern_data_v01.m routine provided in the function template.\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/_/rsrc/1350774824076/matlab_cody/Zernike_UA_480.jpg\u003e\u003e\r\n\r\n\r\nANSI Standard Zernike Chart:\r\n\r\n\r\n\r\n*Algorithm Description:*\r\n\r\n  M=surface array to be fit by Zernike terms; \r\n  -valid data is circle of normalized radius\u003c=1\r\n  Use the R and T arrays to create the A array\r\n  R=radial normalized distance from center of array\r\n  T=angular radian value from center of array\r\n  A=fitting array [valid_data_pts,terms]\r\n\r\n  Create A * z_fit = M(valid_data_pts)\r\n  [valid_pts,terms] * [terms,1] = [valid_pts,1]\r\n\r\n  Loop term=0:terms-1\r\n  - Create the 2-D array of z-terms uisng z=zern_data_v01(term,R,T)\r\n  - A(:,term+1) = z(valid_data_pts)\r\n  End Loop\r\n  \r\n  Solve for z_fit: pinv(A)*M(valid_pts)  or A\\M(valid_pts)\r\n\r\n*Inputs:* [M N R T] where N is number of Zernike terms for fit\r\n\r\n*Outputs:* [v] Zernike fit vector of length N\r\n\r\nCreation of the M surface and expected v fit vector can be seen in the Test Suite.\r\n\r\n\r\n\r\n\r\n\r\n","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.4333px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 888.85px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 444.433px; transform-origin: 407px 444.433px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 109.15px 7.91667px; transform-origin: 109.15px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eFit Zernike Terms to a wavefront.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 56.7833px 7.91667px; transform-origin: 56.7833px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe class notes of\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 1.95px 7.91667px; transform-origin: 1.95px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"http://www.visualopticslab.com/OPTI535/Lectures/Class06_08.pdf\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSchwiegerling UofA\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 253.6px 7.91667px; transform-origin: 253.6px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e on ANSI Standard Zernike terms is the basis for this challenge. Pages 13 and 14 give the term definitions implemented in the zern_data_v01.m routine provided in the function template.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 319.917px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 159.967px; text-align: center; transform-origin: 384px 159.967px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline\" src=\"data:image/JPEG;base64,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\" data-image-state=\"image-loaded\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 92.9667px 7.91667px; transform-origin: 92.9667px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eANSI Standard Zernike Chart:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 75.8333px 7.91667px; transform-origin: 75.8333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eAlgorithm Description:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 326.933px; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-end-end-radius: 4px; border-end-start-radius: 4px; border-start-end-radius: 4px; border-start-start-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; margin-block-end: 10px; margin-block-start: 10px; margin-bottom: 10px; margin-inline-end: 3px; margin-inline-start: 3px; margin-left: 3px; margin-right: 3px; margin-top: 10px; perspective-origin: 404px 163.467px; transform-origin: 404px 163.467px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 169.4px 7.91667px; transform-origin: 169.4px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 61.6px 7.91667px; transform-origin: 61.6px 7.91667px; \"\u003eM=surface array \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 100.1px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 100.1px 7.91667px; \"\u003eto be fit by Zernike terms\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 7.91667px; transform-origin: 7.7px 7.91667px; \"\u003e; \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 173.25px 7.91667px; transform-origin: 173.25px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 46.2px 7.91667px; transform-origin: 46.2px 7.91667px; \"\u003e-valid data \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 127.05px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 127.05px 7.91667px; \"\u003eis circle of normalized radius\u0026lt;=1\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 169.4px 7.91667px; transform-origin: 169.4px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 15.4px 7.91667px; transform-origin: 15.4px 7.91667px; \"\u003eUse \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 154px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 154px 7.91667px; \"\u003ethe R and T arrays to create the A array\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 188.65px 7.91667px; transform-origin: 188.65px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 77px 7.91667px; transform-origin: 77px 7.91667px; \"\u003eR=radial normalized \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 111.65px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 111.65px 7.91667px; \"\u003edistance from center of array\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 165.55px 7.91667px; transform-origin: 165.55px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 65.45px 7.91667px; transform-origin: 65.45px 7.91667px; \"\u003eT=angular radian \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 100.1px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 100.1px 7.91667px; \"\u003evalue from center of array\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 146.3px 7.91667px; transform-origin: 146.3px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 61.6px 7.91667px; transform-origin: 61.6px 7.91667px; \"\u003eA=fitting array \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 84.7px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 84.7px 7.91667px; \"\u003e[valid_data_pts,terms]\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 7.91667px; transform-origin: 0px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 138.6px 7.91667px; transform-origin: 138.6px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 26.95px 7.91667px; transform-origin: 26.95px 7.91667px; \"\u003eCreate \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 111.65px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 111.65px 7.91667px; \"\u003eA * z_fit = M(valid_data_pts)\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 173.25px 7.91667px; transform-origin: 173.25px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e[valid_pts,terms] * [terms,1] = [valid_pts,1]\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 7.91667px; transform-origin: 0px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 73.15px 7.91667px; transform-origin: 73.15px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 19.25px 7.91667px; transform-origin: 19.25px 7.91667px; \"\u003eLoop \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 53.9px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 53.9px 7.91667px; \"\u003eterm=0:terms-1\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 250.25px 7.91667px; transform-origin: 250.25px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 50.05px 7.91667px; transform-origin: 50.05px 7.91667px; \"\u003e- Create the \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 200.2px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 200.2px 7.91667px; \"\u003e2-D array of z-terms uisng z=zern_data_v01(term,R,T)\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 127.05px 7.91667px; transform-origin: 127.05px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e- A(:,term+1) = z(valid_data_pts)\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 30.8px 7.91667px; transform-origin: 30.8px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 15.4px 7.91667px; transform-origin: 15.4px 7.91667px; \"\u003eEnd \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 15.4px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 15.4px 7.91667px; \"\u003eLoop\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 7.91667px; transform-origin: 0px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 215.6px 7.91667px; transform-origin: 215.6px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 23.1px 7.91667px; transform-origin: 23.1px 7.91667px; \"\u003eSolve \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 119.35px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 119.35px 7.91667px; \"\u003efor z_fit: pinv(A)*M(valid_pts)\u003c/span\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; perspective-origin: 7.7px 7.91667px; transform-origin: 7.7px 7.91667px; \"\u003e  \u003c/span\u003e\u003cspan style=\"border-block-end-color: rgb(170, 4, 249); border-block-start-color: rgb(170, 4, 249); border-bottom-color: rgb(170, 4, 249); border-inline-end-color: rgb(170, 4, 249); border-inline-start-color: rgb(170, 4, 249); border-left-color: rgb(170, 4, 249); border-right-color: rgb(170, 4, 249); border-top-color: rgb(170, 4, 249); caret-color: rgb(170, 4, 249); color: rgb(170, 4, 249); column-rule-color: rgb(170, 4, 249); margin-inline-end: 0px; margin-right: 0px; outline-color: rgb(170, 4, 249); perspective-origin: 65.45px 7.91667px; text-decoration: none; text-decoration-color: rgb(170, 4, 249); text-emphasis-color: rgb(170, 4, 249); transform-origin: 65.45px 7.91667px; \"\u003eor A\\M(valid_pts)\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 10px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 23.3333px 7.91667px; transform-origin: 23.3333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eInputs:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 162.55px 7.91667px; transform-origin: 162.55px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e [M N R T] where N is number of Zernike terms for fit\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 29.1667px 7.91667px; transform-origin: 29.1667px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eOutputs:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 98.7833px 7.91667px; transform-origin: 98.7833px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e [v] Zernike fit vector of length N\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 250.083px 7.91667px; transform-origin: 250.083px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eCreation of the M surface and expected v fit vector can be seen in the Test Suite.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function v = Zernike_Fit(M,N,R,T)\r\n% M surface array\r\n% N Number of Zernike terms for fit  0:N-1\r\n% R Radial distance from center of M array for each M location\r\n% T angle from center of M array to each M location\r\n  v=zeros(N,1);\r\nend\r\n\r\n% The function zern_data_v01 has been loaded and rehashed\r\n% z = zern_data_v01(j,r,t) % is sufficient in the main routine\r\n\r\n%% zern_data_v01.m\r\n% Author: Team\r\n% function to create a zernike polynomial\r\n% Using ANSI standard zernikes\r\n\r\n% input\r\n%  j = term #\r\n%  r = normalized radial vector\r\n%  t = theta\r\n\r\nfunction z = zern_data_v01(j,r,t)\r\n\r\n    % Convert single index term to standard\r\n    n= ceil((sqrt(9+8*j)-1)/2)-1; % 0-0; 2-1; 5-2; 9-3; ...\r\n    m= 2*j-n*(n+2);\r\n    \r\n    % zernike term\r\n   \r\n    z = r*0; %zeros(size(r));\r\n        \r\n        % radial component\r\n    for s = 0:(n-abs(m))/2\r\n     z = z + (-1)^s * factorial(n-s) * r.^(n-2*s) ./ ...\r\n        (factorial(s) * factorial((n+abs(m))/2 - s) * factorial((n-abs(m))/2 - s));\r\n    end\r\n        \r\n        % angular component\r\n    z = z .* ((m\u003e=0)*cos(m*t) - (m\u003c0)*sin(m*t));\r\n    \r\n    % normalization\r\n    z = z * sqrt(2*(n+1)/(1+(m==0)));\r\n    \r\n    % value added processing\r\n    z = z .* (r\u003c=1);\r\n    \r\nend\r\n\r\n","test_suite":"fname='https://sites.google.com/site/razapor/matlab_cody/zern_data_v01.m?attredirects=0\u0026d=1';\r\nurlwrite(fname,'zern_data_v01.m')\r\n%urlwrite('http://tinyurl.com/matlab-zernike','zern_data_v01.m')\r\nrehash path\r\n% z = zern_data_v01(j,r,t) % is sufficient in the main routine\r\n%%\r\nM=zeros(256);\r\nterms=6; % Number of Terms to fit  0:terms-1\r\n% Test Suite portion using zern_data_v01\r\n[ ydim xdim ] = size(M);\r\nx = linspace(-1,1,xdim);\r\ny = linspace(1,-1,ydim);\r\n[X Y] = meshgrid(x,y);\r\nR = sqrt(X.^2 + Y.^2);\r\nT = atan2(Y,X);\r\n% Create surface\r\nz_fit=zeros(terms,1); % Map 0:9 to 1:10\r\nz_fit(2)=1.0;\r\n\r\n% Build a Surface\r\nM = M +  zern_data_v01(0,R,T); % Force NaN for non-data\r\nM(M==0)=NaN;\r\nM(M\u003e0)=0;\r\nfor term = 0:terms-1\r\n M = M + z_fit(term+1) * zern_data_v01(term,R,T);\r\n% figure(3);imagesc(data_fit) % Visualization\r\n% pause (0.5)\r\nend\r\n\r\n% Data is a circle\r\n% Non-data is assigned NaN\r\n\r\ntic\r\nv = Zernike_Fit(M,terms,R,T)\r\ntoc\r\nassert(max(abs(v-z_fit))\u003c0.01,sprintf('v=%i %i %i %i %i %i',v))\r\n\r\n\r\n%%\r\nM=zeros(256);\r\nterms=10; % Number of Terms to fit  0:terms-1\r\n% Test Suite portion using zern_data_v01\r\n[ ydim xdim ] = size(M);\r\nx = linspace(-1,1,xdim);\r\ny = linspace(1,-1,ydim);\r\n[X Y] = meshgrid(x,y);\r\nR = sqrt(X.^2 + Y.^2);\r\nT = atan2(Y,X);\r\n\r\n% Create surface\r\nz_fit= round(2*rand(terms,1)-1).*rand(terms,1);\r\n\r\n% Build a Surface\r\nM = M +  zern_data_v01(0,R,T); % Force NaN for non-data\r\nM(M==0)=NaN;\r\nM(M\u003e0)=0;\r\nfor term = 0:terms-1\r\n M = M + z_fit(term+1) * zern_data_v01(term,R,T);\r\n% figure(3);imagesc(data_fit) % Visualization\r\n% pause (0.5)\r\nend\r\n\r\ntic\r\nv = Zernike_Fit(M,terms,R,T)\r\ntoc\r\nassert(max(abs(v-z_fit))\u003c0.01)\r\n\r\n\r\n%%\r\nM=zeros(128);\r\nterms=15; % Number of Terms to fit  0:terms-1\r\n% Test Suite portion using zern_data_v01\r\n[ ydim xdim ] = size(M);\r\nx = linspace(-1,1,xdim);\r\ny = linspace(1,-1,ydim);\r\n[X Y] = meshgrid(x,y);\r\nR = sqrt(X.^2 + Y.^2);\r\nT = atan2(Y,X);\r\n\r\n% Create surface\r\nz_fit= round(2*rand(terms,1)-1).*rand(terms,1);\r\n\r\n% Build a Surface\r\nM = M +  zern_data_v01(0,R,T); % Force NaN for non-data\r\nM(M==0)=NaN;\r\nM(M\u003e0)=0;\r\nfor term = 0:terms-1\r\n M = M + z_fit(term+1) * zern_data_v01(term,R,T);\r\n% figure(3);imagesc(data_fit) % Visualization\r\n% pause (0.5)\r\nend\r\n\r\ntic\r\nv = Zernike_Fit(M,terms,R,T)\r\ntoc\r\nassert(max(abs(v-z_fit))\u003c0.01)\r\n\r\n\r\n\r\n\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":4,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":3,"test_suite_updated_at":"2020-09-29T23:07:58.000Z","rescore_all_solutions":true,"group_id":1,"created_at":"2012-10-18T13:25:52.000Z","updated_at":"2020-09-29T23:08:49.000Z","published_at":"2012-10-21T01:08:43.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eFit Zernike Terms to a wavefront.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe class notes of\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.visualopticslab.com/OPTI535/Lectures/Class06_08.pdf\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSchwiegerling UofA\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e on ANSI Standard Zernike terms is the basis for this challenge. Pages 13 and 14 give the term definitions implemented in the zern_data_v01.m routine provided in the function template.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"center\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eANSI Standard Zernike Chart:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eAlgorithm Description:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[M=surface array to be fit by Zernike terms; \\n-valid data is circle of normalized radius\u003c=1\\nUse the R and T arrays to create the A array\\nR=radial normalized distance from center of array\\nT=angular radian value from center of array\\nA=fitting array [valid_data_pts,terms]\\n\\nCreate A * z_fit = M(valid_data_pts)\\n[valid_pts,terms] * [terms,1] = [valid_pts,1]\\n\\nLoop term=0:terms-1\\n- Create the 2-D array of z-terms uisng z=zern_data_v01(term,R,T)\\n- A(:,term+1) = z(valid_data_pts)\\nEnd Loop\\n\\nSolve for z_fit: pinv(A)*M(valid_pts)  or A\\\\M(valid_pts)]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [M N R T] where N is number of Zernike terms for fit\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [v] Zernike fit vector of length N\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eCreation of the M surface and expected v fit vector can be seen in the Test Suite.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.JPEG\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"}],"term":"tag:\"optics\"","current_player_id":null,"fields":[{"name":"page","type":"integer","callback":null,"default":1,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"per_page","type":"integer","callback":null,"default":50,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"sort","type":"string","callback":null,"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"body","type":"text","callback":null,"default":"*:*","directive":null,"facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":false},{"name":"group","type":"string","callback":null,"default":null,"directive":"group","facet":true,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"difficulty_rating_bin","type":"string","callback":null,"default":null,"directive":"difficulty_rating_bin","facet":true,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"id","type":"integer","callback":null,"default":null,"directive":"id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"tag","type":"string","callback":null,"default":null,"directive":"tag","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"product","type":"string","callback":null,"default":null,"directive":"product","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"created_at","type":"timeframe","callback":{},"default":null,"directive":"created_at","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"profile_id","type":"integer","callback":null,"default":null,"directive":"author_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"created_by","type":"string","callback":null,"default":null,"directive":"author","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"player_id","type":"integer","callback":null,"default":null,"directive":"solver_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"player","type":"string","callback":null,"default":null,"directive":"solver","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"solvers_count","type":"integer","callback":null,"default":null,"directive":"solvers_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"comments_count","type":"integer","callback":null,"default":null,"directive":"comments_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"likes_count","type":"integer","callback":null,"default":null,"directive":"likes_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"leader_id","type":"integer","callback":null,"default":null,"directive":"leader_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"leading_solution","type":"integer","callback":null,"default":null,"directive":"leading_solution","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true}],"filters":[{"name":"asset_type","type":"string","callback":null,"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":"\"cody:problem\"","prepend":true},{"name":"profile_id","type":"integer","callback":{},"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":"author_id","static":null,"prepend":true}],"query":{"params":{"per_page":50,"term":"tag:\"optics\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"optics\"","","\"","optics","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007fa2b41ef150\u003e":null,"#\u003cMathWorks::Search::Field:0x00007fa2b41ef0b0\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007fa2b41ee6b0\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007fa2b41ef3d0\u003e":1,"#\u003cMathWorks::Search::Field:0x00007fa2b41ef330\u003e":50,"#\u003cMathWorks::Search::Field:0x00007fa2b41ef290\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007fa2b41ef1f0\u003e":"tag:\"optics\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007fa2b41ef1f0\u003e":"tag:\"optics\""},"queried_facets":{}},"query_backend":{"connection":{"configuration":{"index_url":"http://index-op-v2/solr/","query_url":"http://search-op-v2/solr/","direct_access_index_urls":["http://index-op-v2/solr/"],"direct_access_query_urls":["http://search-op-v2/solr/"],"timeout":10,"vhost":"search","exchange":"search.topic","heartbeat":30,"pre_index_mode":false,"host":"rabbitmq-eks","port":5672,"username":"search","password":"J3bGPZzQ7asjJcCk","virtual_host":"search","indexer":"amqp","http_logging":"true","core":"cody"},"query_connection":{"uri":"http://search-op-v2/solr/cody/","proxy":null,"connection":{"parallel_manager":null,"headers":{"User-Agent":"Faraday v1.0.1"},"params":{},"options":{"params_encoder":"Faraday::FlatParamsEncoder","proxy":null,"bind":null,"timeout":null,"open_timeout":null,"read_timeout":null,"write_timeout":null,"boundary":null,"oauth":null,"context":null,"on_data":null},"ssl":{"verify":true,"ca_file":null,"ca_path":null,"verify_mode":null,"cert_store":null,"client_cert":null,"client_key":null,"certificate":null,"private_key":null,"verify_depth":null,"version":null,"min_version":null,"max_version":null},"default_parallel_manager":null,"builder":{"adapter":{"name":"Faraday::Adapter::NetHttp","args":[],"block":null},"handlers":[{"name":"Faraday::Response::RaiseError","args":[],"block":null}],"app":{"app":{"ssl_cert_store":{"verify_callback":null,"error":null,"error_string":null,"chain":null,"time":null},"app":{},"connection_options":{},"config_block":null}}},"url_prefix":"http://search-op-v2/solr/cody/","manual_proxy":false,"proxy":null},"update_format":"RSolr::JSON::Generator","update_path":"update","options":{"url":"http://search-op-v2/solr/cody"}}},"query":{"params":{"per_page":50,"term":"tag:\"optics\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"optics\"","","\"","optics","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007fa2b41ef150\u003e":null,"#\u003cMathWorks::Search::Field:0x00007fa2b41ef0b0\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007fa2b41ee6b0\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007fa2b41ef3d0\u003e":1,"#\u003cMathWorks::Search::Field:0x00007fa2b41ef330\u003e":50,"#\u003cMathWorks::Search::Field:0x00007fa2b41ef290\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007fa2b41ef1f0\u003e":"tag:\"optics\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007fa2b41ef1f0\u003e":"tag:\"optics\""},"queried_facets":{}},"options":{"fields":["id","difficulty_rating"]},"join":" "},"results":[{"id":1305,"difficulty_rating":"easy"},{"id":449,"difficulty_rating":"easy"},{"id":44070,"difficulty_rating":"easy-medium"},{"id":433,"difficulty_rating":"easy-medium"},{"id":1650,"difficulty_rating":"medium"},{"id":1276,"difficulty_rating":"medium"},{"id":1279,"difficulty_rating":"medium"},{"id":1000,"difficulty_rating":"medium"}]}}