メイン コーダーズルーム【スクリプト系】 移動についてのアルゴリズム? | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
smoke123 | Åê¹ÆNo.24678 投稿日時: 2006-4-4 14:39 |
新米 居住地: 投稿: 17
使用環境:
Windows Vista FLASH CS4 Flash Player 10 |
移動についてのアルゴリズム? ↑のように(例えば16×16ピクセルの)格子で区切られた座標空間を 座標A(x1,y1)からB(x2,y2)へ直線移動したときに、通過する全ての区画と 通過した順番を知るにはどのような方法が良いのか考えています。 直線と格子の交点を1つ1つ求めていけばいけそうではありますが、 処理が複雑になりそうです。また、交点の座標を求める必要はないので、 もっと簡単な方法があるのではないかと考えています。 もし、なにかアイディアがありましたらよろしくお願いします。 |
anko | Åê¹ÆNo.24697 投稿日時: 2006-4-6 11:54 |
半人前 居住地: 投稿: 38
使用環境:
MAC_G4 FLASH5,FLASH MX2004 |
Re: 移動についてのアルゴリズム? 私にはよく分かりませんが、
二点間に直線を引くのを画面的に1ピクセルが16pxになるくらいにズームしたと考えて、 ブレゼンハムアルゴリズムってのが、ヒントになりませんか?? 自分にはなんの事やら、さっぱり?? 分かったら教えてください。 |
smoke123 | Åê¹ÆNo.24704 投稿日時: 2006-4-6 16:32 |
新米 居住地: 投稿: 17
使用環境:
Windows Vista FLASH CS4 Flash Player 10 |
Re: 移動についてのアルゴリズム? まだ(端点の処理に)バグがあるようですが、
1ピクセルを16ピクセルにズームしたと考えたブレゼンハムです。 実は僕も始めにブレセンハムを考えたんですが、 「通過する全ての区画」にはならないようです。 直線と格子の交点を求めていく方向で考える必要があるかもしれません。 |
anko | Åê¹ÆNo.24705 投稿日時: 2006-4-6 17:43 |
半人前 居住地: 投稿: 38
使用環境:
MAC_G4 FLASH5,FLASH MX2004 |
Re: 移動についてのアルゴリズム? お?スゴイじゃないですかぁ
どんな仕組みですか? |
smoke123 | Åê¹ÆNo.24707 投稿日時: 2006-4-6 18:38 |
新米 居住地: 投稿: 17
使用環境:
Windows Vista FLASH CS4 Flash Player 10 |
Re: 移動についてのアルゴリズム? ブレゼンハムのアルゴリズムについては
No007-07 直線描画 を参考にしました。 検索するとアルゴリズムの説明をしているサイトが沢山あります。 しかし実装方法が微妙に違っていたりして、考察中です。 FLAファイルはこちらですが、 かなりわかりずらいと思います...。参考まで。 |
みっく | Åê¹ÆNo.24731 投稿日時: 2006-4-7 13:31 |
常連 居住地: 尾張 投稿: 116
使用環境:
PC:iBook G4 (1.42GHz) OS: (10.4.10) FL: & |
Re: 移動についてのアルゴリズム? あまり具体的な答えではないのですが
その昔ラインの描画方法には二通りある様な事を 何かで見た気がします。 ■■ ■■ ■■ と言うのと ■■■ ■■■ ■■ 参考になるか分かりませんが、頑張って下さい。
|
anko | Åê¹ÆNo.24740 投稿日時: 2006-4-7 18:24 |
半人前 居住地: 投稿: 38
使用環境:
MAC_G4 FLASH5,FLASH MX2004 |
Re: 移動についてのアルゴリズム? ankoです。
自分も作ってみました。 全部の点を拾って行くタイプです。 http://www.city-walker.net/test.html 確かにsmoke123さんの言われたように、直線と格子の交点を出す方が速いのでしょうね。 理屈的にはy軸と交差したポイントの左右両側のブロック、 x軸と交差したポイントの上下のブロックは 必ず通過していますからね。 |
smoke123 | Åê¹ÆNo.24741 投稿日時: 2006-4-7 18:57 |
新米 居住地: 投稿: 17
使用環境:
Windows Vista FLASH CS4 Flash Player 10 |
Re: 移動についてのアルゴリズム? >anko さん
いいですねー。 端点の処理もばっちりのようですね。 (もしよろしければ計算部分のソースコードを公開して頂けないでしょうか...?) 直線と格子の交点を求める方法は確実ですね。 >みっく さん ■■■ ■■■ ■■ となる、無駄なく高速な線分描画アルゴリズムが理想的だと思います。 直線と格子の交点を求めずに通過する区画を調べる方法も 引き続き考えていきたいと思います。 |
anko | Åê¹ÆNo.24743 投稿日時: 2006-4-7 21:28 |
半人前 居住地: 投稿: 38
使用環境:
MAC_G4 FLASH5,FLASH MX2004 |
Re: 移動についてのアルゴリズム? ankoです。
当方FLASH5ですし、難しいscriptは書けませんが。参考までに 最初にステージに16×16サイズの、色が変る仕込をしたMCを600個複製します。 横30×縦20個、d0?d599の名前を付けておきます。左上起点(0,0) for (var i = 0; i<600; i++) { damblock.duplicateMovieClip("d"+i, i); xx = (i%30); yy = Math.floor(i/30); this["d"+i]._x = xx*16; this["d"+i]._y = yy*16; } ----------- 次のは球のMC「A」に書いたscript onClipEvent (enterFrame) { mx = _root.B._x-_x;//A?B間のX距離 my = _root.B._y-_y;//A?B間のy距離 xL= Math.pow ( myx, 2 ) ;//2乗 yL = Math.pow ( myy, 2 ) zL = Math.floor(Math.sqrt( xL+yL));//三平方の定理でA?B間の直線距離を出す wx = mx/zL;//x増分 wy = my/zL;//y増分 for (var i = 0; i< zL ;i++ ) { //ここを「i+=2」(一つおき)とか「i+=3」に変えると精度が低下=速くなる ix = _x+(i*wx); iy = _y+(i*wy);//forループ1回毎の座標を求める BrokX = Math.floor(ix/16)%30;//ブロックのX列 BrokY = Math.floor(iy/16);//ブロックのY行 BrockNum = BrokY*30+BrokX;//当該ブロックの数字 _root["d"+BrockNum ].irokaete(); } } 以上ですが、色々問題がありますよね? ●forループで遅い。 ●1ループ間に、同じブロックに何度も同じ命令を出している。 等。 |
nabe_1234 | Åê¹ÆNo.24756 投稿日時: 2006-4-8 19:38 |
新米 居住地: 投稿: 21
使用環境:
Windows Vista Home Premium SP1,Flash CS3 |
Re: 移動についてのアルゴリズム? はじめまして。
はじめて投稿するのですが、不備があったらごめんなさい。 ブレゼンハムのアルゴリズムを利用して、 格子点用に読み替えてみました。 http://www.geocities.jp/animecomic_pen_7380/note/gridline.html ただし、肝心のFlash側が分からないので、 JavaScriptで代用してます。 |
(1) 2 » |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |