!!!七角形を描画 とりあえず[描画|http://www21051ue.sakura.ne.jp/polygon]してみる #!/usr/bin/env perl use Mojolicious::Lite; app->types->type(data => 'application/octet-stream'); app->types->type(mem => 'application/octet-stream'); app->types->type(wasm => 'application/wasm'); get '/:n' => {n => 7} => sub { my $c = shift; $c->render(template => 'index'); }; app->start; __DATA__ @@ index.html.ep % layout 'default'; % title '七角形';

perl de Heptagon (七角形)

@@ layouts/default.html.ep <%= title %> <%= content %>
!!LINE ART LINE ARTで書いた七角形をperlで書いてみた。webperl+mojoliciousでcanvasに七角形を描画してみた。 !webperl de canvas  *getElementByIdメソッドでHTMLと関連付けて、getContextメソッドで描画機能を有効にする **getElementByIdメソッドでid名を指定してHTML側と関連付けます。 次に、getContextメソッドで描画機能を有効にします。JavaScriptとほぼ同じ書き方です。 my $canvas = js('document')->getElementById('canvas'); my $ctx = $canvas->getContext("2d"); *canvasのメソッドには $object->Method()でアクセスする。 $ctx->stroke(); *canvasのプロパティには$object->{Property}でアクセスする。 $ctx->{strokeStyle} = 'rgba(0,0,100,0.5)'; !mojolicious de webperl mojoliciousでwebperlを使ってみる。まずは雛形をつくる。 $ mojo generate lite_app polygon.pl pubulicの下にhttps://webperl.zero-g.net/よりダウンロードしたファイルを展開する。 $ tree . . ├── polygon.pl └── public ├── emperl.data ├── emperl.js ├── emperl.wasm ├── LICENSE_artistic.txt ├── LICENSE_gpl.txt ├── lineArt.css ├── mini_ide │ ├── emscr_ide.css │ ├── emscr_ide.js │ └── webperl_mini_ide.html   ├── README.md   ├── regex_tester.html   ├── runtests.html   ├── webperl_demo.html   ├── webperl.js   └── webperl.psgi 雛形にMIMEを追加する app->types->type(data => 'application/octet-stream'); app->types->type(mem => 'application/octet-stream'); app->types->type(wasm => 'application/wasm'); テンプレートにwebperl.jsを追加してperlを書く !perl de Heptagon *多角形を書くために頂点の位置を計算する。 **半径1の円を考えると、座標 ( Cos(radian) , Sin(radian) ) が頂点になる([【Unity】Texture2Dに多角形を描く|https://blog.narumium.net/2017/02/03/%E3%80%90unity%E3%80%91texture2d%E3%81%AB%E5%A4%9A%E8%A7%92%E5%BD%A2%E3%82%92%E6%8F%8F%E3%81%8F/]より) *ラジアン **180°= π[rad] **正n角形の各頂点は、単位円の中心をn等分しているので、等分した1コ当りの中心角は ***中心角 = 2π÷n my $n = 7; my @paricles = (); push(@paricles,particle($_,$n)) for (1 .. $n); sub particle{ my ($i,$n) = @_; my $ret = {}; $ret->{x} = $r * cos($i*2*$pi/$n); $ret->{y} = $r * sin($i*2*$pi/$n); return $ret; } **度(deg)からラジアン(rad)を求める計算式 ***rad=deg*(π/180) **ラジアン(rad)から度(deg)を求める計算式 ***deg=rad*(180/π) *https://ja.wikipedia.org/wiki/%E4%B8%83%E8%A7%92%E5%BD%A2 正七角形とは、各辺と全ての内角の大きさがそれぞれ等しい七角形。ひとつの内角の大きさはラジアン角で5π/7(約128.57度)である。 正七角形をコンパスと定規(長さの計測が不可能なもの)で作図することは不可能であるが、コンパスと目盛り付の定規(長さの計測が可能なもの)を用いたり、あるいは折り紙を用いるなどすれば描画可能である。 *[正7角形のある性質|http://shochandas.xsrv.jp/figure/heptagon.htm] 辺をa、対角線をb,cとすると  1/a=1/b+1/c が成り立つ !webperl CDNからwebperlコードをロードすれば自身のサーバーでこれをホストする必要すらありません。よって[htmlだけ配置|http://www21051ue.sakura.ne.jp/polygon.html]すればwebperlが使えます。 [polygon.html] perl de 七角形

perl de Heptagon (七角形)

角形を書く