プロシージャルで街を作る~建造物と道路のプロシージャル生成(1) ゲーム開発や映像制作で必要なのは、キャラクタとテクスチャ、そして植物だけではない。舞台が都市の作品であれば街自体も作り込まなくてはならない。シナリオが一方通行のリニア・ストーリー展開であれば、描かれる街並みやその舞台となる建物だけ手作業で作ってもいいが、例えば航空機を扱ったフライト・ゲームや、神の視点でプレイするリアルタイム・ストラテジー・(RTS)ゲームなどでは、背景物として大局的な街並みが必要になることが多い。 この、「街の3Dグラフィックスのプロシージャル生成」というのも、近年では注目されてきている技術なのだ。 この分野の研究を精力的に行っているのはスイス・チューリッヒ工科大学のYoav I H Parish氏とPascal Muller氏だ。 2人が最初に開発したのは、水と陸の領域を与えると、内蔵されたロジック・ルー
[CEDEC 2012]毛皮表現用プロシージャルテクスチャ生成技法はモフモフウサギの夢を見るか? 「実写画像を用いたShell Texture自動生成手法」 ライター:西川善司 宇梶弘晃氏(早稲田大学理工学部・森島繁生研究室)。論文には共同研究者として小坂昂大氏,服部智仁氏,久保尋之氏,森島繁生氏の名前が連ねられている CEDEC 2012最終日となる8月22日,早稲田大学の宇梶弘晃氏による「〜ここまで来ているビジュアル系技術〜 実写画像を用いたShell Texture自動生成手法」と題したセッションが行われた。 昨今ではプログラマブルシェーダ技術の発展により,多くの物質の表面状態をかなり正確に描画できるようになってきているのだが,ゲームグラフィックスに代表されるリアルタイム3Dグラフィックスで,いまなお正確な表現が難しい要素に「毛髪」や「毛皮」がある。 人間の頭髪表現は,テクニカルデモ
普及期を迎えたスマートフォンの代表的なOSの一つである「Android」向けのソフトウエア開発において、素早くアプリケーションを実現できる開発ツールとして注目されているのが、米Googleが提供する「App Inventor for Android(以下、App Inventor)」である。このApp Inventorを使えば、GUI(グラフィカルユーザーインタフェース)上のプログラム部品をマウスで操作することにより、Android用のアプリケーションを比較的簡単に開発できる。 具体的には、あらかじめ用意されたUI部品を開発画面上にドラッグしてアプリケーションの表示画面をデザインしたり、「ブロック状の部品」をパズルのように組み合わせて挙動を実装したりできる。コードを全く書かずにアプリケーションを実現できるので、開発者はプログラミング言語の仕様や開発ツールのAPI(アプリケーションプログラミ
はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28
原始、ゲームは乱数とともにあった。インベーダーが弾を打つタイミングはでたらめで、ゲーム&ウォッチのパラシュートがどこに着水するかは誰も知りえなかった。 近年、ゲームは乱数を必要としない。きちんとしたストーリー、練りに練られたレベルデザインに沿って遊ぶゲームにおいて、コンピュータの気まぐれで展開が変わるなどもってのほかだ。 昔のゲームがなんで好んで乱数を使っていたかというと、そうした方が何度も遊んでもらえたからだ。乱数を使えば、遊ぶたびにゲームの展開が変わり、新たなチャレンジが楽しめる。特に昔のゲームは1プレイ5分とか非常に短い時間で終わるものが多かったため、乱数で変わる新たなチャレンジを何度も遊び、ハイスコアを更新しては自分の上達を確認するというのが普通だった。 最近のゲームはそういった遊び方はしない。1プレイ40時間とかいうゲームでは、乱数に頼らなくても同じ展開にめぐりあうことはない。乱
ここでは、プログラムなどでよく使用されるアルゴリズムについて紹介したいと思います。 元々は、自分の頭の中を整理することを目的にこのコーナーを開設してみたのですが、最近は継続させることを目的に新しいネタを探すようになってきました。まだまだ面白いテーマがいろいろと残っているので、気力の続く限りは更新していきたいと思います。 今までに紹介したテーマに関しても、新しい内容や変更したい箇所などがたくさんあるため、新規テーマと同時進行で修正作業も行なっています。 アルゴリズムのコーナーで紹介してきたサンプル・プログラムをいくつか公開しています。「ライン・ルーチン」「円弧描画」「ペイント・ルーチン」「グラフィック・パターンの処理」「多角形の塗りつぶし」を一つにまとめた GraphicLibrary と、「確率・統計」より「一般化線形モデル」までを一つにまとめた Statistics を現在は用意して
素朴なBigtable、できること できないこと:分散Key-Valueストアの本命「Bigtable」(2)(1/2 ページ) RDBとは別の、クラウド時代のデータベースとして注目を浴びている「分散Key-Valueストア」。その本命ともいえる、Googleの数々のサービスの基盤技術「Bigtable」について徹底解説 あまりにもRDBとは異質な「Bigtable」 前回の「もう1つの、DBのかたち、分散Key-Valueストアとは」では、連載第1回目として、クラウドコンピューティングにおける新しい潮流である「リレーショナルデータベース(RDB)から分散Key-Valueストア(分散KVS)への移行」が、どのようなパラダイムシフトをもたらすのかを解説しました。今回からは、グーグルが運用する代表的な分散KVS「Bigtable」の内部構造を紹介し、クラウドの本質をより深く掘り下げます。 前
100×100の格子上に四角形が32個あります(図1)*1。ある四角形を新たに格子の上に置いたときに,元からある四角形のうち,これに重なるものの番号を示してください。ただし,この問題で扱うすべての四角形のX,Y座標は,0から100までの整数値をとることになります。 私は待ち合わせが苦手です。人の顔を覚えるのがまったく不得意で,ましてや多くの人の中から見つけ出すとなるともうパニックになってしまうからです。そういうときに限って携帯電話を忘れていたりして…。 「多量のデータの中から条件に合致するものを探索する」ことは本当に大変です。一番の問題は,時間がかかるところでしょう。1対多で検索する場合はともかく,多対多で探索するときには,アルゴリズムの優劣がモノをいいます。今回はその一例として「四角形の重なり具合を調べる方法」を取り上げ,ここからアルゴリズムの工夫の仕方について紹介します。 今回紹介する
30分プログラム、その653。サイコロを100回振って、各目の出る割り合いを求めてみる。 ソーシャル・ネットワーキング サービス [mixi(ミクシィ)]にインスパイアされました。 問題2.1〜6の目が出るサイコロを100回振って、1〜6の目が出る割合を求めるプログラムを作成せよ #include<stdio.h> #include<stdlib.h> #include<time.h> void main() { } includeするヘッダファイルが全部指定されてるなんて、親切な問題ですね。 せっかくなので、みずぴー日記で教えてもらったData.Mapを使ってみました。 使い方 *Main> rollDice 100 [(1,21.0),(2,17.0),(3,18.0),(4,13.0),(5,14.0),(6,17.0)] ソースコード import System.Random im
プログラムの実行に掛かる時間を把握しておくのは、プログラミングを行う上で基本的な注意点です。今回は、計算量のオーダーについて学びながら、TopCoderのMedium問題を考えてみましょう。 プログラムの実行時間 業務としてプログラミングをされている方には釈迦に説法かもしれませんが、プログラムの実行に掛かる時間を把握しておくのは、プログラミングを行う上で基本的な注意点です。そしてこれは、TopCoderなどのコンテストでプログラムを組む際にもよく当てはまります。通常、こうしたことは感覚的に理解している方がほとんどだと思いますが、具体的にどれくらいのループを回すと何秒掛かる、といった基準を持っている人は少ないのではないでしょうか? 非常に基本的なことですが、プログラムの実行時間に関して再確認しておきたいと思います。 TopCoderの制限に関して TopCoderでは、実行時間およびメモリ使
作成者: 上田悦子, 最終変更者: 怡土順一, 最終変更リビジョン: 357, 最終変更日時: 2007-12-26 14:22:07 +0900 (水, 26 12月 2007) ■ Condensation OpenCVには,推定器の一つとしてCondensation(パーティクルフィルタ)が実装されている. リファレンス マニュアルにもあるように,アルゴリズムの詳細は, http://www.dai.ed.ac.uk/CVonline/LOCAL_COPIES/ISARD1/condensation.html を参照されたい. ここでは,特にOpenCVに実装されているCondensationアルゴリズムの関数の使用方法について述べる. #include <cv.h> #include <highgui.h> #include <ctype.h> #include <math.h>
Haskellなどで人気の1行エラトステネスの篩は、アルゴリズム本来の計算量より遅いらしい。 sieve (p : xs) = p : sieve [x | x <- xs, x ‘mod‘ p > 0] LtU:The Genuine Sieve of Eratosthenes Wikipedia:en:Sieve of Eratosthenes それを受けて、LtUで以下の速いHaskellコードがあった。 primes = 2 : xor [3..] (composites primes) composites (p:ps) = cs where cs = (p*p) : xor (map (p*) (xor ps cs)) (composites ps) xor (x:xs) (y:ys) | x==y = xor xs ys | x<y = x : xor xs (y:ys) |
データ構造の選択次第で天国と地獄の差:コーディングに役立つ! アルゴリズムの基本(2)(3/3 ページ) この木何の木、木構造 「木構造(根付き木)」と呼ばれるデータ構造について説明します。リンクリストは直線的にノードがつながっているデータ構造でしたが、木構造は木のような形でノードがつながっているデータ構造です。 木構造はデータを持つノードで構成されています。 ノードの中には1つだけルート(根)というノードがあります。図にした場合、一般的に一番上に書かれます。 2つのつながっているノードを見たとき、ルートに近い方を親ノード、ルートから遠い方を子ノードといいます。 あるノードの親ノードは1つだけしかありません。子ノードは複数あります。子ノードは1つの場合もあり、1つもない場合もあります。 ルートノードには親ノードがありません。親ノードがないのはルートノードだけです。 最も末端のノードをリーフ
メール・サーバーと通信して,受信しているメールの内容をメールボックスから読み出し,タイトル(Subject)の一覧を表示するプログラムを作ってください。 私は昔から,ほかのパソコンや通信機器につないでデータのやり取りをする通信系プログラムの開発に携わっていました。今でこそイベント・ドリブンという言葉は一般的ですが,「何かが来たらそれに合わせた処理をして,また受け取りを待つ」処理を初めて覚えたのは通信系プログラムの開発を通じてでした。 通信系のプログラムはアルゴリズムの勉強に向く 「AとBがデータをやり取りする」という考えは,ほとんどのプログラムで出てきます。今回のテーマであるインターネットで使われているプログラムなどはもちろん,データベースもそうですし,GUIの処理でも似たようなことをしています。もっと単純に,クラス間通信や関数同士を連携させたいといったときにも利用できます。また,「ややこ
マルコフ連鎖と形態素解析でランダムな文章を生成する 2023-06-08-1 [Programming][NLP][IIR][WebAPI] 15年前に書いた記事のリニューアル版です。 RSS を読み込んでランダムな文章を生成する[2008-09-07-3] 前回と同様、bigram language model に基づく、ランダム文生成を行います。 ある単語の次に現れる単語の分布を用いて、文章を生成していくだけです。 形態素解析(日本語の単語の認識)は、Yahoo!デベロッパーネットワークのテキスト解析 API の日本語形態素解析 (V2) を使います。 ベースとなるテキストデータは「日本国憲法」(nkkp.txt) を使います (ref. [2023-06-07-1])。 プログラム mamarkov-build.pl で、テキストデータ (nkkp.txt) を形態素解析し、「ある単
JGraphT JGraphTは、Javaのグラフライブラリです。グラフの描画ではなく、グラフ理論のモデルとアルゴリズムの方にフォーカスしています。とても使いやすかったので、紹介してみます。 無向グラフ UndirectedGraph<String, DefaultEdge> g = new SimpleGraph<String, DefaultEdge>( DefaultEdge.class); g.addVertex("a"); g.addVertex("b"); g.addVertex("c"); g.addEdge("a", "b"); g.addEdge("b", "c"); System.out.println(g.vertexSet()); System.out.println(g.edgeSet()); System.out.println(g.edgesOf("c"));
以下、すべて Visual C++ で作成していますが、 すべて確認しているわけではありませんが Linux 上の gcc でも動くはずです。 gcc でも Visual C++ と同様に C 方式のコメント (/* */) と C++ 方式の コメント (// ) の両方が使えるようですから、多分大丈夫だと思います。 但し、Linux では 日本語は euc にしなければいけません。また math.h をインクルードした ソースファイル sample.c をコンパイルする場合には gcc -lm sample.c のようにする必要があります。 実行ファイルは無指定では a.out になります。 以下のプログラムは単なるサンプルで、コードを勝手に使用しても 構いません。但しバグがあっても当方では責任を持ちません。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く