新しく発言する EXIT インデックスへ
青木さん他へ^^

  青木さん他へ^^ ゆめの 2004/08/25 18:41:15 
  ああ、そうそう作るって書きましたね私。 青木太一 2004/08/26 12:17:45 
   ├暇ができたらチャレンジしてみてくださいお... ゆめの 2004/08/26 16:37:33 
   └青木さんの手の内は? 山中和義 2004/08/26 17:23:36 
    └手の内というか、思いついたのはたとえばこ... 青木太一 2004/08/26 21:03:42 
     └ありがとうございます。 山中和義 2004/08/27 14:31:25 
      └三元的に処理せずにデータ構造とアルゴリズ... 青木太一 2004/08/27 15:03:05 
       └ありがとうございます。訂正と補足です。 山中和義 2004/08/27 15:41:16 

  青木さん他へ^^ ゆめの 2004/08/25 18:41:15  ツリーへ

青木さん他へ^^ 返事を書く
ゆめの 2004/08/25 18:41:15
やっぱり立方体と直方体、三角すいなどの
展開図がほしいですね。

マウスのクリックで展開できたり
組みたてたり
自由度があると
とくにいいですね。

自由度があると実用的ですね。

どなたかチャレンジしてくれませんか?


  ああ、そうそう作るって書きましたね私。 青木太一 2004/08/26 12:17:45  ツリーへ

Re: 青木さん他へ^^ 返事を書く
青木太一 2004/08/26 12:17:45
ああ、そうそう作るって書きましたね私。
ごめんなさい、軽く設計作業していましたが、忙しくて詰めてません。
おもしろそうなんだけどな。

   ├暇ができたらチャレンジしてみてくださいお... ゆめの 2004/08/26 16:37:33  ツリーへ

Re: ああ、そうそう作るって書きましたね私。 返事を書く
ゆめの 2004/08/26 16:37:33
暇ができたら チャレンジしてみてください  おもしろだとぉもったときが旬ですよ

   └青木さんの手の内は? 山中和義 2004/08/26 17:23:36  ツリーへ

Re: ああ、そうそう作るって書きましたね私。 返事を書く
山中和義 2004/08/26 17:23:36
青木さんの手の内は?
今、作っている凹凸N角形の図から組立図はできます!?
ただし、ワイヤーフレームで、透視図をフリーハンドで作図すれば、ですが、、、(汗)
たとえば、立方体なら

 □
□□□□
 □

のような凹凸N角形を作成します。
具体的には、14角形(周りの部分)、5本の折り目です。

組立図は、斜めになるように頂点や辺移動を行えば、見ようによれば組み立て完了!(笑)
 _
//|
□/  (イメージ図)

移動例
・上面を傾ける
  _
 //
□□□□
 □


●まじめなアプローチ
展開図へは、透視図を表示して各辺をクリックして、切ったり糊付けしたりして、
これ以上切れないか「展開」ボタンで展開図を描かせる。
切り方によって展開できない場合がある。(エラー)

また、組み立て図は、正方形をマス目に配置させて「組み立て」ボタンで
組み立て図を作成する。このときもうまくいかない場合もある。

どのようにデータを管理するか検討中なのですが、、、
(辺番号、リンクなど)

    └手の内というか、思いついたのはたとえばこ... 青木太一 2004/08/26 21:03:42  ツリーへ

Re: 青木さんの手の内は? 返事を書く
青木太一 2004/08/26 21:03:42
手の内というか、思いついたのはたとえばこんなファイルを読み込んで描画するプログラムです。
とりあえず文法はなんとなく十進Basicに似せています。

!頂点を座標で定義
set point p1 x,y,z
set point p2 x,y,z
...
set point p10 x,y,z

!面を頂点で定義(頂点は3か4)
set face fc1 p1,p2,p3,p4
set face fc2 p3,p4,p5,p6
...
set face fc6 p8,p9,p10,p11

!折れ線ベクトルを位置と方向で定義
set fold fd1 x0,y0,z0,x,y,z
set fold fd2 x0,y0,z0,x,y,z
...
set fold fd6 x0,y0,z0,x,y,z

!以下描画命令

draw fc1

fold by fd1
 fold by fd2
  draw fc1
  draw fc2
 end fold
 draw fc3
end fold

END

記述命令をファイルとして用意するわけですね。(かなり適当に書いているので上のサンプルは深く考えて読まないで下さい)
このファイルを書くのにもそれなりに支援ツールがあったほうがいいかも

ちょっと考えれば気づきますが、これは展開図というよりは回転一自由度のある立体の記述-描画システムなんですけどね

このファイルを読み込んで描く方のプログラムは指定された角度だけ折られた状態の展開図を表示します。値を連続的に描画すればアニメーションにもなるでしょう。
陰面消去としては、奥の方にある面から描いていくzソート法でplot areaを利用する予定でした
(なんとなく単純な展開図ならzソート法でも陰面消去が破綻しそうにないという予感がしたもので。)

十進BASICに関係ない話でごめんなさい。
学校の課題の関係でもしかしたらJAVA3Dでプログラム書くかもしれませんが、期待しないでおいてください。

ちなみに十進BASICによる透視変換は拙作が
http://www2.tba.t-com.ne.jp/aoki/taichi/decimal_basic/
http://www2.tba.t-com.ne.jp/aoki/taichi/decimal_basic/3dviewer01.bas.txt
ここにサンプルあります。

展開図の作成に関しては三谷純さんの博士論文がいろいろ書いてあって参考になりそうです。(私はざっと見ただけですが)
十進BASICではつらそうだけど。
http://ortros.den.rcast.u-tokyo.ac.jp/~mitani/
http://ortros.den.rcast.u-tokyo.ac.jp/~mitani/docs/doctor_thesis_mitani.pdf

この方は以前
http://freebbs.around.ne.jp/article/b/basic/33/lfcbfd/jyghmv.html#jyghmv
紹介したペパクラアニメーションの作者の方です

     └ありがとうございます。 山中和義 2004/08/27 14:31:25  ツリーへ

Re: 手の内というか、思いついたのはたとえばこ... 返事を書く
山中和義 2004/08/27 14:31:25
ありがとうございます。
当方の考えは、、、興味があれば一読願います。

立方体の手前の3面、裏側はありません。
 _
//|
□/

次のように各辺に番号をつけます。(順不同でいいはず)
正面
 3
2□4
 1

上面
 6_
5//7

右面
/|8
/9

そうすると、
各面は、正面 1−2−3−4
    上面 3−5−6−7
    右面 4−7−8−9
と表現できます。
面の裏表がため、時計回りか反時計回りの統一(法線ベクトル)が必要。


●展開について
1.どこを切るか
「どこの辺にハサミをいれるか」ということです。
まず、上記の面に接続情報を付加します。接続辺は正、切り離された辺は負とすると、
 正面 -1,-2,3,4
 上面 3,-5,-6,7
 右面 4,7,-8,-9

N多角面は最大N−1個の辺を切り離すことができます。N個だと切り離されます。

たとえば、4番の辺にハサミをいれると(入れようとすると)、
正面、右面にこの辺があるので、
正面の接続状態はOK(負の数を確認する)、右面もOKなので、
ここが−4になります。


2.展開図
基準の面を1つ設けて、たとえば正面とすると

・1,2,3,4と辺を作画する。このとき、正ならその番号をキューにいれる。
・次の面へ
 キューから1つ取り出して、その番号を持つ面を探し、その辺を基準に
 この面を作画する。このとき、正ならその番号をキューにいれる。
・以下、これを総面数繰り返す。
 切り離しが不十分ならキューに残りがある。


 正面 -1,-2,3,4
 上面 3,-5,-6,7
 右面 4,7,-8,-9

正面
 3
2□4  キュー(先入れ先出し)は、3、4
 1

キューから3を取り出して、上面が見つかる。
 6
5□7  キューへ、7
 3

キューから4を取り出して、右面が見つかる。
 7
4□8
 9

キューには7が残っている。

作画は、このようになる。
 6
5□7
2□□8
 19

      └三元的に処理せずにデータ構造とアルゴリズ... 青木太一 2004/08/27 15:03:05  ツリーへ

Re: ありがとうございます。 返事を書く
青木太一 2004/08/27 15:03:05
三元的に処理せずにデータ構造とアルゴリズムを工夫して
立体から徐々に展開を行っていける仕組みでしょうか?興味深い。

でも残念ながらよく理解できませんでした。なんとなく切り離されていない辺をたどりながらどんどん描いていくのだなということはわかるのですが。
・裏面はどうするのか?
・もりの(ゆめの?)さんの欲しい三角錐、直方体はなんとかなるかもしれないけど、それ以上はあきらめるのか?(それはそれでいい判断かもしれませんが)
などの疑問が残りました。

あと
>N多角面は最大N−1個の辺を切り離すことができます。N個だと切り離されます。
というのも裏面を考えないからそうなるのですか?
裏面まで考えれば6面体(立方体)はたとえば
  ■
■■■■
  ■
という切り離し方で7この辺を切り離していますが...

では、お互い実装適当にがんばりましょう!

       └ありがとうございます。訂正と補足です。 山中和義 2004/08/27 15:41:16  ツリーへ

Re: 三元的に処理せずにデータ構造とアルゴリズ... 返事を書く
山中和義 2004/08/27 15:41:16
ありがとうございます。訂正と補足です。
>立体から徐々に展開を行っていける仕組みでしょうか?興味深い。

将来は、立体を回転させながら、各辺にハサミを入れていくアニメーションとか、
(口を開いた図とか)を表現できたらと思いますが。。。(夢)
当面、透視図(パース)をワイヤーフレーム表示して各辺をクリックして
ハサミをいれる、、、という感じです。
裏(の辺)は点線か線色を変えて表示しておきます。


>なんとなく切り離されていない辺をたどりながらどんどん描いていくのだなということはわかるのですが。

その通りです。


>>N多角面は最大N−1個の辺を切り離すことができます。N個だと切り離されます。
>というのも裏面を考えないからそうなるのですか?

N多角面ではなく、N角の面です。 記述間違いでした。
この場合は4角形の面です。



簡単な立体で、
展開、組み立ての情報が表現できるか、、を検証してみたいと思います。


インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。