{"id":572,"date":"2016-11-12T18:00:47","date_gmt":"2016-11-12T17:00:47","guid":{"rendered":"http:\/\/piflik.de\/?p=572"},"modified":"2016-11-09T00:12:03","modified_gmt":"2016-11-08T23:12:03","slug":"utilities-bezier","status":"publish","type":"post","link":"http:\/\/piflik.de\/?p=572","title":{"rendered":"Utilities: Bezier"},"content":{"rendered":"<p>This time only a quicky, but it will be used in a later post. A small class to calculate a Bezier curve interpolation in 3D or 2D. Nothing special about it.<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">public class Bezier {\r\n\r\n\tpublic static Vector3 Interpolate(Vector3 start, Vector3 end, Vector3 controlPointA, Vector3 controlPointB, float t) {\r\n\t\tfloat tInv = 1 - t;\r\n\t\tfloat tSqr = t * t;\r\n\t\tfloat tInvSrq = tInv * tInv;\r\n\r\n\t\treturn tInv * tInvSrq * start + 3 * t * tInvSrq * controlPointA + 3 * tInv * tSqr * controlPointB + t * tSqr * end;\r\n\t}\r\n\r\n\tpublic static Vector2 Interpolate(Vector2 start, Vector2 end, Vector2 controlPointA, Vector2 controlPointB, float t) {\r\n\t\tfloat tInv = 1 - t;\r\n\t\tfloat tSqr = t * t;\r\n\t\tfloat tInvSqr = tInv * tInv;\r\n\r\n\t\treturn tInv * tInvSqr * start + 3 * t * tInvSqr * controlPointA + 3 * tInv * tSqr * controlPointB + t * tSqr * end;\r\n\t}\r\n\r\n\tpublic static float Length(Vector3 start, Vector3 end, Vector3 controlPointA, Vector3 controlPointB, int steps) {\r\n\t\tfloat length = 0;\r\n\r\n\t\tVector3 fst = start;\r\n\t\tfor (int i = 1; i &lt;= steps; ++i) {\r\n\t\t\tVector3 snd = Interpolate(start, end, controlPointA, controlPointB, (float) i \/ steps);\r\n\t\t\tlength += (snd - fst).magnitude;\r\n\r\n\t\t\tfst = snd;\r\n\t\t}\r\n\r\n\t\treturn length;\r\n\t}\r\n\r\n\tpublic static float Length(Vector2 start, Vector2 end, Vector2 controlPointA, Vector2 controlPointB, int steps) {\r\n\t\tfloat length = 0;\r\n\r\n\t\tVector2 fst = start;\r\n\t\tfor (int i = 1; i &lt;= steps; ++i) {\r\n\t\t\tVector2 snd = Interpolate(start, end, controlPointA, controlPointB, (float) i \/ steps);\r\n\t\t\tlength += (snd - fst).magnitude;\r\n\r\n\t\t\tfst = snd;\r\n\t\t}\r\n\r\n\t\treturn length;\r\n\t}\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>This time only a quicky, but it will be used in a later post. A small class to calculate a Bezier curve interpolation in 3D or 2D. Nothing special about it.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[13,12],"tags":[],"_links":{"self":[{"href":"http:\/\/piflik.de\/index.php?rest_route=\/wp\/v2\/posts\/572"}],"collection":[{"href":"http:\/\/piflik.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/piflik.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/piflik.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/piflik.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=572"}],"version-history":[{"count":4,"href":"http:\/\/piflik.de\/index.php?rest_route=\/wp\/v2\/posts\/572\/revisions"}],"predecessor-version":[{"id":584,"href":"http:\/\/piflik.de\/index.php?rest_route=\/wp\/v2\/posts\/572\/revisions\/584"}],"wp:attachment":[{"href":"http:\/\/piflik.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=572"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/piflik.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=572"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/piflik.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=572"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}