アカウント名:
パスワード:
QuickDrawはどのように素早く円を描いていたのか?http://d.hatena.ne.jp/zariganitosh/20100318/1269006632 [hatena.ne.jp]
ジョブスの、流石と思わせる逸話もあり興味深いページですよ。
手前味噌で恐縮な話ですが、リンク先を読んで思い出した件がありまして。
中学時代にパソコン部でlogo [wikipedia.org]を初めて導入したとき、多角形を描かせるまでは各自で何とかなったのに、円が描けないことに気づいた。
顧問の教師も含めてみんなで思い思いに「円を描く方法」(アルゴリズムという言葉が当時の我々の中には無かった)を思案したが誰も成功しなかった。
約1時間後、部活動の終了間際の時間に歓声が上がった。ぶっきらぼうに多角形描画のアルゴリズムに1000(角形)を代入した生徒の画面に答えがあった。
積分の知識があれば、N角形の面積はNが大きくなるごとに円に近づくことも知っていたであろうが、当時の年齢では三角関数の知識すらない。
今思えば、なぜこれが部活動の経験で授業では無かったのだろうと不思議に思いますが。
そこで紹介されているDDA(Digital Differential Analyzer)は、ごく普通のパソコン誌で紹介されていて広まったテクニックだったので、8bit時代のパソコン少年なら誰でも知っているぐらいありふれた知識だったのですが、凡庸な身の上のおじさんから見ても、なんだか隔世の感がありますね。
初めて Bresenham のアルゴリズムに出会ったときはものすごく感動しました。直線の描画アルゴリズムとして紹介されることが多いですが、さまざまな場面で「補間処理」に使える、非常に応用範囲の広いアルゴリズムなんですよね。画像の回転とか解像度変換とか音声のサンプリングレート変換とかとか、いろんな場面で使ってきました。
その後時代が進んでCPUが速くなるにつれ、Bresenham を使うことは減りました。代わりに浮動小数点数を使った単純なDDAを使うように。(sqrtとかの算術関数はループから追い出すけど、加減乗除ぐらいは気にしない)可読性の点から、そういったコードの方がメンテしやすいんですよね。
さらに時代が進んで、今はsqrtなんかもループの中に入れたようなコードをばんばん書いてます。境界条件での動作チェックとかを考えると、DDAすら面倒で…
速度的に問題出たらDDAに書き換えようとか思うのですが、それで問題出ることがあまりないんですよね。線形探索だとかバブルソートだとかはオーダーが違うので問題になりやすいですが、Breseham の直線補間なんて、同じO(n)の範疇ですからねぇ…
最近はライブラリが豊富なので「既存のモジュールを組み合わせる」ようなプログラミングばかりでなんだか年々、プログラマとして退化していってるんじゃないかと思うことがたまにあります。
逆転の発想って、今の価値観で考えるからそうなのであって当時は、普通に(というかそれしか現実的な方法が無く)行っていた事だったりしますよね。
不定形領域カットアンドペーストは本当に難しい、QuickDrawの実装を読んでみたい、マッキントッシュ登場当時は言ってたような記憶があります。
リンク先で/.Jストーリーに回帰するとはおもわなんだ
MacPaint のソースコードが公開へ [srad.jp]
今回のストーリーのタイトル、この過去ストーリ踏まえると微妙でない?
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
にわかな奴ほど語りたがる -- あるハッカー
QuickDraw小話 (スコア:4, 参考になる)
QuickDrawはどのように素早く円を描いていたのか?
http://d.hatena.ne.jp/zariganitosh/20100318/1269006632 [hatena.ne.jp]
ジョブスの、流石と思わせる逸話もあり興味深いページですよ。
Re:QuickDraw小話 (スコア:1)
手前味噌で恐縮な話ですが、リンク先を読んで思い出した件がありまして。
中学時代にパソコン部でlogo [wikipedia.org]を初めて導入したとき、多角形を描かせるまでは各自で何とかなったのに、円が描けないことに気づいた。
顧問の教師も含めてみんなで思い思いに「円を描く方法」(アルゴリズムという言葉が当時の我々の中には無かった)を思案したが誰も成功しなかった。
約1時間後、部活動の終了間際の時間に歓声が上がった。ぶっきらぼうに多角形描画のアルゴリズムに1000(角形)を代入した生徒の画面に答えがあった。
積分の知識があれば、N角形の面積はNが大きくなるごとに円に近づくことも知っていたであろうが、当時の年齢では三角関数の知識すらない。
今思えば、なぜこれが部活動の経験で授業では無かったのだろうと不思議に思いますが。
Youthの半分はバファリンでできています。
Re: (スコア:0)
そこで紹介されているDDA(Digital Differential Analyzer)は、
ごく普通のパソコン誌で紹介されていて広まったテクニックだったので、
8bit時代のパソコン少年なら誰でも知っているぐらいありふれた知識だったのですが、
凡庸な身の上のおじさんから見ても、なんだか隔世の感がありますね。
Re:QuickDraw小話 (スコア:4, 興味深い)
初めて Bresenham のアルゴリズムに出会ったときはものすごく感動しました。
直線の描画アルゴリズムとして紹介されることが多いですが、
さまざまな場面で「補間処理」に使える、非常に応用範囲の広いアルゴリズムなんですよね。
画像の回転とか解像度変換とか音声のサンプリングレート変換とかとか、いろんな場面で使ってきました。
その後時代が進んでCPUが速くなるにつれ、Bresenham を使うことは減りました。
代わりに浮動小数点数を使った単純なDDAを使うように。
(sqrtとかの算術関数はループから追い出すけど、加減乗除ぐらいは気にしない)
可読性の点から、そういったコードの方がメンテしやすいんですよね。
さらに時代が進んで、今はsqrtなんかもループの中に入れたようなコードをばんばん書いてます。
境界条件での動作チェックとかを考えると、DDAすら面倒で…
速度的に問題出たらDDAに書き換えようとか思うのですが、それで問題出ることがあまりないんですよね。
線形探索だとかバブルソートだとかはオーダーが違うので問題になりやすいですが、
Breseham の直線補間なんて、同じO(n)の範疇ですからねぇ…
最近はライブラリが豊富なので「既存のモジュールを組み合わせる」ようなプログラミングばかりで
なんだか年々、プログラマとして退化していってるんじゃないかと思うことがたまにあります。
Re: (スコア:0)
逆転の発想って、今の価値観で考えるからそうなのであって
当時は、普通に(というかそれしか現実的な方法が無く)行っていた事だったりしますよね。
Re: (スコア:0)
私もそう思っているので、
リージョンのアルゴリズムのテクニカルな話とか聞いてみたかったな。
Re:QuickDraw小話 (スコア:1)
不定形領域カットアンドペーストは本当に難しい、QuickDrawの実装を読んでみたい、マッキントッシュ登場当時は言ってたような記憶があります。
Re: (スコア:0)
DDAによる直線描画はけっきょくのところ減算を繰り替えして除算していることになるから、それなら先に筆算方式で除算し累積誤差は固定小数点で扱えばより速いと、祝一平氏がOh!MZ誌で指摘していました。
DDAといえばカシオFP-3000を思い出します。TVAM、RGBS、パタリロ…
> 不定形領域カットアンドペーストは本当に難しい、
ポリゴンによるクリッピングのように思えますが、当時の標準的な教科書には載っているはずです。Sutherland Hodgmanあたりで検索してください。
Re: (スコア:0)
#ラインとかサークルとかペイントの出来栄えを雑誌上で競っていたことが懐かしい。
Re: (スコア:0)
リンク先で/.Jストーリーに回帰するとはおもわなんだ
MacPaint のソースコードが公開へ [srad.jp]
今回のストーリーのタイトル、この過去ストーリ踏まえると微妙でない?