トップページ⇒tech
42コメント14KB

ドローイングソフトの作り方

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさんNGNG
円とか四角とかをつまんだり、
スナップをきかせたり、
するにはどうしたらいいの?
という疑問にこたえていくスレです。

まずは、円などのオブジェクトをどうやって選択させるのか?
0002デフォルトの名無しさんNGNG
CAD/CAM系の本見ればその辺は、でてるよん。
図書館へGO
0003名無しさんNGNG
>>2
お勧め図書は?
0004デフォルトの名無しさんNGNG
今風のWindow+マウスなGUIに限っての話か?

ならばという前提だが、
しょせん「つかむもの」と「つかまれるもの」しかないんで、
その二者の関連や立場を考えれば、答えは出るはずだ。

たとえば、ありがちなGUI構成では、
「移動させる」と「変形させる」は
「図形オブジェクトのどのへんがつかまれるか?」で
識別されているわけだ。

となると、図形オブジェクトは、それらのされる事柄の数に
見合った数の「つかまれる場所」オブジェクトを、持つはずだ。

つまり「ここをつかまれたら図形を移動するObject」や
「ここをつかまれたら図形を変形するObject」だ。
0005デフォルトの名無しさんNGNG
オレは体が人よりも大きく他は全く動じることはないのだが首根っこを
捕まえられると身動き取れなくなり猫のように意のままにされる。
よって今>>4がいい事言った。
0006デフォルトの名無しさんNGNG
教えて君も巧妙になってきたね。
0007名無しさんNGNG
>>4
どれが選択されたのか検査(検索)するやり方は?
00084じゃないけどNGNG
頭悪い方法   :全走査。
ちょっと賢い方法:領域分割して候補を絞る。
笑える方法   :別バッファにピクセル毎にobj.id書き込む(w

すんません。ぼくただのばかです。ゆるしてください。
0009名無しさんNGNG
>>8
笑える方法の場合、
Zバッファ的な要素を比べる必要はないのね?
0010名無しさんNGNG
>>8
ちょっと賢い方法ですけど、
どういう分割をするんですか?
0011名無しさんNGNG
>>8
オブジェクトが生成、移動、変形されるごとに、
大まかに分けた領域に登録し直すのですか?
0012ただのばかNGNG
ただのばかだって言ってるのに―(ToT)

>>9
書く順番を変えるか、バッファに不可情報をもたせるかですね。
>>10-11
11さんでOKだと思います。QuadTree(四分木)とかも調べてみて
ください。
0013ただのばかNGNG
不可→付加

鬱過ぎる
0014名無しさんNGNG
Barnes-Hut 法
つかえばよいの?
http://www.na.cse.nagoya-u.ac.jp/~reiji/lect/alg99/sec7-4.html
0015デフォルトの名無しさんNGNG
ライン上とか判定がかなりめんどくさそうだが
0016名無しさんNGNG
>>12
Quad Treeのよい資料がでてこないですぅ。
0017デフォルトの名無しさんNGNG
>>16
英語で良いか?
ttp://lcavwww.epfl.ch/~balmelli/software/quadtree/
001816NGNG
>>17
英語だめ
訳して
0019デフォルトの名無しさんNGNG
やだ
0020ただのばかNGNG
この世界で食ってくつもりなら英語はイヂでも勉強しましょう。
#(厨|消)房だからなんて言い訳は駄目です。
英語が出来ないと将来肉体労働プログラマしか道がありません。

四分木でもヒットしませんか?
0021デフォルトの名無しさんNGNG
>>16
本屋にGO!
0022 NGNG
大変です
0023名無しさんNGNG
四分木なんですけど、
実際どのように応用すればいいのでしょう。

たとえば、キャンバスみたいなところに四角形を書いているとして。
その大きさが256x256ぐらいあるとして
検索時の最小の領域として16x16ぐらいの細かい領域を考えて、
>>11さんのようにその都度登録しなおくとします。
マウスでクリックした領域Aに一部でも入っていて実際登録されている
四角形の座標だけを対象とする...

四分木はどこに応用されているんでしょ?
0024デフォルトの名無しさんNGNG
以前ちらっと見たアルゴリズムの本で、
二次元図形の領域を分割する手法として、

上下に分割するのと左右に分割するのを
交互にやることで絞り込んで行く、ってのが有った。

4分ってのはもしやそれのこと?
1次元データ(つまり配列)のバイナリサーチ(=2分検索)を
2次元に拡張したようなものだ、という解説が有ったので。
たしかに、x軸とy軸について交互にバイナリサーチするようなもの、だろうね。

すると3次元データは8分木で取り扱えるのかな(わら

>>9
BringToFrontされたら、されたObjectがPixelたちに
自分のIDを告知しまくる、んじゃないかな。
もちろん(?)SendToBackは、自分以外のObjectに
順次BringToFrontさせる、というアルゴリズムで、書く。
うげ、富豪プログラムもいいとこだな。重そう。
0025ただのばかNGNG
>>24
>すると3次元データは8分木で取り扱えるのかな(わら
大当たりです。レイトレなんかで交差判定に使われます。
0026ただのばかNGNG
>>24
>BringToFrontされたら(略)

むしろ、Z-bufferのようにバッファにZ値を置いておくか、
オブジェクトのリストをZソートかけるかして毎回全部書
き直したほうが良いと思います。富豪プロにはかわりあり
ませんが。
0027デフォルトの名無しさんNGNG
>ライン上とか判定がかなりめんどくさそうだが
奥行き順で矩形でマウスが入ってるかをチェックした後ですけど
キャンバスを白黒で作って、見えてるのと同じペンサイズで線とか円とか書いて
Pixelで判定してました>上司
そこそこのオブジェクト数なら、そこそこ摘めて、そこそこ動かせるので
現在も採用されています
0028デフォルトの名無しさんNGNG
>>3
今手元に有る「プログラマのための幾何学入門」がまさにぴったりかと。安かったし。
ただし答えだけ載ってるアンチョコ本に近いので勉強には不向き。
っていうか絶版くさいな(笑
http://shopping.yahoo.co.jp/shop?d=jb&id=03090983

目次抜粋

1,点、直線

 1.6 2点間を通る直線
 1.8 1点を通り直線に垂直な直線

2 点、直線、円

 2.7 2点を通る与えられた半径の円
 2.11 直線と円に接する与えられた半径の円

3 点、線分、弧

 3.2 点から[線分]までの距離

9 作画

 9.5ピクセルデバイス上の円
 9.6クリッピング
0029優良スレかもNGNG
McGrowHillのCOMPUTER GRAPHICS A Programming Approach second edition
のテキストを使って授業をしてたけど、
こういうの無かったなぁ。
勉強になります。
0030デフォルトの名無しさんNGNG
絶版本の復活を願って署名を100件集めたらゴー!
っていう主旨のサイトあったよね。
URL覚えてない。覚えてる人書いてくれー
0031名無しさんNGNG
>>27
印刷も想定しているキャンバスみたいなもんの場合は?
0032ほええええNGNG
で、結局現在のところ一番うまいやりかたは?<<オブジェクトをマウスで選択の件
0033デフォルトの名無しさんNGNG
>>30 これか?
ttp://www.fukkan.com/
0034デフォルトの名無しさんNGNG
>>32
初心者のうちは全部試してみるのが一番良いというのが真実かも
しれんが、、、

まあ目的次第だろうだけど、トレーニングとしてやるなら2で
Quad Tree、なーんも考えたくなければ 1,3。特にメモリを大
量に消費してもいいなら 3 にでもしとけば標準関数でメモリ
DC(or pixmap) に書き込むだけでいいので楽なんじゃない
かな。
003527NGNG
>>31
ごめんなさい、意味がよくわかんないや
0036デフォルトの名無しさんNGNG
>>35
WYSWYG なもの作るにはどうするんだ?
って聞いてると思われ。
ちゃう? >>31
0037デフォルトの名無しさんNGNG
>>32
蛇足だと思うが、windowsだと、WindowsのObject
(つまりWindowHandle)のメッセージとして
色んなことがやれるよな。
それこそ、1つのObjectの上の「どのへんを」つつかれたか?が
判るメッセージってのも有る。
なんだっけあれ?なんたらHITTESTっていうメッセージがあるよな。
Windowsの一般的な「タイトルバー」を掴んだら「Drag」できるとか
「ふち」を掴んだら「Resize」できるとか、が
それによって実現されているそうな。
このメッセージへの応答を、自分の都合よいように書き換えてしまえば…

ただ、WindowHandleを量産すると、往年のwin9x環境だと
いわゆるリソース不足とかいって叩き落されたりするんで、
つまり効率とかは良いわけではない戦略であるらしく。
0038ななしNGNG
それでは、tgifはどうやっているの?>>37
0039デフォルトの名無しさんNGNG
最初から、tgifのソース見れってことで
0040ななしNGNG
>>39
どこかに簡単なサンプルないですか?
0041デフォルトの名無しさんNGNG
VCのチュートリアルって、ドローイングソフトの作成じゃなかった?
たしか。
0042すいませんNGNG
>>41
Javaでお願いします。
■ このスレッドは過去ログ倉庫に格納されています