myugaruの色々構想中・・・!

「C#」「画像処理」「XNA未対応PCでゲームIDE作りの無謀な野望」

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  98  : 記事  0  : コメント  2322  : トラックバック  59

ニュース

myugaru
仕事(昔)=ヲタク系プログラマー~マスコミ系サポートデスク
仕事(今)=電子機器系サービス業
趣味a=パズルゲーム全般、シューティングは主に見学
趣味b=画像処理関係の勉強
趣味c=プログラミング言語の勉強
趣味d=アキバ系ヲタク
趣味e=芸能アイドル系ヲタク
d,e色の強いもう一つのブログ
最新目標=シューティングゲームを作る

わんくまりんく

わんくま同盟blog C#,VB.NET掲示板

ぶろぐつーる

あわせて読みたい

はてなりんぐ

書庫

日記カテゴリ

ギャラリ

お友達

リンク

前エントリーでコメントいただいて、私自身も気付いてなかったのですがどうやら2つの話題が混在しているようです。ここで分離したいと思います。

1.リトルエンディアンかビッグエンディアンかの話題
すみません、なんとなくこの話題に流れている節も感じられましたが、これはもう現在はリトルエンディアンの勝利で決まりなのでしょう。私もリトルエンディアンで大賛成です。アドレスの上位に向かって桁が大きくなるのはすごく当たり前に思えます。アセンブラレベルで言えば数値のインクリメントなどを行う場合に数値の大きさ(占める領域の大きさ=バイト数)を気にせず数値の格納されたポイントにたいしてインクリメントするというのはとても都合がよさそうです。しかし人間界の数値はどういうわけだか記述はビッグエンディアンで行います。読む場合も上位から読みます。これは最初に数字の記述を考えた人がひねくれてたのではないでしょうか?そして私の結論的な意見としては人間の書く上位が左にある数値の方がむしろ不自然に思えます。配列の配列で添え字が左へ増えていくかという話題についてもこちらに属すると考えれば、つまり平面を表していない2次元配列の場合なら私にはコンピュータ的にリトルエンディアンにしても、人間的にビッグエンディアンにしてもどっちもアリかなと思います。

2.XY座標のX座標を左に書くか右に書くかの話題
私が前エントリーでしたかった話題はこの2の話題です。まず1と区別したいのは平面を表すXとYは対等な関係ということです。どっちが上位でもありません。それを上位下位の区別しなくてはいけなくなったのは、それを一次元的に格納するコンピュータアーキテクチャの勝手な都合であり、それを意識しないと使えないのは不便だと感じたのでエントリーしたというのが単純な経緯です。添え字の順番は私は数学という学問がルールでXを左に書くと言っているのですからそれに習った方がわかりやすいのではないか?と思っているということです。それに準拠するように言語を調整するのは言語作者の手腕でしょうから今のような平面を表す2次元配列でXを左に書けない言語は納得いかないと思っているわけです。

区別になったかなあ。ちょい自信ありません・・。

19:00追記

コメントたくさんもらえて実は本当にびびっています^^;;。さすがはわんくま同盟のブログですねえ。うかつな発言は本当にできないなと性根入れて頑張ろうとおもいます。

今のところですが、私の感じでは皆さんも多かれ少なかれコンピュータってのは「人が気を回してやんなきゃ使えねえんだよ」って思っていらっしゃるんですよね。まだまだSFの世界のように人の上をいくようなコンピュータ社会ってのはほど遠いってことですねえ。仕方ないからYXの順番に書いてやるよって事でOKでしょうか?違う?^^;;

投稿日時 : 2008年2月22日 12:15

コメント

# re: 配列の話になってしまいましたが・・ 2008/02/22 12:47 シャノン
> それを上位下位の区別しなくてはいけなくなったのは、それを一次元的に格納するコンピュータアーキテクチャの勝手な都合であり

それを言ったら、そもそも X と Y が対等であるデータ構造を表現するために用意されたのではないジャグ配列を XY 平面に使おうとしたプログラマの勝手な都合、とも言えると思いますが。

# re: 配列の話になってしまいましたが・・ 2008/02/22 13:03 myugaru
To シャノンさん
私はその勝手なプログラマにはなりたくないのですが、言語に平面を表す機能が存在していないというのは事実です。というとコンピュータアーキテクチャの責任ではなくて言語作家やらライブラリ作家に責任転嫁したいところですかねえ・・・。たとえばライブラリ作家の用意した平面に対するアプローチは
SetPixel
なり
GetPixel
みたいなメソッドですよねえ。メソッドにしちゃえば実装は見えませんよって・・・まあ確かに正論ですが、グラフィックとか使ってるとやっぱりメソッドでのアクセスでは納得jいかないです。どうしてもうちょっとがんばって配列の仕組みの根底から攻めてくれなかったんだろうって思うのであります。


# re: 配列の話になってしまいましたが・・ 2008/02/22 13:29 とっちゃん
CG の世界(平面)の配列は、行列と「みなして」データを構成してますからね。
実際は、一次元配列でしかないわけで、それをあたかも2次元であるかのように見せているのが現実ではないかと。

この辺は、言語のレベルではなく、コンピュータアーキテクチャの限界から来てる現実的な落とし所な気がします。

で、どうしても、そういうのがほしいのなら...
operator[][] を作る以外には選択肢はないんだろうなぁと...
#今のところ...これを許す言語はないと思うけどw


# re: 配列の話になってしまいましたが・・ 2008/02/22 13:31 なちゃ
汎用的なプログラミング言語は数学用じゃないからです。
ってだけな気がしますけど…
データを扱うという観点からは、行列方向の方が自然なわけで。

よって専用の言語やライブラリを使うと言うだけなのでは?
個人的にはピクセルデータへのアクセスなんて意味でも、データが主体な気がします。
もっと一般的な座標へのアクセスとなるとどうせなんらかの演算がはいる気がします。


# re: 配列の話になってしまいましたが・・ 2008/02/22 13:31 シャノン
> グラフィックとか使ってるとやっぱりメソッドでのアクセスでは納得jいかないです。

じゃあグラフィック用の言語を使えば? って話になるです。
いや、コンピュータアーキテクチャに対応を求めるならばグラフィック専用のマシンですか。

C#は、2次元データ構造を表すのによりふさわしい2次元配列を導入したのですから、C#においてジャグ配列にけちをつけるのはお門違いです。

メソッド(関数)ではダメならば、Cではどうにもなりませんが、C++でもC#でも[]演算子のオーバーロードができますから、xy順になるようなクラスは作れるでしょう。
それが[]演算子として自然かどうかは別として。

C++もC#もJavaも汎用言語ですから、2段のジャグ配列を平面データとして扱うとは必ずしも限りません。

# re: 配列の話になってしまいましたが・・ 2008/02/22 13:32 シャノン
> operator[][] を作る以外には選択肢はないんだろうなぁと...

operator[] で operator[] を実装したクラスを返せば可能じゃないですかね。

# re: 配列の話になってしまいましたが・・ 2008/02/22 14:07 ghost_shell
ぼくはX軸を横、Y軸を縦とするXY平面の概念を配列の宣言に持ち込むと逆になってしまう現象、ただそれだけのことだと思います。

x,yが逆ならX軸を縦、Y軸を横にすべきだ!(XY平面の概念を捨てる)
・・・XY平面は直観的だと思いますが、配列の宣言方法もまた情報構造として直観的ではないでしょうか。

[x][y]はxを選び、次にYを選んでいるので、xにyをぶら下げるのが正しい情報構造だ!(データ宣言が正しくない)

そのように考えたところで状況は解決しないし、不満も残り続ける...

# re: 配列の話になってしまいましたが・・ 2008/02/22 15:08 ゆーち
本題とはずれた概念の話として、あちきが以前から不思議に思っているのは・・・
そもそもなぜ1アドレスの格納幅の単位が8ビットなのか、ってとこですが・・・

あ。
ぜんぜんかんけーねぇ(^-^;

# re: 配列の話になってしまいましたが・・ 2008/02/22 16:16 れい
XYどっちを先に書くのかも、
どういう座標系が普通なのかも、
ただの慣例ですねぇ。

xyでxが先っていうのも分野が限られていて、
相対論ではA_yxだったりしますし。
#軸の指標にxyを使うのも同様にただの慣例ですよねー

ognacさんが前書いていたように
感覚と相容れないと気になる人もいても当然で、
一般人との齟齬はできるかぎり無いほうがいいですが、
パフォーマンスとか手間とかを考えると
ある程度仕方ないかなと。

> そもそもなぜ1アドレスの格納幅の単位が8ビットなのか、ってとこですが・・・

1アドレスの格納幅の単位=バイトで
8ビット=「オクテット」ですね。
元々は2^(2^3)でキリがいい、というだけです。
2^7や2^10や2^16でバイトな処理系もあります。

でも2^8がちょうどいいと、私も思います。
正負使っても100より大きいし。
ビット数も10より小さいし。
シフト演算もしやすいし。
加算器の数もちょうどいいくらいだし。

# re: 配列の話になってしまいましたが・・ 2008/02/22 19:05 myugaru
To とっちゃんさん
operator[][]になりますかやっぱり。難儀ですねえ。
コメントありがとうございます。

To なちゃさん
はじめまして、コメントありがとうございます。
そんなに私は要求を高めていると思ってもいないのですが、実際、義務教育の範囲内で平面をXYで表しましょうとか教えているので、どうしてコンピュータ上ではYXになってるのかな?って。偉い先駆者がそれこそおっしゃってるような演算だとかの都合があって色んな意味を持たせてそう実装したんだろうけど、それでも表面だけ見て思っているわけです。まあシロウト(=私ですが)ってのはこういう事でも疑問に思うんだなって思っていただければよいかと^^;

To シャノンさん
すみませんなちゃさんへのコメントに書いたとおり、私はそれほど高い要求をしている気は全然してないので専門言語がどうして出てくるのか逆にそれも疑問に思ってしまいます。すみません、きっと普通の技術者さんには当たり前すぎることなのでしょう。私が勉強不足だったりするのかもしれません。でも私にはそれが疑問であることには変わりがないです。あ、でも色々おもしろいアイデアもいただけているのでエントリーしてよかったなと思っています。

To ghost_shellさん
私はコンピュータの方がやっぱり後から出てきた技術だったりするので上にも書いてますが義務教育で教わっている自然数学の慣例にコンピュータが色々とあわせるべきじゃないのか?くらいの気でエントリーしたしだいです。でも誰も文句言わずにグラフィックだってプログラムしている現実があるわけですから言っても仕方なかったですねえ。どうもコメントありがとうございます。

To ゆーちさん
はじめまして。コメントありがとうございます。私なんていくらでも皆様の逆鱗に触れまくるエントリーができるような非常識な疑問ネタがありますよ!SQLのSelectで返った表とかIEnumeratorが返す列挙がどうして読み取り専用なんだろう?とか。言ったらマジで笑われるか上司に怒られそうなことを、いつもは”理解した振り”という皮かぶって黙ってますが色々不思議がっているのであります。

To れいさん
はじめましてコメントありがとうございます。掲示板でお名前見かけていました。
確かにパフォーマンスが落ちるってのは自分もそれは困りますので駄々こねるのはブログ上だけであります^^;8ビット256ってのは英語圏の人にとっては自分たちの言葉であるアルファベットを表すには都合よい数量だったと聞いたことがあります。日本人だったらいきなり16ビットとかからはじめるんじゃないでしょうか?でも私は個人的にはれいさんと同じで1byteが8ビットってのは丁度いいなって思います。


# re: 配列の話になってしまいましたが・・ 2008/02/23 0:58 れい
> はじめましてコメントありがとうございます。
失礼しました。初めてでした。

> 今のところですが、私の感じでは皆さんも多かれ少なかれコンピュータってのは「人が気を回してやんなきゃ使えねえんだよ」って思っていらっしゃるんですよね。
> まだまだSFの世界のように人の上をいくようなコンピュータ社会ってのはほど遠いってことですねえ。
> 仕方ないからYXの順番に書いてやるよって事でOKでしょうか?違う?^^;;

当事者意識というのでしょうか。
コンピューターや言語に対する態度の違いが明白に出てる気がします。
myugaruさんは利用者の立場で、使い勝手が悪いと言っている。
他の人は、言語の仕様や作った人の事情を述べたり、他の解決策を述べている。

極端に言うなら…。
myugaruさんは「SFの世界のように人の上をいくようなコンピュータ」が出てくることを待ち望む人ですが、
他の人は「SFの世界のように人の上をいくようなコンピュータ」を「どうやって作るのか」を考えている人ですね。

「やだなぁ」というだけなのは文明の恩恵を受けるだけの人。
「ならどうしたらいいか」を考えるのが文明を作る人です。

言語に納得がいかないなら新しい言語を作りましょう!
作るまでいかなくとも、
それはどうしてそうなっているのか、
どうすればよりよいものが実現できるのか、
それを考えましょう!

#先人がいろいろ考えた結果、添え字の順番は他の要素に比べて「些細なこと」だということに現状ではなってるようですね。

# re: 配列の話になってしまいましたが・・ 2008/02/23 6:34 NyaRuRu
>言語に納得がいかないなら新しい言語を作りましょう!

今だと言語を作るコストが非常に下がっているので,実際やってみるといいと思うんですよね.
とりあえずmyugaruさんが自分の思うところを体現した言語を作って公開してみて,「こんなの作ってみたけど使い勝手どう?」ってのが良いんじゃないかと.

# re: 配列の話になってしまいましたが・・ 2008/02/23 6:40 NyaRuRu
>仕方ないからYXの順番に書いてやるよって事でOKでしょうか?

とりあえずこのエントリおすすめです.
http://d.hatena.ne.jp/essa/20080131/p1

私自身は,環境は自分で帰られるものだという考えでいたいと思っています.

# re: 配列の話になってしまいましたが・・ 2008/02/23 7:07 NyaRuRu
もう一点.
Mathematica ならお望みの振る舞いをしてくれるので,用途によってはお勧めです.

matrix = {{Cos[theta], 0, -Sin[theta]}, {0, 1, 0}, {Sin[theta], 0, Cos[theta]}};
に対して,
matrix[[1, 3]] は -Sin[theta] が返ります.

また,Mathematica なら話をテンソルに一般化しても道具が揃っていて比較的扱いやすいのがよいですな.
http://reference.wolfram.com/mathematica/guide/Tensors.html
http://reference.wolfram.com/mathematica/tutorial/VectorsAndMatrices.html


# re: 配列の話になってしまいましたが・・ 2008/02/23 15:28 myugaru
To れいさん
こんにちわ、コメントありがとうございます。
>myugaruさんは利用者の立場で、使い勝手が悪いと言っている。
>他の人は、言語の仕様や作った人の事情を述べたり、他の解決策を述べている。
>myugaruさんは「SFの世界のように人の上をいくようなコンピュータ」が出てくることを待ち望む人ですが、
>他の人は「SFの世界のように人の上をいくようなコンピュータ」を「どうやって作るのか」を考えている人ですね。

ああ、そうですねえ。図らずも私がユーザーサポートをしていた時期が長かったのが露呈した形になってしまいましたねえ(笑。私はユーザーの意見を「聞いて」それをSEに「伝える」役目してました。私は「作る」という発想に繋がる神経が退化しちゃってるのかもですねえ。なるほどちょっと考えや見方を変えてみようと思いました。ありがとうございます。

To NyaRuRuさん
こんにちわ、コメントありがとうございます。
色々参考になるエントリーやツールへリンクいただきありがとうございます。上にも書きましたが作ればいいということには職業病的に神経が向いてなかったようです。時間が出来ましたら実践してみたいと思っています。


# re: 誰が書いても同じコード幻想 2008/03/27 9:37 凪瀬 Blog
re: 誰が書いても同じコード幻想

# 意識せず凪瀬さんに反旗を翻したmyugaruが白旗を振ります 2008/03/27 15:11 myugaruの色々構想中・・・!
意識せず凪瀬さんに反旗を翻したmyugaruが白旗を振ります

Post Feedback

タイトル
名前
Url:
コメント