{"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":"a9f2125a-caa7-5d36-a7d1-c68b1a35d0fa","html":"<p><a href=\"https://codepen.io/mwrote/pen/WqqvbW?defaultTab=result&#x26;run=true\" target=\"_blank\" rel=\"noopener noreferrer\"><div class=\"embed-codepen\"><iframe\n        height='400'\n        scrolling='no'\n        src='//codepen.io/mwrote/embed/WqqvbW/?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><a href=\"https://ptsjs.org/\" target=\"_blank\" rel=\"noopener noreferrer\">Pts</a>というライブラリが面白そうなので、公式チュートリアルを触ってその感想などをレポートしたいと思います。<br>\n初見としては、<a href=\"https://ptsjs.org/demo\" target=\"_blank\" rel=\"noopener noreferrer\">デモサイト</a>にあるとおり、複雑な計算式による図形描画が簡単なメソッドで高速で動くのかなという印象です。</p>\n<h2 id=\"概念\"><a href=\"#%E6%A6%82%E5%BF%B5\" 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<ul>\n<li>スペース(PtsSpace): 紙</li>\n<li>フォーム(Form): 鉛筆</li>\n<li>ポイント(Point): アイデア</li>\n</ul>\n<p>この3つの概念で描きたいものを考えるようです。3Dプログラミングをする際のライトやカメラ、シーンのような物事の捉え方の概念でしょうか。詳しくは<a href=\"https://medium.com/@williamngan/pt-93382bf5943e\" target=\"_blank\" rel=\"noopener noreferrer\">ここ(英語)</a>に書かれています。</p>\n<h2 id=\"コードペンでの土台作り\"><a href=\"#%E3%82%B3%E3%83%BC%E3%83%89%E3%83%9A%E3%83%B3%E3%81%A7%E3%81%AE%E5%9C%9F%E5%8F%B0%E4%BD%9C%E3%82%8A\" 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>まずはコードペンでPtsライブラリを追加しましょう。<br>\nSettings -> JavaScript -> 検索欄でPtsで検索し、追加します。</p>\n<h2 id=\"ベースとなるcanvas作成\"><a href=\"#%E3%83%99%E3%83%BC%E3%82%B9%E3%81%A8%E3%81%AA%E3%82%8Bcanvas%E4%BD%9C%E6%88%90\" aria-label=\"ベースとなるcanvas作成 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>ベースとなるCanvas作成</h2>\n<p>まずはhtmlのcanvas作成します。これがPtsでいうスペースですね。</p>\n<p>これには、通常版と簡易版が用意されています。</p>\n<p>まず通常版から、グローバルスコープ(window)にPtsの関数を定義します。</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\">Pts<span class=\"token punctuation\">.</span><span class=\"token function\">namespace</span><span class=\"token punctuation\">(</span>window<span class=\"token punctuation\">)</span></code></pre></div>\n<p><code class=\"language-text\">#hello</code>箇所はcanvas要素のidになり、<a href=\"https://ptsjs.org/docs/?p=Canvas_Canvasspace#function_setup\" target=\"_blank\" rel=\"noopener noreferrer\">setup</a>関数では背景の他に、オフスクリーンレンダリング、リサイズ、retina対応の有無を設定できます。</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">const</span> space <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">CanvasSpace</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"#hello\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nspace<span class=\"token punctuation\">.</span><span class=\"token function\">setup</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">bgcolor</span><span class=\"token operator\">:</span> <span class=\"token string\">\"#fff\"</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> form <span class=\"token operator\">=</span> space<span class=\"token punctuation\">.</span><span class=\"token function\">getForm</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>以上の簡易版として、quickStart関数を使い一行で書けます。<br>\nこの場合、グローバルスコープにPtsのメソッドや変数、さらに<code class=\"language-text\">space</code>と<code class=\"language-text\">form</code>変数が作成されます。</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\">Pts<span class=\"token punctuation\">.</span><span class=\"token function\">quickStart</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"#hello\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"#fff\"</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%E5%87%A6%E7%90%86%E3%82%92%E3%81%8B%E3%81%8F\" 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>quickStart関数の<b>戻り値の関数</b>の引数が毎フレーム実行される関数です。<br>\nこれは標準の<a href=\"https://developer.mozilla.org/ja/docs/Web/API/Window/requestAnimationFrame\" target=\"_blank\" rel=\"noopener noreferrer\">requestAnimationFrame関数</a>や<a href=\"/2019-07-03_Web%E3%81%A6%E3%82%99%E7%B0%A1%E5%8D%98%E3%81%AB%E3%82%B3%E3%83%BC%E3%83%88%E3%82%99%E3%81%A6%E3%82%99%E7%B5%B5%E3%82%92%E6%8F%8F%E3%81%8Fp5-js/#%E3%82%B9%E3%82%B1%E3%83%83%E3%83%81%E3%82%92%E6%8F%8F%E3%81%8D%E3%81%AF%E3%81%98%E3%82%81%E3%82%88%E3%81%86\">Processingのdraw関数</a>に非常によく似ています。</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">const</span> run <span class=\"token operator\">=</span> Pts<span class=\"token punctuation\">.</span><span class=\"token function\">quickStart</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"#hello\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"#fff\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token function\">run</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">time<span class=\"token punctuation\">,</span> ftime</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// ここに毎フレーム実行する描画処理を記述します。</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>他にも、スペースに対して関数を追加(<code class=\"language-text\">space.add(() => { })</code>)するとその関数が毎フレーム実行されるようです。<br></p>\n<h3 id=\"図形を描画する\"><a href=\"#%E5%9B%B3%E5%BD%A2%E3%82%92%E6%8F%8F%E7%94%BB%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>図形を描画する</h3>\n<p><code class=\"language-text\">form.point</code>は、指定した座標に図形を追加します。<br>\nデフォルトでは幅5pxの赤い四角が追加されます。<br>\nまた、<code class=\"language-text\">space.pointer</code>変数にはマウス座標が格納されています。<br>\n以下のコードでは、マウス座標に追従して、幅10pxの円を描画しています。</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\">form<span class=\"token punctuation\">.</span><span class=\"token function\">point</span><span class=\"token punctuation\">(</span>space<span class=\"token punctuation\">.</span>pointer<span class=\"token punctuation\">,</span> <span class=\"token number\">10</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'circle'</span><span class=\"token punctuation\">)</span></code></pre></div>\n<h3 id=\"アニメーションさせる\"><a href=\"#%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%95%E3%81%9B%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>アニメーションさせる</h3>\n<p>アニメーションフレーム関数の引数<code class=\"language-text\">time</code>にはフレーム数が格納されています。<br>\n以下のように書くと円が伸縮するアニメーションが実行されます。<br></p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\">space<span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">time</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> radius <span class=\"token operator\">=</span> <span class=\"token number\">5</span> <span class=\"token operator\">+</span> Num<span class=\"token punctuation\">.</span><span class=\"token function\">cycle</span><span class=\"token punctuation\">(</span>time<span class=\"token operator\">%</span><span class=\"token number\">1000</span><span class=\"token operator\">/</span><span class=\"token number\">1000</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> <span class=\"token number\">5</span><span class=\"token punctuation\">;</span>\n  form<span class=\"token punctuation\">.</span><span class=\"token function\">point</span><span class=\"token punctuation\">(</span>space<span class=\"token punctuation\">.</span>pointer<span class=\"token punctuation\">,</span> radius<span class=\"token punctuation\">,</span> <span class=\"token string\">'circle'</span><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>2行目の<code class=\"language-text\">Num.cycle(time%1000/1000)</code>の部分を少し解説しておきましょう。<br></p>\n<p>まず<code class=\"language-text\">time%1000/1000</code>の部分から解説します。<br>\ntimeはフレームなので、毎フレームずつ1が追加された整数が入ります。<br>\nそれを1000で割り、その余りをえることで 0~1000の値にフレームの値を制限します。<br>\n最後にそれを1000で割、0~1の値に変換します。<br>\nつまり0からはじまり徐々に増え続け、1に近づくとまた0からはじまる数値になります。<br></p>\n<p><code class=\"language-text\">Num.cycle</code>は引数に円の角度をラジアン(0~1の値)単位で渡す<a href=\"https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Math/sin\" target=\"_blank\" rel=\"noopener noreferrer\">sin関数</a>です。<br>\nサイン関数はイージングの動きを得るときなどに使用します。<br>\nここに<code class=\"language-text\">time%1000/1000</code>を渡すことで、イージングのついた0から1の増え続ける値を得ることができます。</p>\n<h2 id=\"関数ベースの使いやすく非常にわかりやすい設計\"><a href=\"#%E9%96%A2%E6%95%B0%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E4%BD%BF%E3%81%84%E3%82%84%E3%81%99%E3%81%8F%E9%9D%9E%E5%B8%B8%E3%81%AB%E3%82%8F%E3%81%8B%E3%82%8A%E3%82%84%E3%81%99%E3%81%84%E8%A8%AD%E8%A8%88\" 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>この記事の内容は公式ドキュメントの<a href=\"https://ptsjs.org/guide/get-started-0100\" target=\"_blank\" rel=\"noopener noreferrer\">Get started</a>から抜粋したものです。</p>\n<p>基本的な構造は以下のように完結にかくことができ、非常に簡単です。<br></p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">const</span> run <span class=\"token operator\">=</span> Pts<span class=\"token punctuation\">.</span><span class=\"token function\">quickStart</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"#hello\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"#fff\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token function\">run</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">time<span class=\"token punctuation\">,</span> ftime</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// ここで以下にアニメーションを記述するかがキモ</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>あとは、Ptsの関数を使い、いかに描画を記述していくかがキモになります。<br>\n2章の<a href=\"https://ptsjs.org/guide/pt-0200\" target=\"_blank\" rel=\"noopener noreferrer\">Pt</a>以降は様々な描画方法(<a href=\"https://ptsjs.org/guide/animation-0700\" target=\"_blank\" rel=\"noopener noreferrer\">命令的なアニメーション手法</a>など)が紹介されていますので、興味があればぜひご覧ください。</p>","fields":{"slug":"/2019-07-15_Ptsjsによる実践ジェネラティブアート/"},"tableOfContents":"<ul>\n<li><a href=\"/2019-07-15_Ptsjs%E3%81%AB%E3%82%88%E3%82%8B%E5%AE%9F%E8%B7%B5%E3%82%B8%E3%82%A7%E3%83%8D%E3%83%A9%E3%83%86%E3%82%A3%E3%83%96%E3%82%A2%E3%83%BC%E3%83%88/#%E6%A6%82%E5%BF%B5\">概念</a></li>\n<li><a href=\"/2019-07-15_Ptsjs%E3%81%AB%E3%82%88%E3%82%8B%E5%AE%9F%E8%B7%B5%E3%82%B8%E3%82%A7%E3%83%8D%E3%83%A9%E3%83%86%E3%82%A3%E3%83%96%E3%82%A2%E3%83%BC%E3%83%88/#%E3%82%B3%E3%83%BC%E3%83%89%E3%83%9A%E3%83%B3%E3%81%A7%E3%81%AE%E5%9C%9F%E5%8F%B0%E4%BD%9C%E3%82%8A\">コードペンでの土台作り</a></li>\n<li><a href=\"/2019-07-15_Ptsjs%E3%81%AB%E3%82%88%E3%82%8B%E5%AE%9F%E8%B7%B5%E3%82%B8%E3%82%A7%E3%83%8D%E3%83%A9%E3%83%86%E3%82%A3%E3%83%96%E3%82%A2%E3%83%BC%E3%83%88/#%E3%83%99%E3%83%BC%E3%82%B9%E3%81%A8%E3%81%AA%E3%82%8Bcanvas%E4%BD%9C%E6%88%90\">ベースとなるCanvas作成</a></li>\n<li>\n<p><a href=\"/2019-07-15_Ptsjs%E3%81%AB%E3%82%88%E3%82%8B%E5%AE%9F%E8%B7%B5%E3%82%B8%E3%82%A7%E3%83%8D%E3%83%A9%E3%83%86%E3%82%A3%E3%83%96%E3%82%A2%E3%83%BC%E3%83%88/#%E6%8F%8F%E7%94%BB%E5%87%A6%E7%90%86%E3%82%92%E3%81%8B%E3%81%8F\">描画処理をかく</a></p>\n<ul>\n<li><a href=\"/2019-07-15_Ptsjs%E3%81%AB%E3%82%88%E3%82%8B%E5%AE%9F%E8%B7%B5%E3%82%B8%E3%82%A7%E3%83%8D%E3%83%A9%E3%83%86%E3%82%A3%E3%83%96%E3%82%A2%E3%83%BC%E3%83%88/#%E5%9B%B3%E5%BD%A2%E3%82%92%E6%8F%8F%E7%94%BB%E3%81%99%E3%82%8B\">図形を描画する</a></li>\n<li><a href=\"/2019-07-15_Ptsjs%E3%81%AB%E3%82%88%E3%82%8B%E5%AE%9F%E8%B7%B5%E3%82%B8%E3%82%A7%E3%83%8D%E3%83%A9%E3%83%86%E3%82%A3%E3%83%96%E3%82%A2%E3%83%BC%E3%83%88/#%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%95%E3%81%9B%E3%82%8B\">アニメーションさせる</a></li>\n</ul>\n</li>\n<li><a href=\"/2019-07-15_Ptsjs%E3%81%AB%E3%82%88%E3%82%8B%E5%AE%9F%E8%B7%B5%E3%82%B8%E3%82%A7%E3%83%8D%E3%83%A9%E3%83%86%E3%82%A3%E3%83%96%E3%82%A2%E3%83%BC%E3%83%88/#%E9%96%A2%E6%95%B0%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E4%BD%BF%E3%81%84%E3%82%84%E3%81%99%E3%81%8F%E9%9D%9E%E5%B8%B8%E3%81%AB%E3%82%8F%E3%81%8B%E3%82%8A%E3%82%84%E3%81%99%E3%81%84%E8%A8%AD%E8%A8%88\">関数ベースの使いやすく非常にわかりやすい設計</a></li>\n</ul>","frontmatter":{"date":"2019.07.15","title":"Pts.jsによる実践ジェネラティブアート","cover":"","category":"Coding","excerpt":"Ptsという幾何学的な図形を描画するのに特化したJavaScriptライブラリをご紹介します。"}}},"pageContext":{"isCreatedByStatefulCreatePages":false,"id":"a9f2125a-caa7-5d36-a7d1-c68b1a35d0fa","next":{"path":"/2019-07-10_UIデザインの原則デザインガイドライン/","title":"UIデザインの原則デザインガイドライン","category":"Design"},"prev":{"path":"/2019-07-23_かわいいファミコン風CSSライブラリNEScss/","title":"かわいいファミコン風CSSライブラリNES.css","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":"d5a69a1d-62b7-5a8b-8f18-975dfee3ae96","fields":{"slug":"/2019-09-11_p5-jsスケッチトレーニング-円弧の線を円周上に沿って動かす/"},"frontmatter":{"title":"p5.jsスケッチトレーニング -円弧の線を円周上に沿って動かす-","date":"2019-09-11T00:00:00.000Z","excerpt":"p5.jsのarcと簡単なEasing式を使い、円弧の線を動かします。","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":"3a8f96d7-8238-57b2-be53-57c0bab5d727","fields":{"slug":"/2019-09-05_JSでアニメーションできるフォントleonsans/"},"frontmatter":{"title":"JSでアニメーションできるフォントleonsans","date":"2019-09-05T00:00:00.007Z","excerpt":"CanvasやPIXI.js上で展開できるプログラマブルなフォントleonsansを紹介します。","templateKey":"post","category":"Coding","propertags":null,"commontags":["animation","generative","javascript"]}},{"id":"156242f5-f991-540a-8b82-2321b7bbc8a9","fields":{"slug":"/2019-08-21_ブラウザで機械学習が実行できるml5jsを試してみる/"},"frontmatter":{"title":"ブラウザで機械学習が実行できるml5jsを試してみる","date":"2019-08-21T00:00:00.000Z","excerpt":"フロントエンドエンジニアは絵を描くのが苦手だけど、絵をブラウザで表示するのは得意です。それと同じことが、機械学習でも起こるのでは？そんな近未来を予感させてくれるような、ブラウザ実行型のライトウェイトな機械学習ライブラリml5jsを紹介します。","templateKey":"post","category":"Coding","propertags":["ml5js"],"commontags":["ml","generative","javascript"]}}]}}