{"id":122,"date":"2014-12-04T16:36:19","date_gmt":"2014-12-04T21:36:19","guid":{"rendered":"https:\/\/blogs.mathworks.com\/graphics\/?p=122"},"modified":"2014-12-04T16:36:19","modified_gmt":"2014-12-04T21:36:19","slug":"tie-a-ribbon-round-it-parametric-curves-part-1","status":"publish","type":"post","link":"https:\/\/blogs.mathworks.com\/graphics\/2014\/12\/04\/tie-a-ribbon-round-it-parametric-curves-part-1\/","title":{"rendered":"Tie a Ribbon Round It (Parametric Curves Part 1)"},"content":{"rendered":"<div class=\"content\"><h3>Tie a Ribbon Round It (Parametric Curves: Part 1)<\/h3><p>Parametric curves are easy to draw in MATLAB. For example, we can use the parametric equation for a circle like so:<\/p><p><img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/graphics\/2014\/tie_a_ribbon_eq04670208249074223046.png\" alt=\"$$0<=t<=2\\pi$$\"><\/p><p><img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/graphics\/2014\/tie_a_ribbon_eq02186114513243715264.png\" alt=\"$$x = cos(t)$$\"><\/p><p><img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/graphics\/2014\/tie_a_ribbon_eq02323965944096872036.png\" alt=\"$$y = sin(t)$$\"><\/p><pre class=\"codeinput\">t = linspace(0,2*pi,128);\r\nx = cos(t);\r\ny = sin(t);\r\n\r\nplot(x,y);\r\naxis <span class=\"string\">square<\/span>\r\n<\/pre><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/images\/graphics\/2014\/tie_a_ribbon_01.png\" alt=\"\"> <p>The same thing works in 3D.<\/p><p><img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/graphics\/2014\/tie_a_ribbon_eq04670208249074223046.png\" alt=\"$$0<=t<=2\\pi$$\"><\/p><p><img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/graphics\/2014\/tie_a_ribbon_eq15759605051441293362.png\" alt=\"$$x = 3 cos(t)+cos(10t) cos(t)$$\"><\/p><p><img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/graphics\/2014\/tie_a_ribbon_eq14100028489084499249.png\" alt=\"$$y = 3 sin(t)+cos(10t) sin(t)$$\"><\/p><p><img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/graphics\/2014\/tie_a_ribbon_eq14686009564884394348.png\" alt=\"$$z = sin(10t)$$\"><\/p><pre class=\"codeinput\">t = linspace(0,2*pi,256);\r\nx = 3*cos(t)+cos(10*t).*cos(t);\r\ny = 3*sin(t)+cos(10*t).*sin(t);\r\nz = sin(10*t);\r\n\r\nplot3(x,y,z);\r\nax = gca;\r\nax.DataAspectRatio = [1 1 1];\r\n<\/pre><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/images\/graphics\/2014\/tie_a_ribbon_02.png\" alt=\"\"> <p>But it can be tough to see what the curve is doing in 3D when you draw it as a line. It can be a lot clearer if we sweep a surface along the curve. To do that, we just need to find a series of vectors which are normal to the curve at each point. We can do that pretty easily if we remember our partial derivatives. If we take the first derivative of the points on the curve with respect to <img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/graphics\/2014\/tie_a_ribbon_eq12656067504604335951.png\" alt=\"$t$\">.<\/p><p><img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/graphics\/2014\/tie_a_ribbon_eq15867717869474323339.png\" alt=\"$$\\frac{dx}{dt} = -3 sin(t) - cos(10t) sin(t) - 10 sin(10t) cos(t)$$\"><\/p><p><img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/graphics\/2014\/tie_a_ribbon_eq14858248992755845972.png\" alt=\"$$\\frac{dy}{dt} = 3 cos(t) + cos(10t) cos(t) - 10 sin(10t) sin(t)$$\"><\/p><p><img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/graphics\/2014\/tie_a_ribbon_eq12373484421777703360.png\" alt=\"$$\\frac{dz}{dt} = 10 cos(10t)$$\"><\/p><pre class=\"codeinput\">dxdt = -3*sin(t) - cos(10*t).*sin(t) - 10*sin(10*t).*cos(t);\r\ndydt = 3*cos(t) + cos(10*t).*cos(t) - 10*sin(10*t).*sin(t);\r\ndzdt = 10*cos(10*t);\r\n<\/pre><p>We'll get a set of tangent vectors, but the magnitudes will be a little strange. The magnitude is actually the velocity of the curve at that point. We can normalize the tangent vectors using the following function.<\/p><pre class=\"language-matlab\"><span class=\"keyword\">function<\/span> [xo, yo, zo,l] = normalize_vector(xi,yi,zi)\r\n  l=sqrt(xi.^2+yi.^2+zi.^2);\r\n  l(l~=0) = 1.\/l(l~=0);\r\n  xo = xi.*l;\r\n  yo = yi.*l;\r\n  zo = zi.*l;\r\n<\/pre><p>Like this:<\/p><pre class=\"codeinput\">[tx,ty,tz] = normalize_vector(dxdt,dydt,dzdt);\r\n<\/pre><p>And then we can plot them along with the curve using this function.<\/p><pre class=\"language-matlab\"><span class=\"keyword\">function<\/span> plot_vectors(px,py,pz, vx,vy,vz)\r\n<span class=\"comment\">% Plot the curve [x,y,z] and the vectors [vx,vy,vz]<\/span>\r\n  <span class=\"comment\">% First the curve<\/span>\r\n  plot3(px,py,pz);\r\n  hold <span class=\"string\">on<\/span>\r\n  <span class=\"comment\">% Then the vectors<\/span>\r\n  lx = [px; px+vx; nan(size(px))];\r\n  ly = [py; py+vy; nan(size(py))];\r\n  lz = [pz; pz+vz; nan(size(pz))];\r\n  plot3(lx(:),ly(:),lz(:));\r\n  <span class=\"comment\">% Finally add markers at the \"heads\"<\/span>\r\n  plot3(px+vx,py+vy,pz+vz,<span class=\"string\">'.'<\/span>);\r\n  grid <span class=\"string\">on<\/span>\r\n  hold <span class=\"string\">off<\/span>\r\n<\/pre><pre class=\"codeinput\">plot_vectors(x,y,z, tx,ty,tz);\r\nax.DataAspectRatio = [1 1 1];\r\n<\/pre><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/images\/graphics\/2014\/tie_a_ribbon_03.png\" alt=\"\"> <p>But we need a vector which is normal to the curve, not one which is tangent to it. We need to keep going. The second partial with respect to $t$ actually does what we want.<\/p><p><img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/graphics\/2014\/tie_a_ribbon_eq10929040812074577555.png\" alt=\"$$\\frac{d^2x}{dt^2} = -3 cos(t) + 20 sin(10t) sin(t) - 101 cos(10t) cos(t)$$\"><\/p><p><img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/graphics\/2014\/tie_a_ribbon_eq11821041883426179363.png\" alt=\"$$\\frac{d^2y}{dt^2} = -3 sin(t) - 101 cos(10t) sin(t) - 20 sin(10t) cos(t)$$\"><\/p><p><img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/graphics\/2014\/tie_a_ribbon_eq12523088106751974551.png\" alt=\"$$\\frac{d^2z}{dt^2} = -100 sin(10t)$$\"><\/p><pre class=\"codeinput\">d2xdt2 = -3*cos(t) + 20*sin(10*t).*sin(t) - 101*cos(10*t).*cos(t);\r\nd2ydt2 = -3*sin(t) - 101*cos(10*t).*sin(t) - 20*sin(10*t).*cos(t);\r\nd2zdt2 = -100*sin(10*t);\r\n<\/pre><p>If we plot those vectors, we can see that they all point towards the circle that our curve is orbiting around.<\/p><pre class=\"codeinput\">[nx,ny,nz] = normalize_vector(d2xdt2,d2ydt2,d2zdt2);\r\nplot_vectors(x,y,z, nx,ny,nz);\r\nax.DataAspectRatio = [1 1 1];\r\n<\/pre><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/images\/graphics\/2014\/tie_a_ribbon_04.png\" alt=\"\"> <p>That gives us everything we need to create a ribbon. We simply turn the 1xN array of points into a 2xN array of points by adding and subtracting half of normal vectors from the points.<\/p><pre class=\"codeinput\">sx = [x+nx\/2; x-nx\/2];\r\nsy = [y+ny\/2; y-ny\/2];\r\nsz = [z+nz\/2; z-nz\/2];\r\n<\/pre><p>We can give that 2xN array to surf to create a long, thin surface which is the ribbon.<\/p><p>I'll use the hsv colormap because it's cyclic, just like our curve.<\/p><pre class=\"codeinput\">h = surf(sx,sy,sz,[t;t]);\r\nax.DataAspectRatio = [1 1 1];\r\ncolormap(hsv(256))\r\n<\/pre><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/images\/graphics\/2014\/tie_a_ribbon_05.png\" alt=\"\"> <p>This lets us clearly see how the curve moves through three dimensions. We can also turn on a light to see more detail, and turn off the edges to make it a little prettier.<\/p><pre class=\"codeinput\">h.EdgeColor = <span class=\"string\">'none'<\/span>;\r\nh.FaceColor = <span class=\"string\">'interp'<\/span>;\r\nh.FaceLighting = <span class=\"string\">'gouraud'<\/span>;\r\ncamlight <span class=\"string\">headlight<\/span>\r\n<\/pre><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/images\/graphics\/2014\/tie_a_ribbon_06.png\" alt=\"\"> <p>Next time we'll look at more things we can do with this technique. In the meantime, can you use these equations:<\/p><p><img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/graphics\/2014\/tie_a_ribbon_eq04670208249074223046.png\" alt=\"$$0<=t<=2\\pi$$\"><\/p><p><img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/graphics\/2014\/tie_a_ribbon_eq06676913039002461338.png\" alt=\"$$x = 2 sin(3t) cos(t)$$\"><\/p><p><img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/graphics\/2014\/tie_a_ribbon_eq14598084261765581159.png\" alt=\"$$y = 2 sin(3t) sin(t)$$\"><\/p><p><img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/graphics\/2014\/tie_a_ribbon_eq12058436748527060859.png\" alt=\"$$z = sin(3t)$$\"><\/p><p>to get something that looks like this?<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/images\/graphics\/2014\/triribbon.png\" alt=\"\"> <\/p><p>It's a little easier to understand than this wireframe view, isn't it?<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/images\/graphics\/2014\/triwireframe.png\" alt=\"\"> <\/p><script language=\"JavaScript\"> <!-- \r\n    function grabCode_a399635469504d26af1cb3c70fdf5f21() {\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='a399635469504d26af1cb3c70fdf5f21 ' + '##### ' + 'SOURCE BEGIN' + ' #####';\r\n        t2='##### ' + 'SOURCE END' + ' #####' + ' a399635469504d26af1cb3c70fdf5f21';\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 2014 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_a399635469504d26af1cb3c70fdf5f21()\"><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; R2014b<br><\/p><\/div><!--\r\na399635469504d26af1cb3c70fdf5f21 ##### SOURCE BEGIN #####\r\n%% Tie a Ribbon Round It (Parametric Curves: Part 1)\r\n% Parametric curves are easy to draw in MATLAB. For example, we can use the\r\n% parametric equation for a circle like so:\r\n%\r\n% $$0<=t<=2\\pi$$\r\n%\r\n% $$x = cos(t)$$\r\n%\r\n% $$y = sin(t)$$\r\n%\r\nt = linspace(0,2*pi,128);\r\nx = cos(t);\r\ny = sin(t);\r\n\r\nplot(x,y);\r\naxis square\r\n\r\n%%\r\n% The same thing works in 3D.\r\n%\r\n% $$0<=t<=2\\pi$$\r\n%\r\n% $$x = 3 cos(t)+cos(10t) cos(t)$$\r\n%\r\n% $$y = 3 sin(t)+cos(10t) sin(t)$$\r\n%\r\n% $$z = sin(10t)$$\r\n%\r\nt = linspace(0,2*pi,256);\r\nx = 3*cos(t)+cos(10*t).*cos(t);\r\ny = 3*sin(t)+cos(10*t).*sin(t);\r\nz = sin(10*t);\r\n\r\nplot3(x,y,z);\r\nax = gca;\r\nax.DataAspectRatio = [1 1 1];\r\n\r\n%%\r\n% But it can be tough to see what the curve is doing in 3D when you draw it\r\n% as a line. It can be a lot clearer if we sweep a surface along the curve.\r\n% To do that, we just need to find a series of vectors which are normal to\r\n% the curve at each point. We can do that pretty easily if we remember our\r\n% partial derivatives. If we take the first derivative of the points on the\r\n% curve with respect to $t$.\r\n%\r\n% $$\\frac{dx}{dt} = -3 sin(t) - cos(10t) sin(t) - 10 sin(10t) cos(t)$$\r\n%\r\n% $$\\frac{dy}{dt} = 3 cos(t) + cos(10t) cos(t) - 10 sin(10t) sin(t)$$\r\n%\r\n% $$\\frac{dz}{dt} = 10 cos(10t)$$\r\n%\r\ndxdt = -3*sin(t) - cos(10*t).*sin(t) - 10*sin(10*t).*cos(t);\r\ndydt = 3*cos(t) + cos(10*t).*cos(t) - 10*sin(10*t).*sin(t);\r\ndzdt = 10*cos(10*t);\r\n\r\n%%\r\n% We'll get a set of tangent vectors, but the magnitudes will be a little\r\n% strange. The magnitude is actually the velocity of the curve at that\r\n% point. We can normalize the tangent vectors using the following function.\r\n%\r\n%   function [xo, yo, zo,l] = normalize_vector(xi,yi,zi)\r\n%     l=sqrt(xi.^2+yi.^2+zi.^2);\r\n%     l(l~=0) = 1.\/l(l~=0);\r\n%     xo = xi.*l;\r\n%     yo = yi.*l;\r\n%     zo = zi.*l;\r\n\r\n%%\r\n% Like this:\r\n[tx,ty,tz] = normalize_vector(dxdt,dydt,dzdt);\r\n\r\n%%\r\n% And then we can plot them along with the curve using this function.\r\n%\r\n%   function plot_vectors(px,py,pz, vx,vy,vz)\r\n%   % Plot the curve [x,y,z] and the vectors [vx,vy,vz]\r\n%     % First the curve\r\n%     plot3(px,py,pz);\r\n%     hold on\r\n%     % Then the vectors\r\n%     lx = [px; px+vx; nan(size(px))];\r\n%     ly = [py; py+vy; nan(size(py))];\r\n%     lz = [pz; pz+vz; nan(size(pz))];\r\n%     plot3(lx(:),ly(:),lz(:));\r\n%     % Finally add markers at the \"heads\"\r\n%     plot3(px+vx,py+vy,pz+vz,'.');\r\n%     grid on\r\n%     hold off\r\nplot_vectors(x,y,z, tx,ty,tz);\r\nax.DataAspectRatio = [1 1 1];\r\n\r\n%%\r\n% But we need a vector which is normal to the curve, not one which is\r\n% tangent to it. We need to keep going. The second partial with respect to\r\n% $t$ actually does what we want.\r\n%\r\n% $$\\frac{d^2x}{dt^2} = -3 cos(t) + 20 sin(10t) sin(t) - 101 cos(10t) cos(t)$$\r\n%\r\n% $$\\frac{d^2y}{dt^2} = -3 sin(t) - 101 cos(10t) sin(t) - 20 sin(10t) cos(t)$$\r\n%\r\n% $$\\frac{d^2z}{dt^2} = -100 sin(10t)$$\r\n%\r\nd2xdt2 = -3*cos(t) + 20*sin(10*t).*sin(t) - 101*cos(10*t).*cos(t);\r\nd2ydt2 = -3*sin(t) - 101*cos(10*t).*sin(t) - 20*sin(10*t).*cos(t);\r\nd2zdt2 = -100*sin(10*t);\r\n\r\n%%\r\n% If we plot those vectors, we can see that they all point towards the\r\n% circle that our curve is orbiting around.\r\n[nx,ny,nz] = normalize_vector(d2xdt2,d2ydt2,d2zdt2);\r\nplot_vectors(x,y,z, nx,ny,nz);\r\nax.DataAspectRatio = [1 1 1];\r\n\r\n%%\r\n% That gives us everything we need to create a ribbon. We simply turn the\r\n% 1xN array of points into a 2xN array of points by adding and subtracting\r\n% half of normal vectors from the points.\r\nsx = [x+nx\/2; x-nx\/2];\r\nsy = [y+ny\/2; y-ny\/2];\r\nsz = [z+nz\/2; z-nz\/2];\r\n\r\n%%\r\n% We can give that 2xN array to surf to create a long, thin surface which\r\n% is the ribbon.\r\n%\r\n% I'll use the hsv colormap because it's cyclic, just like our curve. \r\nh = surf(sx,sy,sz,[t;t]);\r\nax.DataAspectRatio = [1 1 1];\r\ncolormap(hsv(256))\r\n\r\n%%\r\n% This lets us clearly see how the curve moves through three dimensions. We\r\n% can also turn on a light to see more detail, and turn off the edges to\r\n% make it a little prettier.\r\nh.EdgeColor = 'none';\r\nh.FaceColor = 'interp';\r\nh.FaceLighting = 'gouraud';\r\ncamlight headlight\r\n\r\n%%\r\n% Next time we'll look at more things we can do with this technique. In the\r\n% meantime, can you use these equations:\r\n%\r\n% $$0<=t<=2\\pi$$\r\n%\r\n% $$x = 2 sin(3t) cos(t)$$\r\n%\r\n% $$y = 2 sin(3t) sin(t)$$\r\n%\r\n% $$z = sin(3t)$$\r\n%\r\n% to get something that looks like this?\r\n%\r\n% <<triribbon.png>>\r\n\r\n%%\r\n% It's a little easier to understand than this wireframe view, isn't it?\r\n%\r\n% <<triwireframe.png>>\r\n\r\n##### SOURCE END ##### a399635469504d26af1cb3c70fdf5f21\r\n-->","protected":false},"excerpt":{"rendered":"<div class=\"overview-image\"><img src=\"https:\/\/blogs.mathworks.com\/graphics\/files\/feature_image\/tie_a_ribbon_06.png\" class=\"img-responsive attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"\" decoding=\"async\" loading=\"lazy\" \/><\/div><p>Tie a Ribbon Round It (Parametric Curves: Part 1)Parametric curves are easy to draw in MATLAB. For example, we can use the parametric equation for a circle like so:t = linspace(0,2*pi,128);\r\nx =... <a class=\"read-more\" href=\"https:\/\/blogs.mathworks.com\/graphics\/2014\/12\/04\/tie-a-ribbon-round-it-parametric-curves-part-1\/\">read more >><\/a><\/p>","protected":false},"author":89,"featured_media":127,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[5],"tags":[],"_links":{"self":[{"href":"https:\/\/blogs.mathworks.com\/graphics\/wp-json\/wp\/v2\/posts\/122"}],"collection":[{"href":"https:\/\/blogs.mathworks.com\/graphics\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.mathworks.com\/graphics\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/graphics\/wp-json\/wp\/v2\/users\/89"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/graphics\/wp-json\/wp\/v2\/comments?post=122"}],"version-history":[{"count":26,"href":"https:\/\/blogs.mathworks.com\/graphics\/wp-json\/wp\/v2\/posts\/122\/revisions"}],"predecessor-version":[{"id":155,"href":"https:\/\/blogs.mathworks.com\/graphics\/wp-json\/wp\/v2\/posts\/122\/revisions\/155"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/graphics\/wp-json\/wp\/v2\/media\/127"}],"wp:attachment":[{"href":"https:\/\/blogs.mathworks.com\/graphics\/wp-json\/wp\/v2\/media?parent=122"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/graphics\/wp-json\/wp\/v2\/categories?post=122"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/graphics\/wp-json\/wp\/v2\/tags?post=122"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}