{"id":9678,"date":"2023-02-10T13:36:06","date_gmt":"2023-02-10T18:36:06","guid":{"rendered":"https:\/\/blogs.mathworks.com\/cleve\/?p=9678"},"modified":"2023-04-20T15:13:07","modified_gmt":"2023-04-20T19:13:07","slug":"grafix-users-guide","status":"publish","type":"post","link":"https:\/\/blogs.mathworks.com\/cleve\/2023\/02\/10\/grafix-users-guide\/","title":{"rendered":"Grafix Users Guide"},"content":{"rendered":"<div class=\"content\"><!--introduction--><p>This is a quick look at <tt>Grafix<\/tt>, our tool for exploring matrices via 3-D computer graphics.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/Opening.png\" alt=\"\"> <\/p><!--\/introduction--><h3>Contents<\/h3><div><ul><li><a href=\"#57be277c-0c10-4e43-8d65-f48015d2b594\">Matrices<\/a><\/li><li><a href=\"#3d6ef86f-a4cc-40ef-82ce-8e1b0d809166\">Axis<\/a><\/li><li><a href=\"#8311b08f-d606-45c5-8ccb-421b2e700655\">Rx<\/a><\/li><li><a href=\"#46e10585-5ee4-4afb-904f-ea89ed26d5a5\">Ry<\/a><\/li><li><a href=\"#17de8d93-61b6-4d8f-b609-6cb49fd472b9\">Rz<\/a><\/li><li><a href=\"#b83306d0-ea2a-4037-a635-deb6fee1411f\">Tx<\/a><\/li><li><a href=\"#1def54af-4eef-4841-8b17-ac41da49bf44\">Ty<\/a><\/li><li><a href=\"#fc59a741-08b7-4579-b43e-522a4d7a6e76\">Tz<\/a><\/li><li><a href=\"#92e2a859-0b55-4fd9-bdd6-c5361adeb154\">S<\/a><\/li><li><a href=\"#aa2d64bd-c6f0-4fe4-9cd4-419be64b638d\">Switches<\/a><\/li><li><a href=\"#339b139a-7eb0-40bd-8613-90b12d531a21\">Pitch, Roll, Yaw<\/a><\/li><li><a href=\"#5c4f295c-490e-47f2-b936-f2bf9222a219\">Start, Reset, Viz<\/a><\/li><li><a href=\"#70b52af2-6e18-437f-b081-ef5bfdf71ff4\">Apps\/taxi<\/a><\/li><li><a href=\"#1a949efe-4fe2-4874-bbf9-4c6fcbd979c8\">Apps\/takeoff<\/a><\/li><li><a href=\"#94d3ddad-63fc-49aa-94e2-f484ef12639c\">Prop<\/a><\/li><li><a href=\"#b07f75a1-7337-4675-8d5b-211b60f94644\">Info<\/a><\/li><li><a href=\"#7a088e31-d548-4786-999a-8cfc3e95a249\">Exercises<\/a><\/li><li><a href=\"#03bb340c-65fe-44bd-883d-42e9b4805bdb\">Software<\/a><\/li><\/ul><\/div><h4>Matrices<a name=\"57be277c-0c10-4e43-8d65-f48015d2b594\"><\/a><\/h4><p>The word <i>matrix<\/i> comes from the Latin word <i>mater<\/i>, which means <i>mother<\/i> or  <i>origin<\/i>.  Matrices are like a mother to much of modern applied mathematics and computational science.<\/p><p><tt>Grafix<\/tt> is a study of the matrices that describe rotation, translation and scaling of objects moving in three-dimensional space. These matrices are the building blocks of today's computer graphics and are essential to all popular video games, to all CAD (Computer Aided Design) packages, to CGI (Computer Graphics Imagery) in films, and to MATLAB's Handle Graphics.<\/p><p>MATLAB is short for Matrix Laboratory. Matrices are also the foundation of MATLAB and of MathWorks.<\/p><p>The <i>homogeneous coordinates<\/i> system used in modern computer graphics makes it possible to describe rotations, translations and many other operations with 4-by-4 matrices.  These matrices operate on vectors with the position of an object in the first three components and, for now, a one as the fourth component, e.g. <tt>[x,y,z,1]'<\/tt>,<\/p><p>Matrices are always shown in a panel on the <tt>Grafix<\/tt> window. Here is an animation of one important example. Do you see the pattern in the evolving elements of this matrix? How are they related to each other?  How long before they repeat?<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/mat_gif.gif\" alt=\"\"> <\/p><h4>Axis<a name=\"3d6ef86f-a4cc-40ef-82ce-8e1b0d809166\"><\/a><\/h4><p>Here is the coordinate system used by <tt>view(3)<\/tt>, MATLAB's default projection of our three-dimensional physical world onto the two-dimensional computer display. The positive <tt>x<\/tt>-axis goes up and to the right on the screen, the positive <tt>y<\/tt>-axis goes up and to the left, and the positive <tt>z<\/tt>-axis goes straight up.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/axis.png\" alt=\"\"> <\/p><h4>Rx<a name=\"8311b08f-d606-45c5-8ccb-421b2e700655\"><\/a><\/h4><p>The three knobs at the lower right of the <tt>Grafix<\/tt> window allow you to vary the angles of <tt>Rx<\/tt>, <tt>Ry<\/tt> and <tt>Rz<\/tt>.  Here are snapshots of the resulting motion.  The <tt>Rx<\/tt> knob produces rotation about the <tt>x<\/tt>-axis, leaving <tt>x<\/tt> unchanged while rotating <tt>y<\/tt> and <tt>z<\/tt>.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/Rx.png\" alt=\"\"> <\/p><h4>Ry<a name=\"46e10585-5ee4-4afb-904f-ea89ed26d5a5\"><\/a><\/h4><p><tt>Ry<\/tt>, rotation about the <tt>y<\/tt>-axis, leaves <tt>y<\/tt> unchanged while rotating <tt>x<\/tt> and <tt>z<\/tt>.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/Ry.png\" alt=\"\"> <\/p><h4>Rz<a name=\"17de8d93-61b6-4d8f-b609-6cb49fd472b9\"><\/a><\/h4><p>And, <tt>Rz<\/tt>, rotation about the <tt>z<\/tt>-axis, leaves <tt>z<\/tt> unchanged while rotating <tt>x<\/tt> and <tt>y<\/tt>.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/Rz.png\" alt=\"\"> <\/p><h4>Tx<a name=\"b83306d0-ea2a-4037-a635-deb6fee1411f\"><\/a><\/h4><p>The three sliders at the lower left of the <tt>Grafix<\/tt> window control matrices with values in the fourth column. Multiplying a vector by <tt>Tx<\/tt>, which has a nonzero element in the first row, produces a horizontal movement in the direction of the <tt>x<\/tt>-axis.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/Tx.png\" alt=\"\"> <\/p><h4>Ty<a name=\"1def54af-4eef-4841-8b17-ac41da49bf44\"><\/a><\/h4><p><tt>Ty<\/tt>, with a nonzero in the second row, is translation in the direction of the <tt>y<\/tt>-axis.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/Ty.png\" alt=\"\"> <\/p><h4>Tz<a name=\"fc59a741-08b7-4579-b43e-522a4d7a6e76\"><\/a><\/h4><p>And, <tt>Tz<\/tt> is translation in the <tt>z<\/tt> direction.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/Tz.png\" alt=\"\"> <\/p><h4>S<a name=\"92e2a859-0b55-4fd9-bdd6-c5361adeb154\"><\/a><\/h4><p>The fourth slider controls <tt>S<\/tt>, a diagonal matrix with a single scaling factor for all three axes.<\/p><p>The use of matrix multiplication allows translations and scaling to be combined with rotations and other operations in a uniform way. The arithmetic units on today's Graphics Processing Units, GPUs, are designed to do 4-by-4 matrix multiplications at speeds hundreds of times faster than general purpose Central Processing Units, CPUs.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/S.png\" alt=\"\"> <\/p><h4>Switches<a name=\"aa2d64bd-c6f0-4fe4-9cd4-419be64b638d\"><\/a><\/h4><p>The switch on the left provides other objects that we will introduce later.  The switch on the right provides different <tt>views<\/tt> of three dimensions.  The <tt>yz<\/tt> plane view is shown here.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/switches.png\" alt=\"\"> <\/p><h4>Pitch, Roll, Yaw<a name=\"339b139a-7eb0-40bd-8613-90b12d531a21\"><\/a><\/h4><p><i>Pitch<\/i>, <i>roll<\/i> and  <i>yaw<\/i> are often used to describe the motion of aircraft and spacecraft. These terms are closely related to the rotations <tt>Rx<\/tt>, <tt>Ry<\/tt> and <tt>Rz<\/tt>. The <tt>Pitch<\/tt> button animates the <tt>Rx<\/tt> knob.  Here is a snapshot near one extreme of the resulting motion.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/pitch.png\" alt=\"\"> <\/p><h4>Start, Reset, Viz<a name=\"5c4f295c-490e-47f2-b936-f2bf9222a219\"><\/a><\/h4><p>The <tt>Start<\/tt> button restarts <tt>Grafix<\/tt>. The <tt>Reset<\/tt> button resets all knobs and sliders.<\/p><p>The <tt>Viz<\/tt> button turns off the display of buttons, knobs, sliders, and switches.  A small button, emphasized here with color, but usually barely visible, turns the display back on.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/viz.png\" alt=\"\"> <\/p><h4>Apps\/taxi<a name=\"70b52af2-6e18-437f-b081-ef5bfdf71ff4\"><\/a><\/h4><p><tt>Grafix<\/tt> is programable, in a primitive sort of way.  Apps are <tt>Grafix<\/tt> programs.  <tt>Taxi<\/tt> is a small app.  This is a snapshot.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/taxi.png\" alt=\"\"> <\/p><h4>Apps\/takeoff<a name=\"1a949efe-4fe2-4874-bbf9-4c6fcbd979c8\"><\/a><\/h4><p>When the <tt>takeoff<\/tt> app first appeared, I thought it was a bug in the code for <tt>Grafix<\/tt>.<\/p><p>You can see the <tt>takeoff<\/tt> program by entering <tt>type takeoff<\/tt> at the MATLAB command prompt.  You can also <tt>edit takeoff<\/tt>.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/takeoffapp.png\" alt=\"\"> <\/p><h4>Prop<a name=\"94d3ddad-63fc-49aa-94e2-f484ef12639c\"><\/a><\/h4><p>One of my favorite animations employs the rotations from the Matrices section to drive the propeller alone.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/prop_gif_small.gif\" alt=\"\"> <\/p><h4>Info<a name=\"b07f75a1-7337-4675-8d5b-211b60f94644\"><\/a><\/h4><p>The <tt>info<\/tt> button is a link to this User's Guide.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/Guide.png\" alt=\"\"> <\/p><h4>Exercises<a name=\"7a088e31-d548-4786-999a-8cfc3e95a249\"><\/a><\/h4><div><ul><li>What color is the beacon on top of the plane?<\/li><\/ul><\/div><div><ul><li>Demonstrate how matrix-vector multiplication, <tt>M*v<\/tt>, of a position   vector, <tt>v = [x,y,z,1]'<\/tt>, by a 4-by-4 matrix <tt>M<\/tt>, achieves a rotation,   translation or scaling.<\/li><\/ul><\/div><div><ul><li>Describe the evolution of the matrix values in the Matrices and   <tt>prop<\/tt> animations.<\/li><\/ul><\/div><div><ul><li>What angles are involved in the snapshots shown for   <tt>Rx<\/tt>, <tt>Ry<\/tt> and <tt>Rz<\/tt>?<\/li><\/ul><\/div><div><ul><li>Why is the plane in the <tt>Pitch<\/tt> animation upside down?<\/li><\/ul><\/div><div><ul><li>What angles and what matrices characterize the extremes of the <tt>Pitch<\/tt>   animation?<\/li><\/ul><\/div><div><ul><li>Write another app like <tt>taxi<\/tt> and <tt>takeoff<\/tt>.<\/li><\/ul><\/div><h4>Software<a name=\"03bb340c-65fe-44bd-883d-42e9b4805bdb\"><\/a><\/h4><p>The MATLAB code for <tt>Grafix<\/tt> <a href=\"https:\/\/blogs.mathworks.com\/cleve\/files\/Grafix_mzip-1.m\">is available here.<\/a><\/p><script language=\"JavaScript\"> <!-- \r\n    function grabCode_0bf6d368f4974a3f8a31d0635354c4f7() {\r\n        \/\/ Remember the title so we can use it in the new page\r\n        title = document.title;\r\n\r\n        \/\/ Break up these strings so that their presence\r\n        \/\/ in the Javascript doesn't mess up the search for\r\n        \/\/ the MATLAB code.\r\n        t1='0bf6d368f4974a3f8a31d0635354c4f7 ' + '##### ' + 'SOURCE BEGIN' + ' #####';\r\n        t2='##### ' + 'SOURCE END' + ' #####' + ' 0bf6d368f4974a3f8a31d0635354c4f7';\r\n    \r\n        b=document.getElementsByTagName('body')[0];\r\n        i1=b.innerHTML.indexOf(t1)+t1.length;\r\n        i2=b.innerHTML.indexOf(t2);\r\n \r\n        code_string = b.innerHTML.substring(i1, i2);\r\n        code_string = code_string.replace(\/REPLACE_WITH_DASH_DASH\/g,'--');\r\n\r\n        \/\/ Use \/x3C\/g instead of the less-than character to avoid errors \r\n        \/\/ in the XML parser.\r\n        \/\/ Use '\\x26#60;' instead of '<' so that the XML parser\r\n        \/\/ doesn't go ahead and substitute the less-than character. \r\n        code_string = code_string.replace(\/\\x3C\/g, '\\x26#60;');\r\n\r\n        copyright = 'Copyright 2023 The MathWorks, Inc.';\r\n\r\n        w = window.open();\r\n        d = w.document;\r\n        d.write('<pre>\\n');\r\n        d.write(code_string);\r\n\r\n        \/\/ Add copyright line at the bottom if specified.\r\n        if (copyright.length > 0) {\r\n            d.writeln('');\r\n            d.writeln('%%');\r\n            if (copyright.length > 0) {\r\n                d.writeln('% _' + copyright + '_');\r\n            }\r\n        }\r\n\r\n        d.write('<\/pre>\\n');\r\n\r\n        d.title = title + ' (MATLAB code)';\r\n        d.close();\r\n    }   \r\n     --> <\/script><p style=\"text-align: right; font-size: xx-small; font-weight:lighter;   font-style: italic; color: gray\"><br><a href=\"javascript:grabCode_0bf6d368f4974a3f8a31d0635354c4f7()\"><span style=\"font-size: x-small;        font-style: italic;\">Get \r\n      the MATLAB code <noscript>(requires JavaScript)<\/noscript><\/span><\/a><br><br>\r\n      Published with MATLAB&reg; R2023a<br><\/p><\/div><!--\r\n0bf6d368f4974a3f8a31d0635354c4f7 ##### SOURCE BEGIN #####\r\n%% Grafix User's Guide\r\n% This is a quick look at\r\n% |Grafix|, our tool for exploring matrices via 3-D computer graphics.\r\n%\r\n% <<Opening.png>>\r\n%\r\n\r\n%% Matrices\r\n% The word _matrix_ comes from the Latin word _mater_, which means\r\n% _mother_ or  _origin_.  Matrices are like a mother to much of\r\n% modern applied mathematics and computational science.\r\n%\r\n% |Grafix| is a study of the matrices that describe rotation, translation \r\n% and scaling of objects moving in three-dimensional space. \r\n% These matrices are the building blocks of today's computer graphics\r\n% and are essential to all popular video games, \r\n% to all CAD (Computer Aided Design) packages, \r\n% to CGI (Computer Graphics Imagery) in films,\r\n% and to MATLAB's Handle Graphics.\r\n%\r\n% MATLAB is short for Matrix Laboratory.\r\n% Matrices are also the foundation of MATLAB and of MathWorks.\r\n%\r\n% The _homogeneous coordinates_ system used in modern computer graphics\r\n% makes it possible to describe rotations, translations\r\n% and many other operations with 4-by-4 matrices.  These matrices\r\n% operate on vectors with the position of an object\r\n% in the first three components and, for now, a one as the\r\n% fourth component, e.g. |[x,y,z,1]'|,\r\n%\r\n% Matrices are always shown in a panel on the |Grafix| window.\r\n% Here is an animation of one important example.  \r\n% Do you see the pattern in the evolving elements of this matrix?\r\n% How are they related to each other?  How long before they repeat?\r\n%\r\n% <<mat_gif.gif>>\r\n%\r\n\r\n%% Axis\r\n% Here is the coordinate system used by |view(3)|, MATLAB's default \r\n% projection of our three-dimensional physical world onto the \r\n% two-dimensional computer display.\r\n% The positive |x|-axis goes up and to the right on the screen, \r\n% the positive |y|-axis goes up and to the left, and the positive \r\n% |z|-axis goes straight up.\r\n%\r\n% <<axis.png>>\r\n\r\n%% Rx\r\n% The three knobs at the lower right of the |Grafix| window allow you\r\n% to vary the angles of |Rx|, |Ry| and |Rz|.  Here are snapshots\r\n% of the resulting motion.  The |Rx| knob produces rotation about the\r\n% |x|-axis, leaving |x| unchanged while rotating |y| and |z|. \r\n%\r\n% <<Rx.png>>\r\n%\r\n\r\n%% Ry\r\n% |Ry|, rotation about the |y|-axis, leaves |y| unchanged while \r\n% rotating |x| and |z|. \r\n%\r\n% <<Ry.png>>\r\n%\r\n\r\n%% Rz\r\n% And, |Rz|, rotation about the |z|-axis, leaves |z| unchanged while\r\n% rotating |x| and |y|.\r\n%\r\n% <<Rz.png>>\r\n%\r\n\r\n%% Tx\r\n% The three sliders at the lower left of the |Grafix| window\r\n% control matrices with values in the fourth column.\r\n% Multiplying a vector by |Tx|, which has a nonzero element in the first\r\n% row, produces a horizontal movement in the direction of the |x|-axis.\r\n%\r\n% <<Tx.png>>\r\n%\r\n\r\n%% Ty\r\n% |Ty|, with a nonzero in the second row, is translation in the \r\n% direction of the |y|-axis.\r\n%\r\n% <<Ty.png>>\r\n%\r\n\r\n%% Tz\r\n% And, |Tz| is translation in the |z| direction.\r\n%\r\n% <<Tz.png>>\r\n%\r\n\r\n%% S\r\n% The fourth slider controls |S|, a diagonal matrix with\r\n% a single scaling factor for all three axes. \r\n%\r\n% The use of matrix multiplication allows translations and scaling\r\n% to be combined with rotations and other operations in a uniform way. \r\n% The arithmetic units on today's\r\n% Graphics Processing Units, GPUs, are designed to do 4-by-4 matrix\r\n% multiplications at speeds hundreds of times faster than general\r\n% purpose Central Processing Units, CPUs.\r\n%\r\n% <<S.png>>\r\n%\r\n\r\n%% Switches\r\n% The switch on the left provides other objects that we will introduce\r\n% later.  The switch on the right provides different |views| \r\n% of three dimensions.  The |yz| plane view is shown here.\r\n%\r\n% <<switches.png>>\r\n% \r\n\r\n%% Pitch, Roll, Yaw\r\n% _Pitch_, _roll_ and  _yaw_ are often used to describe\r\n% the motion of aircraft and spacecraft.\r\n% These terms are closely related to the rotations |Rx|, |Ry| and |Rz|.\r\n% The |Pitch| button animates the |Rx| knob.  Here is a snapshot near\r\n% one extreme of the resulting motion.\r\n%\r\n% <<pitch.png>>\r\n%\r\n\r\n%% Start, Reset, Viz\r\n% The |Start| button restarts |Grafix|.\r\n% The |Reset| button resets all knobs and sliders.\r\n%\r\n% The |Viz| button turns off the display of buttons, knobs, sliders, and\r\n% switches.  A small button, emphasized here with color, but usually\r\n% barely visible, turns the display back on.\r\n%\r\n% <<viz.png>>\r\n%\r\n\r\n%% Apps\/taxi\r\n% |Grafix| is programable, in a primitive sort of way.  Apps are |Grafix|\r\n% programs.  |Taxi| is a small app.  This is a snapshot.\r\n%\r\n% <<taxi.png>>\r\n%\r\n\r\n%% Apps\/takeoff\r\n% When the |takeoff| app first appeared, I thought it was a bug in the \r\n% code for |Grafix|.\r\n%\r\n% You can see the |takeoff| program by entering |type takeoff|\r\n% at the MATLAB command prompt.  You can also |edit takeoff|.\r\n%\r\n% <<takeoffapp.png>>\r\n%\r\n\r\n%% Prop\r\n% One of my favorite animations employs the rotations from the Matrices\r\n% section to drive the propeller alone.\r\n%\r\n% <<prop_gif_small.gif>>\r\n%\r\n\r\n%% Info\r\n% The |info| button is a link to this User's Guide.\r\n%\r\n% <<Guide.png>>\r\n%\r\n\r\n%% Exercises\r\n%\r\n% * What color is the beacon on top of the plane?\r\n%\r\n% * Demonstrate how matrix-vector multiplication, |M*v|, of a position\r\n%   vector, |v = [x,y,z,1]'|, by a 4-by-4 matrix |M|, achieves a rotation,\r\n%   translation or scaling.\r\n%\r\n% * Describe the evolution of the matrix values in the Matrices and\r\n%   |prop| animations.\r\n%\r\n% * What angles are involved in the snapshots shown for\r\n%   |Rx|, |Ry| and |Rz|?\r\n%\r\n% * Why is the plane in the |Pitch| animation upside down?\r\n%\r\n% * What angles and what matrices characterize the extremes of the |Pitch|\r\n%   animation? \r\n%\r\n% * Write another app like |taxi| and |takeoff|.\r\n%\r\n\r\n%% Software\r\n%\r\n% The MATLAB code for |Grafix|\r\n% <https:\/\/blogs.mathworks.com\/cleve\/files\/Grafix_mzip-1.m is available here.>\r\n##### SOURCE END ##### 0bf6d368f4974a3f8a31d0635354c4f7\r\n-->","protected":false},"excerpt":{"rendered":"<div class=\"overview-image\"><img src=\"https:\/\/blogs.mathworks.com\/cleve\/files\/prop_gif_small.gif\" class=\"img-responsive attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"\" decoding=\"async\" loading=\"lazy\" \/><\/div><!--introduction--><p>This is a quick look at <tt>Grafix<\/tt>, our tool for exploring matrices via 3-D computer graphics.... <a class=\"read-more\" href=\"https:\/\/blogs.mathworks.com\/cleve\/2023\/02\/10\/grafix-users-guide\/\">read more >><\/a><\/p>","protected":false},"author":78,"featured_media":9696,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[5,23,6,37,39],"tags":[],"_links":{"self":[{"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts\/9678"}],"collection":[{"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/users\/78"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/comments?post=9678"}],"version-history":[{"count":14,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts\/9678\/revisions"}],"predecessor-version":[{"id":10332,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts\/9678\/revisions\/10332"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/media\/9696"}],"wp:attachment":[{"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/media?parent=9678"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/categories?post=9678"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/tags?post=9678"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}