{"data":{"site":{"siteMetadata":{"title":"bauhausify","siteUrl":"https://www.bauhausify.com","subtitle":"美大出身のWEBエンジニアリング奮闘記","descriptionMyself":"\n多摩美術大学<br>プロダクトデザイン専攻卒業 -> <br>GUIデザイン会社勤務 -><br>\n現在フロントエンジニア<br>\n<br>\nMy site -><br>\n<a href=\"http://www.mwrote.com\">www.mwrote.com</a>\n"}},"markdownRemark":{"id":"d5a69a1d-62b7-5a8b-8f18-975dfee3ae96","html":"<p><a href=\"https://codepen.io/mwrote/pen/pozLbvP?defaultTab=result\" target=\"_blank\" rel=\"noopener noreferrer\"><div class=\"embed-codepen\"><iframe\n        height='400'\n        scrolling='no'\n        src='//codepen.io/mwrote/embed/preview/pozLbvP/?height=400&theme-id=light&default-tab=result'\n        frameborder='no'\n        allowtransparency='true'\n        allowfullscreen='true'\n        style='width: 100%;'></iframe></div></a></p>\n<p>今回はp5jsのトレーニングとして、<code class=\"language-text\">arc</code>と簡単なEaseOut関数を使ったコードを作りました。</p>\n<p>このコードの要点のみ解説したいと思います。<br>\n最終的なコードは<a href=\"https://codepen.io/mwrote/pen/pozLbvP\" target=\"_blank_\">Codepen</a>でご確認いただけます。</p>\n<ol>\n<li><a href=\"#arc%E9%96%A2%E6%95%B0%E3%81%A7%E5%86%86%E5%BC%A7%E3%82%92%E6%8F%8F%E3%81%8F\">arc関数で円弧を描く</a></li>\n<li><a href=\"#%E6%8F%8F%E7%94%BB%E3%81%99%E3%82%8B%E5%86%86%E5%BC%A7%E3%81%AE%E5%AE%9A%E7%BE%A9%E3%82%92%E3%80%81%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%A8%E3%81%97%E3%81%A6%E6%A0%BC%E7%B4%8D%E3%81%99%E3%82%8B\">描画する円弧の定義を、オブジェクトとして格納する</a></li>\n<li><a href=\"#%E8%A4%87%E6%95%B0%E7%94%9F%E6%88%90%E3%81%97%E3%81%9F%E3%81%84%E3%81%AE%E3%81%A7%E9%85%8D%E5%88%97%E3%81%AB%E6%A0%BC%E7%B4%8D%E3%81%99%E3%82%8B\">複数生成したいので配列に格納する</a></li>\n<li><a href=\"#Easing%E3%81%A7%E5%8B%95%E3%81%8D%E3%82%92%E3%81%A4%E3%81%91%E3%82%8B\">Easingで動きをつける</a></li>\n<li><a href=\"#draw%E9%96%A2%E6%95%B0%E5%86%85%E3%81%A7%E6%9C%80%E7%B5%82%E7%9A%84%E3%81%AA%E5%86%86%E5%BC%A7%E3%82%92%E6%8F%8F%E3%81%8F\">draw関数内で最終的な円弧を描く</a></li>\n</ol>\n<h2 id=\"arc関数で円弧を描く\"><a href=\"#arc%E9%96%A2%E6%95%B0%E3%81%A7%E5%86%86%E5%BC%A7%E3%82%92%E6%8F%8F%E3%81%8F\" aria-label=\"arc関数で円弧を描く permalink\" class=\"gatsby-remark-autolink-headers-icon\"><svg width=\"22px\" height=\"7px\" viewBox=\"0 0 22 7\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n    <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n        <g id=\"icon-link\" fill=\"#23282D\">\n            <path d=\"M14,1 C13.4477153,1 13,1.31979661 13,1.71428571 L13,5.28571429 C13,5.68020339 13.4477153,6 14,6 L20,6 C20.5522847,6 21,5.68020339 21,5.28571429 L21,1.71428571 C21,1.31979661 20.5522847,1 20,1 L14,1 Z M14,0 L20,0 C21.1045695,0 22,0.696445945 22,1.55555556 L22,5.44444444 C22,6.30355406 21.1045695,7 20,7 L14,7 C12.8954305,7 12,6.30355406 12,5.44444444 L12,1.55555556 C12,0.696445945 12.8954305,0 14,0 Z M12,2 L12,5 L13,5 L13,2 L12,2 Z\" id=\"Combined-Shape\" fill-rule=\"nonzero\"></path>\n            <path d=\"M2,1 C1.44771525,1 1,1.31979661 1,1.71428571 L1,5.28571429 C1,5.68020339 1.44771525,6 2,6 L8,6 C8.55228475,6 9,5.68020339 9,5.28571429 L9,1.71428571 C9,1.31979661 8.55228475,1 8,1 L2,1 Z M2,0 L8,0 C9.1045695,0 10,0.696445945 10,1.55555556 L10,5.44444444 C10,6.30355406 9.1045695,7 8,7 L2,7 C0.8954305,7 0,6.30355406 0,5.44444444 L0,1.55555556 C0,0.696445945 0.8954305,0 2,0 Z M9,2 L9,5 L10,5 L10,2 L9,2 Z\" id=\"Combined-Shape\" fill-rule=\"nonzero\"></path>\n            <rect id=\"Rectangle-2\" x=\"6\" y=\"3\" width=\"10\" height=\"1\"></rect>\n        </g>\n    </g>\n</svg></a>arc関数で円弧を描く</h2>\n<p>一見複雑にみえますが、主な描画関数は<code class=\"language-text\">arc</code>です。</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token function\">noFill</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 塗りつぶしをなくします。</span>\n<span class=\"token function\">stroke</span><span class=\"token punctuation\">(</span>線の色<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token function\">strokeWeight</span><span class=\"token punctuation\">(</span>線の太さ<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token function\">arc</span><span class=\"token punctuation\">(</span>円弧の中心x座標<span class=\"token punctuation\">,</span> 円弧の中心y座標<span class=\"token punctuation\">,</span> 円弧の幅<span class=\"token punctuation\">,</span> 円弧の高さ<span class=\"token punctuation\">,</span> 円弧の開始角度<span class=\"token punctuation\">,</span> 円弧の終了角度<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h2 id=\"描画する円弧の定義をオブジェクトとして格納する\"><a href=\"#%E6%8F%8F%E7%94%BB%E3%81%99%E3%82%8B%E5%86%86%E5%BC%A7%E3%81%AE%E5%AE%9A%E7%BE%A9%E3%82%92%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%A8%E3%81%97%E3%81%A6%E6%A0%BC%E7%B4%8D%E3%81%99%E3%82%8B\" aria-label=\"描画する円弧の定義をオブジェクトとして格納する permalink\" class=\"gatsby-remark-autolink-headers-icon\"><svg width=\"22px\" height=\"7px\" viewBox=\"0 0 22 7\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n    <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n        <g id=\"icon-link\" fill=\"#23282D\">\n            <path d=\"M14,1 C13.4477153,1 13,1.31979661 13,1.71428571 L13,5.28571429 C13,5.68020339 13.4477153,6 14,6 L20,6 C20.5522847,6 21,5.68020339 21,5.28571429 L21,1.71428571 C21,1.31979661 20.5522847,1 20,1 L14,1 Z M14,0 L20,0 C21.1045695,0 22,0.696445945 22,1.55555556 L22,5.44444444 C22,6.30355406 21.1045695,7 20,7 L14,7 C12.8954305,7 12,6.30355406 12,5.44444444 L12,1.55555556 C12,0.696445945 12.8954305,0 14,0 Z M12,2 L12,5 L13,5 L13,2 L12,2 Z\" id=\"Combined-Shape\" fill-rule=\"nonzero\"></path>\n            <path d=\"M2,1 C1.44771525,1 1,1.31979661 1,1.71428571 L1,5.28571429 C1,5.68020339 1.44771525,6 2,6 L8,6 C8.55228475,6 9,5.68020339 9,5.28571429 L9,1.71428571 C9,1.31979661 8.55228475,1 8,1 L2,1 Z M2,0 L8,0 C9.1045695,0 10,0.696445945 10,1.55555556 L10,5.44444444 C10,6.30355406 9.1045695,7 8,7 L2,7 C0.8954305,7 0,6.30355406 0,5.44444444 L0,1.55555556 C0,0.696445945 0.8954305,0 2,0 Z M9,2 L9,5 L10,5 L10,2 L9,2 Z\" id=\"Combined-Shape\" fill-rule=\"nonzero\"></path>\n            <rect id=\"Rectangle-2\" x=\"6\" y=\"3\" width=\"10\" height=\"1\"></rect>\n        </g>\n    </g>\n</svg></a>描画する円弧の定義を、オブジェクトとして格納する</h2>\n<p>円弧の定義の内、動的に変えたい値を1つのオブジェクトに格納します。<br>\n動的に変えたいのは色、太さ、円弧の大きさ、円弧の長さです。<br>\n自動で様々な円弧を生成したいので、値の初期値にrandom関数を使い、オブジェクトを定義します。<br></p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token punctuation\">{</span>\n  <span class=\"token literal-property property\">color</span><span class=\"token operator\">:</span> <span class=\"token function\">color</span><span class=\"token punctuation\">(</span><span class=\"token function\">random</span><span class=\"token punctuation\">(</span><span class=\"token number\">255</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token function\">random</span><span class=\"token punctuation\">(</span><span class=\"token number\">255</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token function\">random</span><span class=\"token punctuation\">(</span><span class=\"token number\">255</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token comment\">// 線の色</span>\n  <span class=\"token literal-property property\">weight</span><span class=\"token operator\">:</span> <span class=\"token function\">random</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token comment\">// 先の太さ</span>\n  <span class=\"token literal-property property\">arcWidth</span><span class=\"token operator\">:</span> <span class=\"token function\">random</span><span class=\"token punctuation\">(</span><span class=\"token number\">50</span><span class=\"token punctuation\">,</span> width<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token comment\">// 円弧の幅と高さ、正円は幅と高さも同じなので幅のみ定義</span>\n  <span class=\"token literal-property property\">startDegree</span><span class=\"token operator\">:</span> <span class=\"token function\">random</span><span class=\"token punctuation\">(</span><span class=\"token number\">360</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token comment\">// 円弧の開始角度</span>\n  <span class=\"token literal-property property\">arcLength</span><span class=\"token operator\">:</span> <span class=\"token function\">radians</span><span class=\"token punctuation\">(</span><span class=\"token function\">random</span><span class=\"token punctuation\">(</span><span class=\"token number\">30</span><span class=\"token punctuation\">,</span> <span class=\"token number\">120</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token comment\">// 円弧の長さを角度で定義、開始角度とると円弧の終了角度になる</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h2 id=\"複数生成したいので配列に格納する\"><a href=\"#%E8%A4%87%E6%95%B0%E7%94%9F%E6%88%90%E3%81%97%E3%81%9F%E3%81%84%E3%81%AE%E3%81%A7%E9%85%8D%E5%88%97%E3%81%AB%E6%A0%BC%E7%B4%8D%E3%81%99%E3%82%8B\" aria-label=\"複数生成したいので配列に格納する permalink\" class=\"gatsby-remark-autolink-headers-icon\"><svg width=\"22px\" height=\"7px\" viewBox=\"0 0 22 7\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n    <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n        <g id=\"icon-link\" fill=\"#23282D\">\n            <path d=\"M14,1 C13.4477153,1 13,1.31979661 13,1.71428571 L13,5.28571429 C13,5.68020339 13.4477153,6 14,6 L20,6 C20.5522847,6 21,5.68020339 21,5.28571429 L21,1.71428571 C21,1.31979661 20.5522847,1 20,1 L14,1 Z M14,0 L20,0 C21.1045695,0 22,0.696445945 22,1.55555556 L22,5.44444444 C22,6.30355406 21.1045695,7 20,7 L14,7 C12.8954305,7 12,6.30355406 12,5.44444444 L12,1.55555556 C12,0.696445945 12.8954305,0 14,0 Z M12,2 L12,5 L13,5 L13,2 L12,2 Z\" id=\"Combined-Shape\" fill-rule=\"nonzero\"></path>\n            <path d=\"M2,1 C1.44771525,1 1,1.31979661 1,1.71428571 L1,5.28571429 C1,5.68020339 1.44771525,6 2,6 L8,6 C8.55228475,6 9,5.68020339 9,5.28571429 L9,1.71428571 C9,1.31979661 8.55228475,1 8,1 L2,1 Z M2,0 L8,0 C9.1045695,0 10,0.696445945 10,1.55555556 L10,5.44444444 C10,6.30355406 9.1045695,7 8,7 L2,7 C0.8954305,7 0,6.30355406 0,5.44444444 L0,1.55555556 C0,0.696445945 0.8954305,0 2,0 Z M9,2 L9,5 L10,5 L10,2 L9,2 Z\" id=\"Combined-Shape\" fill-rule=\"nonzero\"></path>\n            <rect id=\"Rectangle-2\" x=\"6\" y=\"3\" width=\"10\" height=\"1\"></rect>\n        </g>\n    </g>\n</svg></a>複数生成したいので配列に格納する</h2>\n<p>for文を使い、好きな数の円弧の定義を生成し、<code class=\"language-text\">arcs</code>に格納します。</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">let</span> arcs <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">for</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">let</span> i <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> i <span class=\"token operator\">&lt;</span> <span class=\"token number\">30</span><span class=\"token punctuation\">;</span> i<span class=\"token operator\">++</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  arcs<span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n    <span class=\"token literal-property property\">color</span><span class=\"token operator\">:</span> <span class=\"token function\">color</span><span class=\"token punctuation\">(</span><span class=\"token function\">random</span><span class=\"token punctuation\">(</span><span class=\"token number\">255</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token function\">random</span><span class=\"token punctuation\">(</span><span class=\"token number\">255</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token function\">random</span><span class=\"token punctuation\">(</span><span class=\"token number\">255</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">weight</span><span class=\"token operator\">:</span> <span class=\"token function\">random</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">arcWidth</span><span class=\"token operator\">:</span> <span class=\"token function\">random</span><span class=\"token punctuation\">(</span><span class=\"token number\">50</span><span class=\"token punctuation\">,</span> width<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">startDegree</span><span class=\"token operator\">:</span> <span class=\"token function\">random</span><span class=\"token punctuation\">(</span><span class=\"token number\">360</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">arcLength</span><span class=\"token operator\">:</span> <span class=\"token function\">radians</span><span class=\"token punctuation\">(</span><span class=\"token function\">random</span><span class=\"token punctuation\">(</span><span class=\"token number\">30</span><span class=\"token punctuation\">,</span> <span class=\"token number\">120</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h2 id=\"easingで動きの緩急をつける\"><a href=\"#easing%E3%81%A7%E5%8B%95%E3%81%8D%E3%81%AE%E7%B7%A9%E6%80%A5%E3%82%92%E3%81%A4%E3%81%91%E3%82%8B\" aria-label=\"easingで動きの緩急をつける permalink\" class=\"gatsby-remark-autolink-headers-icon\"><svg width=\"22px\" height=\"7px\" viewBox=\"0 0 22 7\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n    <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n        <g id=\"icon-link\" fill=\"#23282D\">\n            <path d=\"M14,1 C13.4477153,1 13,1.31979661 13,1.71428571 L13,5.28571429 C13,5.68020339 13.4477153,6 14,6 L20,6 C20.5522847,6 21,5.68020339 21,5.28571429 L21,1.71428571 C21,1.31979661 20.5522847,1 20,1 L14,1 Z M14,0 L20,0 C21.1045695,0 22,0.696445945 22,1.55555556 L22,5.44444444 C22,6.30355406 21.1045695,7 20,7 L14,7 C12.8954305,7 12,6.30355406 12,5.44444444 L12,1.55555556 C12,0.696445945 12.8954305,0 14,0 Z M12,2 L12,5 L13,5 L13,2 L12,2 Z\" id=\"Combined-Shape\" fill-rule=\"nonzero\"></path>\n            <path d=\"M2,1 C1.44771525,1 1,1.31979661 1,1.71428571 L1,5.28571429 C1,5.68020339 1.44771525,6 2,6 L8,6 C8.55228475,6 9,5.68020339 9,5.28571429 L9,1.71428571 C9,1.31979661 8.55228475,1 8,1 L2,1 Z M2,0 L8,0 C9.1045695,0 10,0.696445945 10,1.55555556 L10,5.44444444 C10,6.30355406 9.1045695,7 8,7 L2,7 C0.8954305,7 0,6.30355406 0,5.44444444 L0,1.55555556 C0,0.696445945 0.8954305,0 2,0 Z M9,2 L9,5 L10,5 L10,2 L9,2 Z\" id=\"Combined-Shape\" fill-rule=\"nonzero\"></path>\n            <rect id=\"Rectangle-2\" x=\"6\" y=\"3\" width=\"10\" height=\"1\"></rect>\n        </g>\n    </g>\n</svg></a>Easingで動きの緩急をつける</h2>\n<p>Easing[イージング]に関しては、<a href=\"https://app.codegrid.net/entry/easing-1\" target=\"_blank\" rel=\"noopener noreferrer\">CodeGridさんの記事</a>で詳しく解説されているのでわからない方はざっと見たほうがいいかもしれません。</p>\n<p>ここでは、Processing内でサクッと書きたかったので、\n<a href=\"https://office606.org/archives/326/\" target=\"_blank\" rel=\"noopener noreferrer\">こちらの記事</a>の式が簡単だったので、引用させていただきました。</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\">nowValue <span class=\"token operator\">+=</span> <span class=\"token punctuation\">(</span>tagetValue <span class=\"token operator\">-</span> nowValue<span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> <span class=\"token number\">0.05</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>要は目的の値までの距離を均等に徐々に足していくという式です。<br>\n目的の値に近づくほど足す値が小さくなっていくので、EaseOut[イーズアウト]の形になります。</p>\n<p>他にも、<a href=\"https://github.com/danro/jquery-easing/blob/master/jquery.easing.js\" target=\"_blank\" rel=\"noopener noreferrer\">Robert Pennerさんのeasing関数</a>など、様々なEasing関数があるようです。後日チャレンジしてみたいと思います。</p>\n<p>そして、Easingの値を格納するために、円弧の定義に新たに<code class=\"language-text\">delayDeg</code>を追加します。<br>\n円弧は0から360の角度で指定するので、目標角度を360とし<code class=\"language-text\">delayFinalDeg</code>に格納します。<br>\n上記のEasing式に当てはめると以下の様なコードになります。</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">const</span> delayFinalDeg <span class=\"token operator\">=</span> <span class=\"token number\">360</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// Easing部分の式</span>\ndelayDeg <span class=\"token operator\">+=</span> <span class=\"token punctuation\">(</span>delayFinalDeg <span class=\"token operator\">-</span> delayDeg<span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> <span class=\"token number\">0.05</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><code class=\"language-text\">delayDeg</code>は円弧ごとに変えたいので、先ほどのオブジェクトに追加します。</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token punctuation\">{</span>\n  <span class=\"token literal-property property\">color</span><span class=\"token operator\">:</span> <span class=\"token function\">color</span><span class=\"token punctuation\">(</span><span class=\"token function\">random</span><span class=\"token punctuation\">(</span><span class=\"token number\">255</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token function\">random</span><span class=\"token punctuation\">(</span><span class=\"token number\">255</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token function\">random</span><span class=\"token punctuation\">(</span><span class=\"token number\">255</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n  <span class=\"token literal-property property\">weight</span><span class=\"token operator\">:</span> <span class=\"token function\">random</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n  <span class=\"token literal-property property\">arcWidth</span><span class=\"token operator\">:</span> <span class=\"token function\">random</span><span class=\"token punctuation\">(</span><span class=\"token number\">50</span><span class=\"token punctuation\">,</span> width<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n  <span class=\"token literal-property property\">startDegree</span><span class=\"token operator\">:</span> <span class=\"token function\">random</span><span class=\"token punctuation\">(</span><span class=\"token number\">360</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n  <span class=\"token literal-property property\">arcLength</span><span class=\"token operator\">:</span> <span class=\"token function\">radians</span><span class=\"token punctuation\">(</span><span class=\"token function\">random</span><span class=\"token punctuation\">(</span><span class=\"token number\">30</span><span class=\"token punctuation\">,</span> <span class=\"token number\">120</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n  <span class=\"token literal-property property\">delayDeg</span><span class=\"token operator\">:</span> <span class=\"token function\">random</span><span class=\"token punctuation\">(</span><span class=\"token number\">360</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token comment\">// この行を追加</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h2 id=\"draw関数内で最終的な円弧を描く\"><a href=\"#draw%E9%96%A2%E6%95%B0%E5%86%85%E3%81%A7%E6%9C%80%E7%B5%82%E7%9A%84%E3%81%AA%E5%86%86%E5%BC%A7%E3%82%92%E6%8F%8F%E3%81%8F\" aria-label=\"draw関数内で最終的な円弧を描く permalink\" class=\"gatsby-remark-autolink-headers-icon\"><svg width=\"22px\" height=\"7px\" viewBox=\"0 0 22 7\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n    <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n        <g id=\"icon-link\" fill=\"#23282D\">\n            <path d=\"M14,1 C13.4477153,1 13,1.31979661 13,1.71428571 L13,5.28571429 C13,5.68020339 13.4477153,6 14,6 L20,6 C20.5522847,6 21,5.68020339 21,5.28571429 L21,1.71428571 C21,1.31979661 20.5522847,1 20,1 L14,1 Z M14,0 L20,0 C21.1045695,0 22,0.696445945 22,1.55555556 L22,5.44444444 C22,6.30355406 21.1045695,7 20,7 L14,7 C12.8954305,7 12,6.30355406 12,5.44444444 L12,1.55555556 C12,0.696445945 12.8954305,0 14,0 Z M12,2 L12,5 L13,5 L13,2 L12,2 Z\" id=\"Combined-Shape\" fill-rule=\"nonzero\"></path>\n            <path d=\"M2,1 C1.44771525,1 1,1.31979661 1,1.71428571 L1,5.28571429 C1,5.68020339 1.44771525,6 2,6 L8,6 C8.55228475,6 9,5.68020339 9,5.28571429 L9,1.71428571 C9,1.31979661 8.55228475,1 8,1 L2,1 Z M2,0 L8,0 C9.1045695,0 10,0.696445945 10,1.55555556 L10,5.44444444 C10,6.30355406 9.1045695,7 8,7 L2,7 C0.8954305,7 0,6.30355406 0,5.44444444 L0,1.55555556 C0,0.696445945 0.8954305,0 2,0 Z M9,2 L9,5 L10,5 L10,2 L9,2 Z\" id=\"Combined-Shape\" fill-rule=\"nonzero\"></path>\n            <rect id=\"Rectangle-2\" x=\"6\" y=\"3\" width=\"10\" height=\"1\"></rect>\n        </g>\n    </g>\n</svg></a>draw関数内で最終的な円弧を描く</h2>\n<p>最後に、p5jsのdraw関数内でcanvasの中心座標に円弧を描きます。<br>\nEasing値となる<code class=\"language-text\">delayDeg</code>は円弧の開始と終了座標にそれぞれ加算します。</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token function\">arc</span><span class=\"token punctuation\">(</span>\n  width<span class=\"token operator\">/</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span>\n  height<span class=\"token operator\">/</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span>\n  arcWidth<span class=\"token punctuation\">,</span>\n  arcWidth<span class=\"token punctuation\">,</span>\n  <span class=\"token function\">radians</span><span class=\"token punctuation\">(</span>delayDeg <span class=\"token operator\">+</span> startDegree<span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span> arcLength<span class=\"token punctuation\">,</span>\n  <span class=\"token function\">radians</span><span class=\"token punctuation\">(</span>delayDeg <span class=\"token operator\">+</span> startDegree<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><code class=\"language-text\">delayDeg</code>が360まで到達(一回転する)したあと、再度ループして描画させたいので、360に近づいたタイミングで0に戻します。<br>\n今回使用したEasing式だと360に値に収束しますが、360になることはないので、<code class=\"language-text\">-1</code>した値と<code class=\"language-text\">delayDeg</code>を比較させます。</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>delayDeg <span class=\"token operator\">></span> delayFinalDeg <span class=\"token operator\">-</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> arcLine<span class=\"token punctuation\">.</span>delayDeg <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span></code></pre></div>\n<br>\n以上のコードをp5jsのライフサイクル内に当てはめ、コードを完成させます。<br>\n最終的なコードは<a href=\"https://codepen.io/mwrote/pen/pozLbvP\" target=\"_blank_\">Codepen</a>でご確認いただけます。\n<br>","fields":{"slug":"/2019-09-11_p5-jsスケッチトレーニング-円弧の線を円周上に沿って動かす/"},"tableOfContents":"<ul>\n<li><a href=\"/2019-09-11_p5-js%E3%82%B9%E3%82%B1%E3%83%83%E3%83%81%E3%83%88%E3%83%AC%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0-%E5%86%86%E5%BC%A7%E3%81%AE%E7%B7%9A%E3%82%92%E5%86%86%E5%91%A8%E4%B8%8A%E3%81%AB%E6%B2%BF%E3%81%A3%E3%81%A6%E5%8B%95%E3%81%8B%E3%81%99/#arc%E9%96%A2%E6%95%B0%E3%81%A7%E5%86%86%E5%BC%A7%E3%82%92%E6%8F%8F%E3%81%8F\">arc関数で円弧を描く</a></li>\n<li><a href=\"/2019-09-11_p5-js%E3%82%B9%E3%82%B1%E3%83%83%E3%83%81%E3%83%88%E3%83%AC%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0-%E5%86%86%E5%BC%A7%E3%81%AE%E7%B7%9A%E3%82%92%E5%86%86%E5%91%A8%E4%B8%8A%E3%81%AB%E6%B2%BF%E3%81%A3%E3%81%A6%E5%8B%95%E3%81%8B%E3%81%99/#%E6%8F%8F%E7%94%BB%E3%81%99%E3%82%8B%E5%86%86%E5%BC%A7%E3%81%AE%E5%AE%9A%E7%BE%A9%E3%82%92%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%A8%E3%81%97%E3%81%A6%E6%A0%BC%E7%B4%8D%E3%81%99%E3%82%8B\">描画する円弧の定義を、オブジェクトとして格納する</a></li>\n<li><a href=\"/2019-09-11_p5-js%E3%82%B9%E3%82%B1%E3%83%83%E3%83%81%E3%83%88%E3%83%AC%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0-%E5%86%86%E5%BC%A7%E3%81%AE%E7%B7%9A%E3%82%92%E5%86%86%E5%91%A8%E4%B8%8A%E3%81%AB%E6%B2%BF%E3%81%A3%E3%81%A6%E5%8B%95%E3%81%8B%E3%81%99/#%E8%A4%87%E6%95%B0%E7%94%9F%E6%88%90%E3%81%97%E3%81%9F%E3%81%84%E3%81%AE%E3%81%A7%E9%85%8D%E5%88%97%E3%81%AB%E6%A0%BC%E7%B4%8D%E3%81%99%E3%82%8B\">複数生成したいので配列に格納する</a></li>\n<li><a href=\"/2019-09-11_p5-js%E3%82%B9%E3%82%B1%E3%83%83%E3%83%81%E3%83%88%E3%83%AC%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0-%E5%86%86%E5%BC%A7%E3%81%AE%E7%B7%9A%E3%82%92%E5%86%86%E5%91%A8%E4%B8%8A%E3%81%AB%E6%B2%BF%E3%81%A3%E3%81%A6%E5%8B%95%E3%81%8B%E3%81%99/#easing%E3%81%A7%E5%8B%95%E3%81%8D%E3%81%AE%E7%B7%A9%E6%80%A5%E3%82%92%E3%81%A4%E3%81%91%E3%82%8B\">Easingで動きの緩急をつける</a></li>\n<li><a href=\"/2019-09-11_p5-js%E3%82%B9%E3%82%B1%E3%83%83%E3%83%81%E3%83%88%E3%83%AC%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0-%E5%86%86%E5%BC%A7%E3%81%AE%E7%B7%9A%E3%82%92%E5%86%86%E5%91%A8%E4%B8%8A%E3%81%AB%E6%B2%BF%E3%81%A3%E3%81%A6%E5%8B%95%E3%81%8B%E3%81%99/#draw%E9%96%A2%E6%95%B0%E5%86%85%E3%81%A7%E6%9C%80%E7%B5%82%E7%9A%84%E3%81%AA%E5%86%86%E5%BC%A7%E3%82%92%E6%8F%8F%E3%81%8F\">draw関数内で最終的な円弧を描く</a></li>\n</ul>","frontmatter":{"date":"2019.09.11","title":"p5.jsスケッチトレーニング -円弧の線を円周上に沿って動かす-","cover":"","category":"Coding","excerpt":"p5.jsのarcと簡単なEasing式を使い、円弧の線を動かします。"}}},"pageContext":{"isCreatedByStatefulCreatePages":false,"id":"d5a69a1d-62b7-5a8b-8f18-975dfee3ae96","next":{"path":"/2019-09-08_アトミックデザインはコンポーネント再利用の設計方法/","title":"アトミックデザインはコンポーネント再利用の設計方法","category":"Design"},"prev":{"path":"/2019-09-14_p5-jsを本番サイトで使う方法/","title":"p5.jsを本番サイトで使う方法","category":"Coding"},"relatedPosts":[{"id":"2e52640f-36d6-5268-99ea-9d58492ffec5","fields":{"slug":"/2019-09-14_p5-jsを本番サイトで使う方法/"},"frontmatter":{"title":"p5.jsを本番サイトで使う方法","date":"2019-09-14T00:00:00.000Z","excerpt":"p5.jsをいざプロダクションビルド(本番サイト向け)で使う場合、一体どのような方法で使うのが最適でしょうか。p5.jsの特徴を踏まえ、代表的な使い方をご紹介します。","templateKey":"post","category":"Coding","propertags":["p5js"],"commontags":["generative","javascript"]}},{"id":"1eb35481-156d-520b-ab66-a911316fe17b","fields":{"slug":"/2019-07-03_Webで簡単にコードで絵を描くp5-js/"},"frontmatter":{"title":"Webで簡単にコードで絵を描くp5.js","date":"2019-07-03T14:15:51.667Z","excerpt":"描画ライブラリp5.jsとCodepenを使い、ブラウザ上で簡単にスケッチを描く方法を紹介します。","templateKey":"post","category":"Coding","propertags":["p5js"],"commontags":["generative","javascript"]}},{"id":"aa5f4477-fc03-52d8-a793-d1abdb3a7ecd","fields":{"slug":"/2019-09-02_p5jsのコードをsketchファイル上で実行する方法/"},"frontmatter":{"title":"p5jsのコードをsketchファイル上で実行する方法","date":"2019-09-02T00:00:00.000Z","excerpt":"Sketchで幾何学的なパターンを描くのに最適な、Processing(p5js)のコードをSketch上で実行できるPluginを紹介します。","templateKey":"post","category":"Coding","propertags":["p5js","sketch"],"commontags":["javascript"]}},{"id":"b24fa0f2-8884-5053-9f12-a2dbc1ab9fc6","fields":{"slug":"/2019-09-17_p5-jsをreactのコンポーネントとして実行する方法/"},"frontmatter":{"title":"p5.jsをReactのコンポーネントとして実行する方法","date":"2019-09-17T07:53:50.970Z","excerpt":"p5.jsを直接ページ内に読み込ませるのではなく、Reactなどのコンポーネントの中で実行する方法をコードベースでご紹介します。","templateKey":"post","category":"Coding","propertags":["p5js","react"],"commontags":["component","javascript"]}},{"id":"a9f2125a-caa7-5d36-a7d1-c68b1a35d0fa","fields":{"slug":"/2019-07-15_Ptsjsによる実践ジェネラティブアート/"},"frontmatter":{"title":"Pts.jsによる実践ジェネラティブアート","date":"2019-07-15T00:00:00.000Z","excerpt":"Ptsという幾何学的な図形を描画するのに特化したJavaScriptライブラリをご紹介します。","templateKey":"post","category":"Coding","propertags":["ptsjs"],"commontags":["generative","javascript"]}}]}}