今目が覚めました。もうダメ人間の仲間入りです。いや、前からか。 azouno氏からの質問もあったので、塗りつぶしのコードを書きます。 enum MapState{ LINE, Painted, UNKNOWN }; class Map{ MapState map; int width, height; Map(int x, int y){ this.width = x; this.height = y; this.map = new MapState[x][y]; for(int i = 0; i < x; i++) for(int j = 0; j < y; j++) this.map[i][j] = MapState.UNKNOWN; } isValid(int x, int y){ return (0 <= x && x < width && 0 <= y && y < height
横軸に時間,縦軸に位置をとり,これをグラフにしてみます (説明のため,グラフ中では横軸を x,縦軸を y と書いています). 厳密な等速直線運動ならば,このデータは直線で結ばれ,その傾きは速度を表します. しかし実験には誤差がつきもので,ものさしの誤差, 測定者のくせによる誤差,測定環境の変化による誤差など,いろいろな誤差が存在します. ですから,測定データは一直線上には並びません.だからといってデータの各点を のように繋げて折れ線グラフにしてもあまり意味がありません. このグラフの傾きは速さを表すはずですが, 折れ線グラフから傾きを求めることはできないですし, そもそも誤差を含んでいる点をそのまま結んでも仕方がありません.そこで のようにどのデータポイントからもあまり外れないように直線を引くのが妥当だといえます. 直線は1次関数ですから y = ax + b とおけ
最小二乗法は計測データの整理に使われる方法である。 n個のデータ(x1,y1),(x2,y2), .......(xn,yn)が得られたとする。 に最もフィットする直線をy=ax+bとすると、 でa,bが求められる。 以下詳しい解説が書いてあります。解説は上から順番に書いてありますが、適当に飛ばし読みしたいときは、以下をクリックしてください 最小二乗法の目的 最小二乗法の考え方 具体的な計算方法 一般的な場合 車が一定速度で動いているとする。それを測定して時間と位置との関係をグラフに表すと となる。 しかし、実際は測定誤差があるので、こんなふうにきれいに並ぶことはない。 こんなふうに並んだものに対して、エイヤっと線を引いてしまうわけである。 そして、この直線の傾きから車の速度を求める。 この、エイヤっと引いた線を、人力ではなく、もうすこしもっともらしく計算で決定しましょうとい
PhotoShop に初めて触れた人は、あまりに多彩なレイヤーや描画の ブレンドモード に戸惑うのではないでしょうか。しかも、PhotoShop のヘルプの記述は抽象的で感覚的な表現が多いので、いまいち用途や意味が不明だったりします。このドキュメントでは、実際に絵を描く上で役に立ちそうな実践的なサンプルを交えて、全ブレンドモードの意味を考えていきたいと思います。 このドキュメントでの変数や用語を定義しておきます。話を厳密にするために書いておくものですので、よく分からなければ読み飛ばしてもかまいません。Pa、Pb、Pn の3つの変数を使います。 Pa : 重ねられるレイヤー(下)の任意のチャンネル( RGB 3つのうちのどれか)の任意のピクセルの明度(PhotoShop のヘルプで「基本色」とされているもの)で、 0~255 の整数で表す。Pb : 重ねるレイヤー(上)上の、Pa と同じチャ
Adobe Photoshop,Paint Shop Pro,Gimp などのペイントツールにおいて、「レイヤー(Layer)を重ね、 描画モード(Blend Mode)を切り替え、透過率(Opacity)を与える。」のような使い方は、フォトレタッチだけではなく、 お絵描きするときにも頻繁に行われていることと思います。 描画モード(ブレンドモードとも呼ぶらしい)の操作については、画像を用いて具体的に説明しているホームページをよく見かけますが、 色を結合(合成)するための計算方法として、紹介、解説している書籍、ホームページとなると、ほとんど見かけませんね。 #これって大きく取り上げちゃダメな話なのかなぁ・・・?(^^; このページでは、この描画モードを数式として示します。 ソフトウェア開発者向けの非常にマニアックな内容となっていますが、 描画モードをサポートしているペ
Regular Expression FSA Visualizer 正規表現を可視化したFlash。正規表現がセルオートマトンでどのように求められているかを図解してくれます。 画面左上に正規表現を、画面右上にテストしたい文字列をいれると、その正規表現処理を可視化してくれます。あるいは画面中央のExamplesの中の1つをクリックしてもOK. 正規表現ってこうやって処理してるんだ。面白い。 via: information aesthetics 投稿者 Taka : 2006年02月25日 18:19 book bookmark はてなブックマークに追加 del.icio.usに追加 trackbacks this entry's trackback URL: http://www.fladdict.net/cgi-bin/mt3/mt-tb.cgi/474 このリストは、次のエントリーを参
矢沢久雄の早わかりGoFデザインパターン(11) 第11回 Template Methodパターン/Visitorパターン 早いもので、私の著者歴は15年ぐらいになります。いろんな記事や書籍を書いてきました。そんな中で、特に連載記事の場合は、いつも同じ書き方では読者に飽きられてしまうので、意識的に様々なパターンを使い分けています。「教科書のように堅苦しく解説する」「きさくな言葉で読者に語りかける」「師匠と弟子の問答形式にする」「図を多用した絵解きにする」...あれあれ、たったの4パターンしかないですね。誠にお恥ずかしい。そこで、今回は「クイズ形式で興味を引き付ける」という新しいパターンに挑戦させていただきます。よろしくお付き合いください。 【お役立ち度】★★★★★ ●第1問:Template Methodパターンとは、どのようなものでしょう? まず、Template Method(雛形メソ
OOPの概念を説明する際によく使われる、有名な例え話がいくつかあります。「クラスはクッキー型であり、生地からくり抜かれたクッキーがオブジェクトである」「多態性とは、犬に鳴けと命じると”ワン”と応え、猫に鳴けと命じると”ニャア”と応えることである」「自動車と船と飛行機は、乗り物に汎化できる」などです。きっと皆さんも、似たような例え話を聞いたことがあるでしょう。 「例え話は、概念を十分に理解している人だけにわかるジョークのようなものだ。はじめて学ぶ人には、例え話を使わない方がいい」と言う人がいます。確かに、突拍子もない例え話をしたら、かえって理解の妨げになるでしょう。しかし、適切な例え話を交えた説明の方が、イメージが広がって聞きやすいのも事実です。例え話を使うべきか、それとも使わない方がいいのか...結論が出ないまま、CommandパターンとStrategyパターンの説明をさせていただきます。
プログラミングテクニックの中には、「かっこいい!」と感動しちゃうものがありますね。たとえば、再帰、インターフェイス、メッセージフックなどです。再帰は、メソッドの処理の中で同じメソッドを呼び出すテクニックです。繰り返し処理をスマートに記述できます。インターフェイスは、複数のクラスに同じ構文のメソッドを強制的に実装させるテクニックです。多態性(異なるオブジェクトを同じ方法で使うこと)を実現できます。メッセージフックは、メソッドの呼び出しを横取りするテクニックです。既存のクラスのメソッドに任意の処理を挿入できます。今回紹介する2つのパターンは、これらのテクニックを応用しています。 【お役立ち度】★★★★★ ●再帰とインターフェイスを応用したCompositeパターン 奇抜な例で恐縮ですが、町内会の連絡網を思い浮かべてください。Aさん~Dさんの4件の家庭があって、順番にお知らせを伝えるとします。こ
23種類のGoFデザインパターンには、それぞれ親しみやすい名前が付けられています。今回紹介する2つのパターンの名前を直訳すると、「橋(Bridge)」および「装飾者(Decorator)」となります。どちらも構造に関するパターンに分類されているので、構造として橋を架けたような工夫、そして構造に飾りを付ける工夫であることが予測できます。オブジェクト指向プログラミングにおける橋と飾りとは、いったい何なんだろう...興味が湧いてきたところで本題に入りましょう。 【お役立ち度】★★★★★ ●拡張から実装に橋を架けるBridgeパターン 継承元のクラスをスーパークラスと呼び、継承先のクラスをサブクラスと呼びます。サブクラスの役割には、スーパークラスの抽象メソッドを適切に実装することと、スーパークラスの機能を拡張することがあります。 ここで、引数に与えられたデータを描画するdrawメソッド(抽象メソッ
親父の小言のように何度も同じ話をして恐縮ですが、とても大事なことなので聞いてください。GoFの23種類のデザインパターンは、生成に関するパターン、構造に関するパターン、振る舞いに関するパターンの3つに分類されています。このことから、オブジェクト指向プログラミングを上手に実践するには、生成、構造、振る舞いに関する工夫をすればよいことがわかります。GoFデザインパターンは、工夫のお手本集なのです。 個々のデザインパターンの本質(何が便利なのか)を見抜くコツは、どの分類に属しているかを確認することです。今回紹介するSingletonパターンは生成に関するパターンに分類され、Flyweightパターンは構造に関するパターンに分類されています。すなわち、オブジェクトの生成に関する工夫と、プログラムの構造に関する工夫です。 【お役立ち度】★★★☆☆ ●オブジェクトを1つだけしか生成させないSingle
プログラムの動作を分析する際には、大きく分けて2つの視点があると思います。1つは「処理が流れて行く」という見方です。これを図に表すと、フローチャートになります。もう1つは「状態が変化して行く」という見方です。これを図に表すと、状態遷移図になります。これら2つの視点は、プログラムに置き換える対象に応じて自然と使い分けられるものです。 プログラムの状態と聞くと、ピンと来ないかもしれませんね。早い話が、データの値が様々に変化することです。オブジェクト指向プログラミングでは、フィールドの値がオブジェクトの状態です。オブジェクトは、現在の自分の状態に応じた振る舞いをします。場合によっては、状態が変化したことを、他のオブジェクトに通知することもあります。その際に、何か工夫をしたくてウズウズしてきませんか。 【お役立ち度】★★★★☆ ●if文を使わずに、状態に応じた処理を行えるStateパターン 3つの
連載の第1回で一覧表に示したとおり、GoFの23種類のデザインパターンは、「生成に関するパターン」「構造に関するパターン」そして「振る舞いに関するパターン」の3つに大きく分けられます。このことから、OOPに関するとても重要なヒントが得られます。それは、OOPを上手に実践するには、生成(オブジェクトを生成する方法)、構造(クラスの関連付け方)、そして振る舞い(オブジェクト間のメッセージの渡し方)を工夫すればよいということです。これら3つを重要視することが、他の技法にはないOOPらしさなんだとも言えるでしょう。たったの3つだけだと思うと、ずいぶん気持ちが楽になりますね。今回紹介するBuilderパターンとPrototypeパターンは、どちらも生成に関するパターンに属するものです。どんな工夫なのか、順番に説明しましょう。 【お役立ち度】★★★★★ ●様々なオブジェクトを作ってくれるBuilder
図1●複数のクラスを1つのクラスに見せかけるFacadeパターン。もともと三つのクラスを使う必要がある機能(a)を,Facadeクラスによって一つのクラスに見せかけることができる(b) IT Proに、アラン・ケイ氏が2003年1月に来日した際のインタビュー記事があります。それによると、氏は、生物の細胞が複雑な構造を作り上げる様子からヒントを得て、オブジェクト指向を考案したそうです。細胞から細胞へメッセージを送る(メッセージ・パッシングする)ことで、目的の機能が実現されると考えるのです。筆者のような凡人には、思いもよらない奇抜な発想ですね。細胞は、プログラムにおけるオブジェクトに相当します。メッセージを送るとは、他のオブジェクトが持つメソッドを呼び出すことです。こう言ってしまうと、実に味気ないのですが。 アラン・ケイ氏は、1972年にSmalltalkというオブジェクト指向プログラミング言
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く