{"id":1107,"date":"2018-01-16T23:37:53","date_gmt":"2018-01-16T14:37:53","guid":{"rendered":"http:\/\/naochang.me\/?p=1107"},"modified":"2018-01-16T23:44:38","modified_gmt":"2018-01-16T14:44:38","slug":"b-%e3%82%b9%e3%83%97%e3%83%a9%e3%82%a4%e3%83%b3%e6%9b%b2%e7%b7%9a-b-spline-curve","status":"publish","type":"post","link":"https:\/\/stacstar.jp\/blog\/?p=1107","title":{"rendered":"B-\u30b9\u30d7\u30e9\u30a4\u30f3\u66f2\u7dda (B-spline Curve)"},"content":{"rendered":"<p><script async src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/mathjax\/2.7.0\/MathJax.js?config=TeX-AMS_CHTML\"><\/script><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/blog\/wp-content\/uploads\/curve_bspline.gif\" alt=\"\" width=\"600\" height=\"275\" class=\"border_light aligncenter size-full wp-image-1095\" \/><br \/>\n<a href=\"https:\/\/github.com\/naochang\/Curve\" rel=\"noopener\" target=\"_blank\">github | naochang | Curve<\/a><\/p>\n<p>B-\u30b9\u30d7\u30e9\u30a4\u30f3\u66f2\u7dda\u306f\u30d9\u30b8\u30a7\u66f2\u7dda\u3068\u9055\u3044\u3001\u70b9\u3092\u901a\u3089\u306a\u3044\u3002\u305d\u306e\u4ee3\u308f\u308a\u66f2\u7dda\u540c\u58eb\u306e\u66f2\u7387(\u66f2\u304c\u308a\u5177\u5408)\u304c\u9023\u7d9a\u3057\u3066\u3044\u3066\u6ed1\u3089\u304b\u306a\u66f2\u7dda\u3068\u306a\u308b\u3002\u66f2\u7dda\u306f\u57fa\u5e95\u95a2\u6570\u3092\u91cd\u306d\u5408\u308f\u305b\u3066\u8868\u73fe\u3055\u308c\u3001\u91cd\u306d\u5408\u308f\u305b\u308b\u5177\u5408\u3092\u30ce\u30c3\u30c8\u3068\u3044\u3046\u6570\u5024\u306e\u96c6\u5408\u3067\u8868\u3059\u3002\u30ce\u30c3\u30c8\u306e\u6570\u306f\u5236\u5fa1\u70b9\u306e\u6570+\u6b21\u6570+1\u3068\u306a\u308b\u3002(\u6b21\u6570+1\u3092\u968e\u6570(order)\u3068\u547c\u3076)<br \/>\n\u30ce\u30c3\u30c8\u306e\u5024\u306f\u7d76\u5bfe\u7684\u306a\u6570\u5024\u3067\u306f\u306a\u304f\u3001\u8907\u6570\u306e\u57fa\u5e95\u95a2\u6570\u3092\u91cd\u306d\u5408\u305b\u308b\u796d\u306e\u76f8\u5bfe\u7684\u306a\u6570\u5024\u306e\u5217\u3067\u3042\u308a\u3001B-\u30b9\u30d7\u30e9\u30a4\u30f3\u66f2\u7dda\u3067\u306f\u901a\u5e38\u30ce\u30c3\u30c8\u5024\u30920\u304b\u3089\u306f\u3058\u3081\u30011\u305a\u3064\u5897\u3084\u3057\u3066\u7b49\u9593\u9694\u306b\u3059\u308b\u3002(uniform:\u4e00\u69d8)<br \/>\n\u5236\u5fa1\u70b96\u3067\u6b21\u6570\u304c3\u306e\u5834\u5408\u306f10\u500b\u306e\u30ce\u30c3\u30c8\u5024\u304c\u3042\u308a<br \/>\n\\([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\\)<br \/>\n\u3068\u306a\u308b\u3002<\/p>\n<p><!--more--><\/p>\n<p>\u30ce\u30c3\u30c8\u5024\u306e\u6761\u4ef6\u306f \\(knot[n-1] \\leq knot[n] < knot[n+1]\\) \u3068\u306a\u308a\u540c\u3058\u6570\u5024\u3092\u6b21\u6570+1\u56de\u3060\u3051\u91cd\u306d\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3002\u6b21\u6570+1\u3060\u3051\u91cd\u306d\u308b\u3068\u305d\u306e\u70b9\u3092\u901a\u308b\u3053\u3068\u3068\u306a\u308a\u59cb\u70b9\u3068\u7d42\u70b9\u3092\u901a\u308b\u5834\u5408\u3092\u958b\u4e00\u69d8(open-uniform)\u3068\u547c\u3076\u3002\u5148\u306e\u6761\u4ef6\u3067\u306f<br \/>\n\\([0, 0, 0, 0, 1, 2, 3, 3, 3, 3]\\)<br \/>\n\u3068\u306a\u308b\u3002<\/p>\n<p>\u3053\u3061\u3089\u304c\u4e00\u69d8\u306e\u30b0\u30e9\u30d5\u3002<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/blog\/wp-content\/uploads\/curve_bspline_uniform_graph.png\" alt=\"\" width=\"491\" height=\"295\" class=\"border aligncenter size-full wp-image-1226\" srcset=\"https:\/\/stacstar.jp\/blog\/.\/wp-content\/uploads\/curve_bspline_uniform_graph.png 491w, https:\/\/stacstar.jp\/blog\/.\/wp-content\/uploads\/curve_bspline_uniform_graph-300x180.png 300w\" sizes=\"auto, (max-width: 491px) 100vw, 491px\" \/><\/p>\n<p>\u3053\u3061\u3089\u304c\u958b\u4e00\u69d8\u306e\u30b0\u30e9\u30d5\u3002\u59cb\u70b9\u3068\u7d42\u70b9\u3092\u901a\u308b\u306e\u3067\u6700\u521d\u306e\u65b9\u306e\u30ce\u30c3\u30c8\u3068\u6700\u5f8c\u306e\u65b9\u306e\u30ce\u30c3\u30c8\u304c\u91cd\u306a\u3063\u3066\u3044\u308b\u72b6\u614b\u3002<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/blog\/wp-content\/uploads\/curve_bspline_openuniform_graph.png\" alt=\"\" width=\"491\" height=\"295\" class=\"border aligncenter size-full wp-image-1225\" srcset=\"https:\/\/stacstar.jp\/blog\/.\/wp-content\/uploads\/curve_bspline_openuniform_graph.png 491w, https:\/\/stacstar.jp\/blog\/.\/wp-content\/uploads\/curve_bspline_openuniform_graph-300x180.png 300w\" sizes=\"auto, (max-width: 491px) 100vw, 491px\" \/><\/p>\n<p>\u5f15\u7528) <cite><a href=\"http:\/\/geometrie.foretnik.net\/files\/NURBS-en.swf\" target=\"_blank\">http:\/\/geometrie.foretnik.net\/files\/NURBS-en.swf<\/a><br \/>\n\uff08\u4e0a\u56f3\u3067\u306f\u30ce\u30c3\u30c8\u304c1\u305a\u3064\u306e\u5897\u52a0\u3067\u306f\u306a\u304f\u30010\u301c1\u306e\u9593\u3067\u7b49\u9593\u9694\u306b\u914d\u7f6e\u3057\u3066\u3044\u308b\u304c\u3001\u610f\u5473\u306f\u540c\u3058\uff09<\/p>\n<p>\u66f2\u7dda\u306e\u5b9a\u7fa9\u306f\u5236\u5fa1\u70b9\u306e\u6570\u3092\\(m\\)\u3001\u6b21\u6570\u3092\\(n\\)\u3001B-\u30b9\u30d7\u30e9\u30a4\u30f3\u57fa\u5e95\u95a2\u6570\u3092\\(b_i^n(t)\\)\u3068\u3059\u308b\u3068<br \/>\n\\begin{align}<br \/>\nP(t) = \\sum_{i=0}^{m-1}b_i^n(t)P_i<br \/>\n\\end{align}<\/p>\n<p>B\u30b9\u30d7\u30e9\u30a4\u30f3\u57fa\u5e95\u95a2\u6570\u306f<br \/>\n\\begin{align}<br \/>\nb_j^0(t) =&#038;<br \/>\n  \\left\\{<br \/>\n    \\begin{array}{ll}<br \/>\n      &#038; 1 &#038; (t_j \\leq t < t_{j+1})\\\\\n      &#038; 0 &#038; otherwise\n    \\end{array}\n  \\right.\\\\\nb_j^n(t) =&#038; \\frac{t - t_j}{t_{j+n} - t_j}b_j^{n-1}(t) + \\frac{t_{j+n+1}-t}{t_{j+n+1}-t_{j+1}}b_{j+1}^{n-1}(t)\n\\end{align}\n(\u5206\u6bcd\u304c0\u3068\u306a\u308b\u5834\u5408\u306b\u306f\u305d\u306e\u9805\u30920\u3068\u3059\u308b)\n\u307e\u305f\u3001\u30ce\u30c3\u30c8\u306e\u7bc4\u56f2\u306f\n\\begin{align}\nt_n \\leq t \\leq t_{m}\n\\end{align}\n\u3068\u306a\u308b\u3002\n\n\u3053\u308c\u3092<a href=\"https:\/\/www.slideshare.net\/mitsurumuramatsu\/sfc-design-theory-2012-613-13392783\" rel=\"noopener\" target=\"_blank\">\u3053\u3061\u3089\u306e\u8cc7\u6599<\/a>\u306b\u3042\u308b<a href=\"https:\/\/www.openprocessing.org\/sketch\/64344\" rel=\"noopener\" target=\"_blank\">\u3053\u3061\u3089\u306e\u30d7\u30ed\u30b0\u30e9\u30e0<\/a>\u3092\u53c2\u8003\u306b\u5b9f\u88c5\u3059\u308c\u3070OK\u3002<\/p>\n<p>\u30d9\u30b8\u30a7\u66f2\u7dda\u540c\u69d8\u3001\u3088\u304f\u4f7f\u30462\u6b21\u30683\u6b21\u3092\u3042\u3089\u304b\u3058\u3081\u8a08\u7b97\u3057\u3066\u304a\u304f\u3068\u65e9\u305d\u3046\u306a\u306e\u3067\u3002<br \/>\n2\u6b21\u306e\u5834\u5408\u306f\u307e\u305a\u30ce\u30c3\u30c8\u5217\u304c<br \/>\n\\begin{align}<br \/>\n[0, 1, 2, 3, 4, 5]<br \/>\n\\end{align}<\/p>\n<p>\u3053\u308c\u3092\u5f0f\u304c\u30b7\u30f3\u30d7\u30eb\u306b\u306a\u308b\u3088\u3046\u306b\u6b21\u6570\u5206\u3060\u3051\u30de\u30a4\u30ca\u30b9\u3055\u305b\u3066\u304a\u304f\u3068<\/p>\n<p>\\begin{align}<br \/>\n[-2, -1, 0, 1, 2, 3]<br \/>\n\\end{align}<\/p>\n<p>\u305d\u3057\u3066\u66f2\u7dda\u306e\u5f0f\u304c<\/p>\n<p>\\begin{align}<br \/>\nP(t) &#038;= \\sum_{i=0}^2b_i^2(t)P_i\\\\<br \/>\n&#038;= b_0^2(t)P_0 + b_1^2(t)P_1 + b_2^2(t)P_2<br \/>\n\\end{align}<\/p>\n<p>\u3068\u306a\u308b\u306e\u3067\u3001\\(b_0^2, b_1^2, b_2^2\\)\u304c\u5206\u304b\u308c\u3070OK\u3002<br \/>\n\u307e\u305f\u30ce\u30c3\u30c8\u306e\u7bc4\u56f2\u306f(\\(t_2 \\leq t \\leq t_3 = 0 \\leq t \\leq 1\\))\u3068\u306a\u308b\u306e\u3067\u3001\u8a08\u7b97\u3059\u308b\u306e\u306f\u4e0b\u8a18\u306e\u8d64\u3044\u7bc4\u56f2\u3067\u3001\u305d\u308c\u4ee5\u5916\u306f0\u3002<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/blog\/wp-content\/uploads\/curve_b_spline_triangle.png\" alt=\"\" width=\"250\" height=\"250\" class=\"border aligncenter size-full wp-image-1392\" \/><\/p>\n<p>\u307e\u305a\u306f\\(b_2^0\\)\u306f1\u306b\u306a\u308b\u306e\u3067\u3001\u6b21\u306b\\(b_2^1\\)\u3092\u6c42\u3081\u308b\u3068<br \/>\n\\begin{align}<br \/>\nb_2^1 &#038;= \\frac{t-t_2}{t_3-t_2}b_2^0(t) + \\frac{t_4-t}{t_4-t_3}b_3^0(t)\\\\<br \/>\n&#038;= (t-t_2)1 + (t_4-t)0\\\\<br \/>\n&#038; = t<br \/>\n\\end{align}<\/p>\n<p>\u7d9a\u3044\u3066\\(b_1^1\\)\u3092\u6c42\u3081\u308b\u3068<br \/>\n\\begin{align}<br \/>\nb_1^1 &#038;= \\frac{t-t_1}{t_2-t_1}b_1^0(t) + \\frac{t_3-t}{t_3-t_2}b_2^0(t)\\\\<br \/>\n&#038;= (t-t_1)0 + (t_3-t)1\\\\<br \/>\n&#038;= 1 &#8211; t<br \/>\n\\end{align}<\/p>\n<p>\u5f15\u304d\u7d9a\u304d\\(b_2^2\\)<br \/>\n\\begin{align}<br \/>\nb_2^2 &#038;= \\frac{t-t_2}{t_4-t_2}b_2^1(t) + \\frac{t_5-t}{t_5-t_3}b_3^1(t)\\\\<br \/>\n&#038;= \\frac{t-t_2}{2}(t) + \\frac{t_5-t}{2}0\\\\<br \/>\n&#038;= \\frac{t^2}{2}<br \/>\n\\end{align}<\/p>\n<p>\\(b_1^2\\)\u306f<br \/>\n\\begin{align}<br \/>\nb_1^2 &#038;= \\frac{t-t_1}{t_3-t_1}b_1^1(t) + \\frac{t_4-t}{t_4-t_2}b_2^1(t)\\\\<br \/>\n&#038;= \\frac{t-t_1}{2}(1 &#8211; t) + \\frac{t_4-t}{2}(t)\\\\<br \/>\n&#038;= \\frac{(t+1)(-t+1)}{2} + \\frac{(2-t)t}{2}\\\\<br \/>\n&#038;= \\frac{-t^2+1}{2} + \\frac{-t^2+2t}{2}\\\\<br \/>\n&#038;= \\frac{-2t^2+2t+1}{2}<br \/>\n\\end{align}<\/p>\n<p>\u6700\u5f8c\u306b\\(b_0^2\\)<\/p>\n<p>\\begin{align}<br \/>\nb_0^2 &#038;= \\frac{t-t_0}{t_2-t_0}b_0^1(t) + \\frac{t_3-t}{t_3-t_1}b_1^1(t)\\\\<br \/>\n&#038;= \\frac{t-t_0}{2}0 + \\frac{t_3-t}{2}(1-t)\\\\<br \/>\n&#038;= \\frac{(1-t)(1-t)}{2}\\\\<br \/>\n&#038;= \\frac{t^2-2t+1}{2}<br \/>\n\\end{align}<\/p>\n<p>\u3053\u308c\u30672\u6b21\u306e\u66f2\u7dda\u306e\u5f0f\u304c\u4e0b\u8a18\u306e\u3088\u3046\u306b\u306a\u308b\u3002<\/p>\n<p>\\begin{align}<br \/>\nP(t) &#038;= b_0^2(t)P_0 + b_1^2(t)P_1 + b_2^2(t)P_2\\\\<br \/>\n&#038;= \\frac{1}2(t^2-2t+1)P(0) + \\frac{1}{2}(-2t^2+2t+1)P(1)+\\frac{1}{2}t^2P(2)<br \/>\n\\end{align}<\/p>\n<p>\u540c\u3058\u3088\u3046\u306b3\u6b21\u3092\u5c55\u958b\u3059\u308b\u3068\u3001<a href=\"http:\/\/afsoft.jp\/cad\/cad\/028.html\" rel=\"noopener\" target=\"_blank\">\u3053\u3061\u3089<\/a>\u306e\u3088\u3046\u306b\u306a\u308b<\/p>\n<p>3\u6b21<br \/>\n\\begin{align}<br \/>\nP(t) = \\frac{1}{6}(1-t)^3P(0) + (\\frac{1}{2}t^3+t^2+\\frac{2}{3})P(1) + (-\\frac{1}{2}t^3+\\frac{1}{2}t^2+\\frac{1}{2}t+\\frac{1}{6})P(2) + \\frac{1}{6}t^3P(3)<br \/>\n\\end{align}<\/p>\n<p>\u53c2\u8003\uff09<br \/>\n<a href=\"https:\/\/ci.nii.ac.jp\/els\/contentscinii_20171206193127.pdf?id=ART0009956858\" rel=\"noopener\" target=\"_blank\">B\uff0d\u30b9\u30d7\u30e9\u30a4\u30f3\u66f2\u7dda\u306e\u4e00\u8003\u5bdf<\/a><br \/>\n<a href=\"https:\/\/www.slideshare.net\/mitsurumuramatsu\/sfc-design-theory-2012-613-13392783\" rel=\"noopener\" target=\"_blank\">SFC Design theory 2012 6\/20<\/a><br \/>\n<a href=\"https:\/\/www.openprocessing.org\/sketch\/64344\" rel=\"noopener\" target=\"_blank\">Open Processing | N-BSpline<\/a><br \/>\n<a href=\"http:\/\/t-pot.com\/program\/3_bspline\/index.html\" rel=\"noopener\" target=\"_blank\">t-pot | 3\u6b21\u66f2\u7dda | B-Spline\u66f2\u7dda<\/a><br \/>\n<a href=\"http:\/\/afsoft.jp\/cad\/cad\/028.html\" rel=\"noopener\" target=\"_blank\">AFSoft | \uff23\uff21\uff24\u3092\u8003\u3048\u308b\uff1a\u30b9\u30d7\u30e9\u30a4\u30f3(5)<\/a><br \/>\n<a href=\"https:\/\/www.o2-inc.com\/seminar\/technology\/cnt-pulicity-media-report-3dgraph-10.html\" rel=\"noopener\" target=\"_blank\">3\u6b21\u5143\u56f3\u5f62\u51e6\u7406\u6280\u8853\u89e3\u8aac \u7b2c10\u56de\u3000B-Spline\u66f2\u7dda(3)<\/a><br \/>\n<a href=\"http:\/\/geometrie.foretnik.net\/files\/NURBS-cz.swf\" rel=\"noopener\" target=\"_blank\">Architektura, geometrie a v\u00fdpo\u010detn\u00ed technika | NURBSdemo (swf)<\/a><\/p>\n<p><script src=\"http:\/\/gist-it.appspot.com\/github\/naochang\/Curve\/blob\/master\/Assets\/Scripts\/Curve\/BSplineCurve.cs\"><\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>github | naochang | Curve B-\u30b9\u30d7\u30e9\u30a4\u30f3\u66f2\u7dda\u306f\u30d9\u30b8\u30a7\u66f2\u7dda\u3068\u9055\u3044\u3001\u70b9\u3092\u901a\u3089\u306a\u3044\u3002\u305d\u306e\u4ee3\u308f\u308a\u66f2\u7dda\u540c\u58eb\u306e\u66f2\u7387(\u66f2\u304c\u308a\u5177\u5408)\u304c\u9023\u7d9a\u3057\u3066\u3044\u3066\u6ed1\u3089\u304b\u306a\u66f2\u7dda\u3068\u306a\u308b\u3002\u66f2\u7dda\u306f\u57fa\u5e95\u95a2\u6570\u3092\u91cd\u306d\u5408\u308f\u305b\u3066\u8868\u73fe\u3055\u308c\u3001\u91cd\u306d\u5408 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,17,16,2],"tags":[],"class_list":["post-1107","post","type-post","status-publish","format-standard","hentry","category-c","category-curve","category-math","category-unity"],"_links":{"self":[{"href":"https:\/\/stacstar.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1107","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/stacstar.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/stacstar.jp\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/stacstar.jp\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/stacstar.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1107"}],"version-history":[{"count":188,"href":"https:\/\/stacstar.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1107\/revisions"}],"predecessor-version":[{"id":1517,"href":"https:\/\/stacstar.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1107\/revisions\/1517"}],"wp:attachment":[{"href":"https:\/\/stacstar.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1107"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/stacstar.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1107"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/stacstar.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1107"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}