2011/07/31

[js][canvas]中抜けのパスを描画する

このエントリーをはてなブックマークに追加
canvasのパス描画の話です。

重ねたところを中抜きさせる方法です。
逆周りのパス書くと相殺されるようです。

●逆順のパスを描く



基準となるパスと、逆周りのパスを重ねると、重複したところが抜けます。arcメソッドの最後の引数はtrueとfalseでパスの向きが変わるような仕様でした。こうやって使うためのものなのか、というのが解った。

// 中空きのパスなら問題なく描画できる
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
ctx.fillStyle = "red";
ctx.beginPath();
ctx.arc(100, 100, 100, 0, Math.PI * 2, true);
ctx.arc(100, 100, 80, 0, Math.PI * 2, false);
ctx.fill();
ctx.fillStyle = "blue";
ctx.beginPath();
ctx.arc(200, 100, 100, 0, Math.PI * 2, true);
ctx.arc(200, 100, 80, 0, Math.PI * 2, false);
ctx.fill();





円と、逆回転のパスで描いた円を僅かにスライドさせて重ねると、排他的論理和のベン図のような図形ができる。なるほど、ここまではいい。
だけどこうなると三種類の円での排他的論理和のベン図は無理そうです。
当然、上記の円を三つ重ねても望みどおりの図形はできない。

うーむ。
やっぱりまだ納得がいっていない。
完全に、すっぽり中空の図形だったら問題はないのです。だけど中が抜ける図形であることが描画前にわかってない場合は、内包判定しないといけなくて、これは限りなく面倒でしょう。


●globalCompositeOperationを使う方法


globalCompositeOperationを使うことでも、似たようなことはできます。

globalCompositeOperation="source-out"とかやれば、すでに描画されてるところを背景色で塗りつぶすように指定ができるわけです。

Canvasリファレンス - globalCompositeOperation = "合成方法"
http://www.htmq.com/canvas/globalCompositeOperation.shtml

感じとしては、前者の方法(逆順のパスを描く方法)のほうが、塗りつぶしの描画が一回で住む分、きっと高速でしょう。

var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
// source-overで上書き(初期値)
// source-out(xor)で排他描画
ctx.globalCompositeOperation = "source-over";
ctx.fillStyle = "red";
ctx.beginPath();
ctx.arc(100, 100, 100, 0, Math.PI * 2, true);
ctx.fill();
ctx.globalCompositeOperation = "source-out";
ctx.beginPath();
ctx.arc(100, 100, 80, 0, Math.PI * 2, true);
ctx.fill();
ctx.globalCompositeOperation = "source-over";
ctx.fillStyle = "blue";
ctx.beginPath();
ctx.arc(200, 100, 100, 0, Math.PI * 2, true);
ctx.fill();
ctx.globalCompositeOperation = "source-out";
ctx.beginPath();
ctx.arc(200, 100, 80, 0, Math.PI * 2, true);
ctx.fill();




もちろん、描画されているかどうかで判断されるので背景が描画されてたら使えないのです。
これも条件が厳しすぎて、まあ使い勝手がいいとは言えない。


●fill("everodd")を使う方法

追記:20161017

久しぶりにcanvasをいじってたら、どうやら塗りつぶしのタイミングで奇遇規則を指定できるようなので補足しておきます。
この記事の公開当時からこの設定があったかどうかは不明です。
ctx.fill("everodd");
fillを呼ぶタイミングで、evenoddを指定すると偶数奇数ルール(奇偶規則)が設定されます。
なおnonzeroを指定すると、省略時と同じ非ゼロ回転数ルールとなります。

うーん、こんなに簡単に…。

http://stackoverflow.com/questions/12446790/using-even-odd-fill-on-html-canvas

2011/07/21

MacOSX Lion発売と、その他リニューアル

このエントリーをはてなブックマークに追加


MacOSX 10.7(Lion)が発売されました。
AppStoreで2600円です。

アップル - Mac
http://www.apple.com/jp/mac/

・同時に、MacBookAir、MacMini一新
MacMini、こんな躯体でCorei7、本当に大丈夫なのかと思ってしまう。熱暴走しそうで、怖い。
MacMiniのServerはこの躯体にHDD二台も搭載できるのですか。どうやって入ってるんだろう。すごすぎる。

・MacMiniにDVDドライブがなくなった
MacBookAirにもないからね。DVDは壊れやすいパーツだし、そっちに未来はないと見ているわけですね。
Lionの提供もAppStore経由しかないようで、もはやDVDお役御免とばかりに、そっちに一気になだれ込む気ですね。

・MacBookがなくなった
まあ確かに素材だけの違いで、MacBookProとスペックは何年か横並びでした。

・Thunderboltは、さすがにまだ様子見したい
でもまあ、邪魔になるものでもないので、先行投資という感じで、使わないで放置してても別によさげではある。
強力な潜在能力は感じます。そのうち、USBメモリならぬ、Thunderboltメモリとか、巷に溢れるわけですね。USBメモリのように互換性に守られて自然と広まるような感じじゃないから、出だしのコストパフォーマンスはよくないだろうなあ。

・iWork11はまだでした
残念。ていうか11後半に差し掛かっております。


Macのリリースログを残しておくのは、どのくらいのタイミングでアップデートされるかを予想するときのタイムラインのためなのです。全然まとめてないけど。

2011/07/16

tracking boids

このエントリーをはてなブックマークに追加

tracking boids - jsdo.it - share JavaScript, HTML5 and CSS



思いのほかスローライフです。

Chrome12とFirefox5で動作確認。
※クリックで分散します。


●ルール
①視界に入った自分より大きいもののなかで、最小サイズのやつを追跡する。
②近すぎるやつは引き離す。

boidsをモデルにしてますが、もはや別物になりました。


●何か暗喩的なこと
・隅っこに追い詰められても自然にほどける。
・末端では離脱するやつが出やすい。
・大規模な改革は、うまくやらないと構造そのものが散り散りになってしまうことがある。
・一つの統制された組織になるのは簡単そうで難しい。
・前に進む推進力は、引っ張る力というより、小突かれる力。

2011/07/15

MacOSX Lion間近?

このエントリーをはてなブックマークに追加


MacOSX Lionを楽しみにしています。2600円、AppStoreの起爆剤ですね。

アップデートを躊躇させる懸念は一点。
Rosettaの非サポートです。これが残念。

GoGo! Machead! - Mac OS X LionでAppleが捨てるモノ
http://ameblo.jp/gogo-machead/entry-10815303691.html

PowerPC時代のアプリを動かすためのエミュレータです。要するに古いアプリを動かす仕掛けですね。
仕事で古くから付き合いがあるアプリもあって、それらが動かなくなるのです。

IllustratorCSとPhotoShopCSが動かなくなるわけか。これは切実。まあしかし、今でも、かなり無理をしてるので、実際のところあまり利用しないのです。起動させると、動くことは動くのですが、異様に重い。

当方の環境では、MacBookProの裏にBootcampでWindows7を入れていて、もっぱらそっちがメインで、そっちにもIllustratorを入れてしまったので、それを使えば不都合はない。
ということで、悩ましくも、新しいものに飛びつこうと画策している所存でした。

IntelMac対応は、CS3からなので、以前のバージョンをそれと知らずに利用されている人は注意しましょう。
アップデートしたあとに気付いて、戻さないといけないことになるなんて非常に面倒です。

再インストール時のためのメディア作成のやりかたとか、まあ、おいおい調べよう。
なんとかなるでしょう。最悪、SnowLeopardをもう一回再インストールする覚悟のために、ファイル整理しておくことにする。

2011/07/10

iPodTouchのケースを捨てた

このエントリーをはてなブックマークに追加

ケースが悪いわけではないけれど、ケースなし派に転向しました。
転向というか、もともと使っていたやつも極力薄くてクリアなケースを選んで、売られているもののなかでは、ケースとしての存在感を最低限に抑えるものでした。そのせいもあって、耐久性の向上はどのみち見込めないので、なくても変わらない。

iPodTouchの厚みのうち、1~2mmがケースなんだと思ったら、本来、がんばってがんばって開発された薄さを堪能しないのもなんだかなあ、と。
傷が付くのはイヤだけれど、毎日見るのがケースの裏に付いた擦り傷の嵐なら、結局直に傷がいっても同じじゃないかと思うわけです。

●ケースと、液晶保護シートを捨てた感想


直に、薄さを体感できる。iPhoneはiPodTouchからすると、とてつもなく厚みがある印象だけれど、それがさらに加速しそう。数年たったら買い換えようと思うし、オークションなんかで売り飛ばすつもりもないので、堪能したほうがよい。

というわけで、ケースと保護シートは、なくても全然問題ないです。
だけど、結構みんなiPhoneになってしまっているので、ケースで自分のを判別してるというのはあるだろうな、とは思った。みんながケース外したらどれが自分のか解らなくなりそう。


保護シート関係あるかどうかわからないけれど。ふちを触ってたら親指切ってしまいました。なかなか鋭利だったんだなあと認識。尖ってるところは注意。

2011/07/07

Evernote始めました

このエントリーをはてなブックマークに追加

普段はよく、GoogleDocsを利用しています。
下の記事に触発されてEvernoteを触ってみることに。

男子ハック - Evernoteを挫折した人、僕ともう1度本気になって挑戦してみませんか?[運用ルール作り編]
http://www.danshihack.com/2011/01/14/junp/evernote_2011_operation.html

男子ハック - Evernoteを挫折した人、僕ともう1度本気になって挑戦してみませんか?[環境作り編]
http://www.danshihack.com/2011/01/25/junp/evernote_2011_workflow.html

Evernoteは知ってはいたけれど、利用するのは初めて。記事を読むと、便利だから利用しようという人は多いみたい。けれど、人によっては、十分に活用しているとは言えず、頓挫を繰り返すことがあるようで、運用ルールをあらかじめ決めておくほうがいいようなことが書いてあります。

ゴミ溜めのような状況になるというのは、まさに現状GoogleDocsを利用して発生してる問題点のような気がしています。つまり、あってないようなタグ管理、文書の再利用性が乏しい、重複文書が多発しているといった事態です。
一新するつもりで、少し考えてみる。

運用ルールを考えるさいに、気にしていることは、がちがちにはしないことです。どんどんいいように運用ルールの見直しをしていけるようにする。見直しができるように不可逆なルールにしない、ということに注意する。
ほんのり、最低限のコンセプトとルールを付与して、逐次見直しを繰り返すぐらいの軽い感じで始めていきたいのです。


●メモすることの有用性



改めてEvernoteを使って運用しようとしているわけですが、これはひとえに、GoogleDocsなどで、すでに自分のなかでメモすることの有用性がはっきりしてるからできることなのだろうと思いました。

もし本当に何も触ったことがない人は、運用ルールなんて気にしないで、メモしまくってまずは破綻前提で利用するべきです。やってみて、便利かどうか。便利なら、必要なところだけをピックアップして運用ルールを一新することで、もっと便利に活用できるということだろうと。
実際、わりとぐちゃぐちゃな状態でも、十分によかったりしました。たまに整理しようかなあと思って、昔のアイデアを見ると新鮮で、「そういやこんなこと考えたっけなあ」と感じることが一つの成果だったりしたのです。

大事なのは書いて、忘れること。忘れるために、書くわけです。目先の仕事に対する集中の妨げにならないように。思いついたアイデアは文書として不十分でもそのまま瞬間冷凍させておいて、それで忘れるわけです。
要は、アイデアの出所に栓をしてしまわないように開放させておけることだと思います。


●Evernoteを利用する動機/GoogleDocsに感じている不都合



GoogleDocsの欠点を補う形でEvernoteを利用していきたい。
補うといっても、現在GoogleDocsでは不都合に感じている点を払拭する意味合いなので、補助するという意味ではなくて、役割を分けるという感じ。


GoogleDocsに感じている不都合
  • ホームページなどのスタイル付きのドキュメントをコピペすると勝手に文書整形される。これはいらない。とめる機能もない。テキストエディタにワンバウンドさせていましたが、無駄な操作なので省けるものなら省きたい。

  • オンラインでないと利用できない。内容を見ることもできない。文書作成途中で回線エラーが発生すると、操作不能となって不安になる。

  • 動作が遅い。裏でいろいろ動いているからなのか、入力して日本語変換するだけでも、もっさりゆっくり処理されることもある。Chromeでも固まることもわりと多くて、体感頻度は一日数回。

  • 運用ルールなど特に決めていなかったため、現状のGoogleDocsはゴミ溜め状態。まあ基本はそれでも問題ないと思っている。少なくとも切り分けを行い負荷を減らす。再利用性を向上させるルールにする。

  • 依存度を減らしたい。Googleは何でもかんでも一緒くたにしていくつもりなのだろうけれど、依存度を減らす意味でも分けておきたい。


早い話が、ネタ帳としてEvernoteを利用したい。
大体、思いつくアイデアは、そのたびに落書きのように走り書きするので、整理は困難で当たり前なのです。ならば、思いつきアイデアだけを一箇所にしてしまうほうがいいだろうというところです。

GoogleDocsではレポートなどの文書も保管してあって、アイデアのメモと混在してしまうことで破綻は目に見えているのです。
整理を前提としてメモを取るなんて、窮屈でアイデアが限定されてしまいそうで嫌なので、多少煩雑になっても取り出しやすくて、保管しやすければ問題ない。これでGoogleDocsのほうも片付くと思えばよさそう。


●書く内容



思いついたことを残す。はっきり言って他人には無価値なもの。
基本的には文書と、あと画像。いろいろな利用用途があるようですが、これ以外は基本的に利用するつもりはない。
おもしろい画像があったら確保用に使う。まあ、そういう画像がマイドキュメントのあちこちに点在してしまっています。これを吸収する。

分類方法は、おいおい考えることにする。
整理方法の問題もあるけれど、基本的にたまっていく一方の運用がどこまで持つのかという話だと思う。
まあこれも後で。ドキュメントの整理が苦にならなかったら、書くのと整理するのを同時にやらなくても、全然平気です。


●使えそうなショートカット



使えそうなショートカットをメモしておきます。
同期F9
新しいノートを作成するCtrl+Alt+N
テキストとしてペーストCtrl+Shift+V
スタイルを削除するCtrl+Space

定期的に同期してくれるのがデフォルトなので、しばらくそれで利用しようと思っています。
理想を言えば、自動同期は切りたい。手動で、メモったら保存するようにF9(同期)を押すという運用です。できなくもないと思うのだけれど、もちろん同期忘れが心配なので多少は許容することにします。


●少し使ってみた感想(一週間ほど)



  • 長文はつらいかもしれない。プレーンの状態にしておきたいのだけれど、さすがに読みにくいかもしれない。

  • 管理PCすべてに入れないといけない。ブラウザベースでも扱えるけれど、恩恵を受けるためにはクライアントがよい。

  • アプリの起動が遅い。メモしか使わない用途でいいので、もっと軽いのがほしい。ただし、やっぱり立ち上がってしまえば、ブラウザベースよりも遥かに快適。おかげで、GoogleDocsを起動させるのが面倒くさくなってしまった。

  • iPodTouchでもアプリがあるので、同期しておけばいつでもアイデアを見直せる。まだまだ真価は解らないけれど、期待できそう。

  • GoogleDocsからの移行方法を調べる。


異なるツールなので、不都合は出るだろうけれど、使いながら少しづつ吸収していくつもりで、ゆっくり付き合っていきます。
使いながら、文書が増えたりしたときとかに、またいろいろ気づくようなことがあるでしょう。