{"id":973,"date":"2020-07-19T20:00:16","date_gmt":"2020-07-19T20:00:16","guid":{"rendered":"https:\/\/www.parametriczoo.com\/?p=973"},"modified":"2020-07-19T20:06:21","modified_gmt":"2020-07-19T20:06:21","slug":"fit-an-arbitrary-polyline-into-a-given-rectangle","status":"publish","type":"post","link":"https:\/\/www.parametriczoo.com\/index.php\/2020\/07\/19\/fit-an-arbitrary-polyline-into-a-given-rectangle\/","title":{"rendered":"Fit an arbitrary set of points into a given rectangle."},"content":{"rendered":"<p>[et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;3.22.7&#8243;][et_pb_row _builder_version=&#8221;3.22.7&#8243;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;3.22.7&#8243;][et_pb_text _builder_version=&#8221;3.22.7&#8243;]<\/p>\n<p><strong>A simple problem : <\/strong><\/p>\n<p><span>Fit a flat set of points on XY plane into a given rectangle. Or in other words place the given rectangle around the set of points which contains all the points. In the same time determine if the problem has a solution or not?<\/span><\/p>\n<p><span> In this video I used Rhino+Grasshopper&#8230;.<\/span><\/p>\n<p>[\/et_pb_text][et_pb_video src=&#8221;https:\/\/youtu.be\/pXTXsuFN8XU&#8221; _builder_version=&#8221;3.22.7&#8243;][\/et_pb_video][et_pb_text _builder_version=&#8221;3.22.7&#8243;]<\/p>\n<p>Note that this problem is different than finding the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Minimum_bounding_box_algorithms#Two_dimensions\">minimum bounding rectangle<\/a> of the poly-line which can be solved using&nbsp;<a href=\"&nbsp;https:\/\/en.wikipedia.org\/wiki\/Rotating_calipers\">Rotating calipers. <\/a><\/p>\n<p>In this problem we don&#8217;t need to find the rectangle but, find the transformation which places all the points inside the&nbsp; rectangle. Such that transformation has two components, <strong>Rotation<\/strong> and <strong>Translation<\/strong>. In a 2D problem we can reduce the unknown to three variable <strong>r<\/strong>,<strong>x<\/strong> and <strong>y <\/strong>which represent the rotation amount (<em><strong>r<\/strong><\/em>) , and the <em><strong>x<\/strong><\/em> and <strong><em>y<\/em><\/strong> coordinates of the translation vector. Before we start thinking of a solution , we can reduce the problem further using convex hull of the points instead of the point set itself , simply because any points inside the convex hull will be automatically inside our rectangle.<\/p>\n<p>We define transformation <strong>A<\/strong> which transform all points of the convex hull <strong>P<\/strong> into a set <strong>Q<\/strong>:&nbsp;<\/p>\n<p><b><\/b><\/p>\n<p>[\/et_pb_text][et_pb_image align=&#8221;center&#8221; width=&#8221;65%&#8221; src=&#8221;https:\/\/www.parametriczoo.com\/wp-content\/uploads\/2020\/07\/image001.png&#8221; _builder_version=&#8221;3.22.7&#8243;][\/et_pb_image][et_pb_text _builder_version=&#8221;3.22.7&#8243;]<\/p>\n<p>In order for all points in <strong>Q<\/strong> to be inside the rectangle <em><strong>(W,H)<\/strong><\/em> where <strong>W<\/strong> is the width along <strong>X<\/strong> axis and <strong>H<\/strong> is the height along <strong>Y<\/strong> axis, the following must be held for all points:<\/p>\n<p>[\/et_pb_text][et_pb_image align=&#8221;center&#8221; width=&#8221;75%&#8221; src=&#8221;https:\/\/www.parametriczoo.com\/wp-content\/uploads\/2020\/07\/image004.png&#8221; _builder_version=&#8221;3.22.7&#8243;][\/et_pb_image][et_pb_text _builder_version=&#8221;3.22.7&#8243;]<\/p>\n<p>In above <em><strong>q\u2093<\/strong><\/em> and<em><strong> q\u1d67<\/strong><\/em> are the<strong> X<\/strong> and <strong>Y<\/strong> coordinates of the point <em><strong>q<\/strong><\/em>. This is shown in the images below.<\/p>\n<p>The left image shows the convex hull P before transformation and in the right image you find the set <em><strong>Q<\/strong><\/em> after transformation in which all points are within the rectangle<em><strong> (W,H)<\/strong><\/em>:<\/p>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][et_pb_row _builder_version=&#8221;3.22.7&#8243;][et_pb_column type=&#8221;1_2&#8243; _builder_version=&#8221;3.22.7&#8243;][et_pb_image src=&#8221;https:\/\/www.parametriczoo.com\/wp-content\/uploads\/2020\/07\/before.png&#8221; _builder_version=&#8221;3.22.7&#8243;][\/et_pb_image][\/et_pb_column][et_pb_column type=&#8221;1_2&#8243; _builder_version=&#8221;3.22.7&#8243;][et_pb_image src=&#8221;https:\/\/www.parametriczoo.com\/wp-content\/uploads\/2020\/07\/after-transformation.png&#8221; _builder_version=&#8221;3.22.7&#8243;][\/et_pb_image][\/et_pb_column][\/et_pb_row][et_pb_row _builder_version=&#8221;3.22.7&#8243;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;3.22.7&#8243;][et_pb_text _builder_version=&#8221;3.22.7&#8243;]<\/p>\n<p>Now we write the transformation <em><strong>A<\/strong><\/em> as product of its two component <strong>T\u2093,\u1d67<\/strong> for translation and <strong>R\u1d63<\/strong> for rotation . Note that <strong>T<\/strong> is a function of <em><strong>x<\/strong> <\/em>and <em><strong>y<\/strong><\/em> and <em><strong>R<\/strong><\/em> is a function of <em><strong>r<\/strong><\/em>, therefore we use the subscripts<em><strong> x,y<\/strong><\/em> and <em><strong>r<\/strong><\/em> to indicate that matrices<strong> T<\/strong> and <strong>R<\/strong> are depending on these variables.&nbsp;&nbsp;<\/p>\n<p>[\/et_pb_text][et_pb_image align=&#8221;center&#8221; width=&#8221;86%&#8221; src=&#8221;https:\/\/www.parametriczoo.com\/wp-content\/uploads\/2020\/07\/image005-1.png&#8221; _builder_version=&#8221;3.22.7&#8243;][\/et_pb_image][et_pb_text _builder_version=&#8221;3.22.7&#8243;]<\/p>\n<p>We find the minimum rectangle along <strong>X<\/strong> and <strong>Y<\/strong> axis which contains all the points in <strong>Q<\/strong>. This can be achieved by creating two sets of real numbers from <em><strong>x<\/strong><\/em> and <em><strong>y<\/strong><\/em> components of the points in set <em><strong>Q<\/strong><\/em>.&nbsp;&nbsp;<\/p>\n<p>[\/et_pb_text][et_pb_image align=&#8221;center&#8221; width=&#8221;80%&#8221; src=&#8221;https:\/\/www.parametriczoo.com\/wp-content\/uploads\/2020\/07\/image007-1.png&#8221; _builder_version=&#8221;3.22.7&#8243;][\/et_pb_image][et_pb_image align=&#8221;center&#8221; width=&#8221;80%&#8221; src=&#8221;https:\/\/www.parametriczoo.com\/wp-content\/uploads\/2020\/07\/image009-1.png&#8221; _builder_version=&#8221;3.22.7&#8243;][\/et_pb_image][et_pb_text _builder_version=&#8221;3.22.7&#8243;]<\/p>\n<p>The width of the min-rectangle is the difference between min and max in the set <strong>Q\u2081<\/strong>&nbsp;and in the same way the height of the min-rectangle could be found in set <strong>Q\u2082<\/strong>.&nbsp;<\/p>\n<p>[\/et_pb_text][et_pb_image align=&#8221;center&#8221; width=&#8221;80%&#8221; src=&#8221;https:\/\/www.parametriczoo.com\/wp-content\/uploads\/2020\/07\/image011-1.png&#8221; _builder_version=&#8221;3.22.7&#8243;][\/et_pb_image][et_pb_image align=&#8221;center&#8221; width=&#8221;80%&#8221; src=&#8221;https:\/\/www.parametriczoo.com\/wp-content\/uploads\/2020\/07\/image013-1.png&#8221; _builder_version=&#8221;3.22.7&#8243;][\/et_pb_image][et_pb_text _builder_version=&#8221;3.22.7&#8243;]<\/p>\n<p>Notice that the function <strong>\u0394(r)<\/strong> is independent from the <em><strong>x<\/strong> <\/em>and <em><strong>y<\/strong><\/em> variables.This is quiet obvious because the translation has no effect on the distance between the min and max point, in other words the displacement <strong>T<\/strong> moved the min point with the same amount and in the same direction as the max point , therefore it will cancel out in equation <strong>(5-1)<\/strong> and <strong>(5-2)<\/strong>.<\/p>\n<p>Below image demonstrate the function<strong>&nbsp;\u0394\u2093(r)&nbsp;<\/strong> and&nbsp;<strong>\u0394\u1d67(r)<\/strong> :<span style=\"font-size: 14px;\">&nbsp;<\/span><\/p>\n<p>[\/et_pb_text][et_pb_image align=&#8221;center&#8221; width=&#8221;53%&#8221; src=&#8221;https:\/\/www.parametriczoo.com\/wp-content\/uploads\/2020\/07\/min-rectangle.png&#8221; _builder_version=&#8221;3.22.7&#8243;][\/et_pb_image][et_pb_text _builder_version=&#8221;3.22.7&#8243;]<\/p>\n<p>The aim is find such <strong>r<\/strong> that the rectangle <strong>(&nbsp;\u0394\u2093(r) ,&nbsp;\u0394\u1d67(r) )<\/strong> as such that it fits inside the given rectangle <strong>(W,H)<\/strong>&nbsp;, hence we can write :<\/p>\n<p>[\/et_pb_text][et_pb_image align=&#8221;center&#8221; width=&#8221;69%&#8221; src=&#8221;https:\/\/www.parametriczoo.com\/wp-content\/uploads\/2020\/07\/image019.png&#8221; _builder_version=&#8221;3.22.7&#8243;][\/et_pb_image][et_pb_image align=&#8221;center&#8221; width=&#8221;69%&#8221; src=&#8221;https:\/\/www.parametriczoo.com\/wp-content\/uploads\/2020\/07\/image021.png&#8221; _builder_version=&#8221;3.22.7&#8243;][\/et_pb_image][et_pb_text _builder_version=&#8221;3.22.7&#8243;]<\/p>\n<p>\u2080This is a non-linear system of inequalities which can be solved by minimizing both <em><strong>w(r)<\/strong><\/em> and <em><strong>h(r)<\/strong><\/em> till both inequalities are satisfied. Looking at equations 5-1 and 5-2 it is also clear that the problem is non-differentiable.&nbsp; The points that function are not differentiable is actually the points where one of the edges of convex hull <strong>P<\/strong> is aligned with either<strong> X<\/strong> or <strong>Y<\/strong> axis. To overcome this problem we must divide the domain of the function into the intervals which the bounding rectangle moves smoothly. This can be done by subdividing the domain&nbsp;at angles between one edge to the other. Note that the domain for <em><strong>r<\/strong><\/em> does not have to be <em><strong>[0,2<span class=\"texhtml mvar\">\u03c0<\/span>&nbsp;]<\/strong><\/em>. this is because rotating the poly-line<em><strong> P<\/strong><\/em> by 90 degree will swap the values of&nbsp;<em><strong>w(r)<\/strong> <\/em>and <em><strong>h(r)<\/strong><\/em>&nbsp;, therefore we can limit our search safely to the domain&nbsp;<em><strong>[0,<span class=\"texhtml mvar\">\u03c0<\/span>]<\/strong><\/em> .&nbsp;<\/p>\n<p>In the future posts I propose an algorithm for solving the inequalities (6) and (7) and dividing the problem to a series of sub-domains where both functions are differentiable. Till then stay tuned&#8230;.&nbsp;<\/p>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][\/et_pb_section]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A simple problem : Fit a flat set of points on XY plane into a given rectangle. Or in other words place the given rectangle around the set of points which contains all the points. In the same time determine if the problem has a solution or not? In this video I used Rhino+Grasshopper&#8230;. Note [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1024,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":""},"categories":[60,46],"tags":[61,62],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Fit an arbitrary set of points into a given rectangle. - Parametric Zoo<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.parametriczoo.com\/index.php\/2020\/07\/19\/fit-an-arbitrary-polyline-into-a-given-rectangle\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Fit an arbitrary set of points into a given rectangle. - Parametric Zoo\" \/>\n<meta property=\"og:description\" content=\"A simple problem : Fit a flat set of points on XY plane into a given rectangle. Or in other words place the given rectangle around the set of points which contains all the points. In the same time determine if the problem has a solution or not? In this video I used Rhino+Grasshopper.... Note [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.parametriczoo.com\/index.php\/2020\/07\/19\/fit-an-arbitrary-polyline-into-a-given-rectangle\/\" \/>\n<meta property=\"og:site_name\" content=\"Parametric Zoo\" \/>\n<meta property=\"article:published_time\" content=\"2020-07-19T20:00:16+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-07-19T20:06:21+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.parametriczoo.com\/wp-content\/uploads\/2020\/07\/result-2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"638\" \/>\n\t<meta property=\"og:image:height\" content=\"735\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"PARA\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"PARA\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.parametriczoo.com\/#website\",\"url\":\"https:\/\/www.parametriczoo.com\/\",\"name\":\"Parametric Zoo\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.parametriczoo.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.parametriczoo.com\/index.php\/2020\/07\/19\/fit-an-arbitrary-polyline-into-a-given-rectangle\/#primaryimage\",\"url\":\"https:\/\/www.parametriczoo.com\/wp-content\/uploads\/2020\/07\/result-2.png\",\"contentUrl\":\"https:\/\/www.parametriczoo.com\/wp-content\/uploads\/2020\/07\/result-2.png\",\"width\":638,\"height\":735},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.parametriczoo.com\/index.php\/2020\/07\/19\/fit-an-arbitrary-polyline-into-a-given-rectangle\/\",\"url\":\"https:\/\/www.parametriczoo.com\/index.php\/2020\/07\/19\/fit-an-arbitrary-polyline-into-a-given-rectangle\/\",\"name\":\"Fit an arbitrary set of points into a given rectangle. - Parametric Zoo\",\"isPartOf\":{\"@id\":\"https:\/\/www.parametriczoo.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.parametriczoo.com\/index.php\/2020\/07\/19\/fit-an-arbitrary-polyline-into-a-given-rectangle\/#primaryimage\"},\"datePublished\":\"2020-07-19T20:00:16+00:00\",\"dateModified\":\"2020-07-19T20:06:21+00:00\",\"author\":{\"@id\":\"https:\/\/www.parametriczoo.com\/#\/schema\/person\/0368c6eb8bfe3a003504793be2a2e0e3\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.parametriczoo.com\/index.php\/2020\/07\/19\/fit-an-arbitrary-polyline-into-a-given-rectangle\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.parametriczoo.com\/index.php\/2020\/07\/19\/fit-an-arbitrary-polyline-into-a-given-rectangle\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.parametriczoo.com\/index.php\/2020\/07\/19\/fit-an-arbitrary-polyline-into-a-given-rectangle\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.parametriczoo.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Fit an arbitrary set of points into a given rectangle.\"}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.parametriczoo.com\/#\/schema\/person\/0368c6eb8bfe3a003504793be2a2e0e3\",\"name\":\"PARA\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.parametriczoo.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/2b2ff0ff40493545df12d0b31a504675?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/2b2ff0ff40493545df12d0b31a504675?s=96&d=mm&r=g\",\"caption\":\"PARA\"},\"url\":\"https:\/\/www.parametriczoo.com\/index.php\/author\/para\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Fit an arbitrary set of points into a given rectangle. - Parametric Zoo","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.parametriczoo.com\/index.php\/2020\/07\/19\/fit-an-arbitrary-polyline-into-a-given-rectangle\/","og_locale":"en_US","og_type":"article","og_title":"Fit an arbitrary set of points into a given rectangle. - Parametric Zoo","og_description":"A simple problem : Fit a flat set of points on XY plane into a given rectangle. Or in other words place the given rectangle around the set of points which contains all the points. In the same time determine if the problem has a solution or not? In this video I used Rhino+Grasshopper.... Note [&hellip;]","og_url":"https:\/\/www.parametriczoo.com\/index.php\/2020\/07\/19\/fit-an-arbitrary-polyline-into-a-given-rectangle\/","og_site_name":"Parametric Zoo","article_published_time":"2020-07-19T20:00:16+00:00","article_modified_time":"2020-07-19T20:06:21+00:00","og_image":[{"width":638,"height":735,"url":"https:\/\/www.parametriczoo.com\/wp-content\/uploads\/2020\/07\/result-2.png","type":"image\/png"}],"author":"PARA","twitter_card":"summary_large_image","twitter_misc":{"Written by":"PARA","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebSite","@id":"https:\/\/www.parametriczoo.com\/#website","url":"https:\/\/www.parametriczoo.com\/","name":"Parametric Zoo","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.parametriczoo.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.parametriczoo.com\/index.php\/2020\/07\/19\/fit-an-arbitrary-polyline-into-a-given-rectangle\/#primaryimage","url":"https:\/\/www.parametriczoo.com\/wp-content\/uploads\/2020\/07\/result-2.png","contentUrl":"https:\/\/www.parametriczoo.com\/wp-content\/uploads\/2020\/07\/result-2.png","width":638,"height":735},{"@type":"WebPage","@id":"https:\/\/www.parametriczoo.com\/index.php\/2020\/07\/19\/fit-an-arbitrary-polyline-into-a-given-rectangle\/","url":"https:\/\/www.parametriczoo.com\/index.php\/2020\/07\/19\/fit-an-arbitrary-polyline-into-a-given-rectangle\/","name":"Fit an arbitrary set of points into a given rectangle. - Parametric Zoo","isPartOf":{"@id":"https:\/\/www.parametriczoo.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.parametriczoo.com\/index.php\/2020\/07\/19\/fit-an-arbitrary-polyline-into-a-given-rectangle\/#primaryimage"},"datePublished":"2020-07-19T20:00:16+00:00","dateModified":"2020-07-19T20:06:21+00:00","author":{"@id":"https:\/\/www.parametriczoo.com\/#\/schema\/person\/0368c6eb8bfe3a003504793be2a2e0e3"},"breadcrumb":{"@id":"https:\/\/www.parametriczoo.com\/index.php\/2020\/07\/19\/fit-an-arbitrary-polyline-into-a-given-rectangle\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.parametriczoo.com\/index.php\/2020\/07\/19\/fit-an-arbitrary-polyline-into-a-given-rectangle\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.parametriczoo.com\/index.php\/2020\/07\/19\/fit-an-arbitrary-polyline-into-a-given-rectangle\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.parametriczoo.com\/"},{"@type":"ListItem","position":2,"name":"Fit an arbitrary set of points into a given rectangle."}]},{"@type":"Person","@id":"https:\/\/www.parametriczoo.com\/#\/schema\/person\/0368c6eb8bfe3a003504793be2a2e0e3","name":"PARA","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.parametriczoo.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/2b2ff0ff40493545df12d0b31a504675?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2b2ff0ff40493545df12d0b31a504675?s=96&d=mm&r=g","caption":"PARA"},"url":"https:\/\/www.parametriczoo.com\/index.php\/author\/para\/"}]}},"jetpack_featured_media_url":"https:\/\/www.parametriczoo.com\/wp-content\/uploads\/2020\/07\/result-2.png","_links":{"self":[{"href":"https:\/\/www.parametriczoo.com\/index.php\/wp-json\/wp\/v2\/posts\/973"}],"collection":[{"href":"https:\/\/www.parametriczoo.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.parametriczoo.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.parametriczoo.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.parametriczoo.com\/index.php\/wp-json\/wp\/v2\/comments?post=973"}],"version-history":[{"count":0,"href":"https:\/\/www.parametriczoo.com\/index.php\/wp-json\/wp\/v2\/posts\/973\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.parametriczoo.com\/index.php\/wp-json\/wp\/v2\/media\/1024"}],"wp:attachment":[{"href":"https:\/\/www.parametriczoo.com\/index.php\/wp-json\/wp\/v2\/media?parent=973"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.parametriczoo.com\/index.php\/wp-json\/wp\/v2\/categories?post=973"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.parametriczoo.com\/index.php\/wp-json\/wp\/v2\/tags?post=973"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}