円柱と円すいもAND,OR,XOR演算

円柱と円すいも「物体の論理演算」に対応してみました。

v49.patch

$ mv rt_v48 rt_v49
$ cat v49.patch | ( cd rt_v49 ; patch -p1 )
$ cd rt_v49
$ make clean
$ make

結構変更を入れたので、一応前回v48のデータで軽く確認をば。

$ ./cg.py eyep=[0,0,0],[300,300,100],10 sec=20 yaml=op.yaml data_name=all name=out_v49/opck fps=0.25
  :
2018-06-10 22:52:49.994 Python[20334:447913] mMovieWriter.status: 3. Error: Cannot Save
frm : 5/5(100.0%) : fin 2m 28.28s
estimated 4.94 hour at 640*480 30fps

$ ls -lt out_v49/ | head
-rw-r--r--  1 kondoh  staff   110069  6 10 22:52 opck00005.jpg
-rw-r--r--  1 kondoh  staff    93857  6 10 22:52 opck00004.jpg
-rw-r--r--  1 kondoh  staff   115985  6 10 22:51 opck00003.jpg
-rw-r--r--  1 kondoh  staff   104601  6 10 22:51 opck00002.jpg
-rw-r--r--  1 kondoh  staff    78305  6 10 22:50 opck00001.jpg
  :

なにやらエラーが出てますが、 たぶんfpsの指定が小さい値過ぎて動画へのフレームの追加が出来なかったとかでしょうか? 静止画のファイルは出来ているのでOK。

では、円柱と円すいのデータop2.yamlをば。

$ cat op2.yaml
defs:
  rtd_A: { base: 0.1, diff: 0, reflect: 0.5, reflact: 0.5, density: 2 }
  mov4: IMG_3999_4.mov

big_ball:
- kind: ball
  rtd: { diff: 0.3 }
  maps:
  - fn: '*mov4'
    fn_r: '*mov4'
    t2m: [ ax.zoom_all(2), ax.rot_x(90) ]
  - fn: '*mov4'
    fn_r: '*mov4'
    t2m: [ ax.zoom_all(2), ax.rot_x(90), ax.rot_z(180) ]
  m2g: [ ax.zoom_all(1000) ]

all:
- kind: export
  export: big_ball

- kind: and
  args:
  - kind: ball
    not: True
    rtd: '*rtd_A'
    m2g:
    - ax.zoom_all(0.5)
    - ax.slide_x(1)
  - kind: cube
    not: True
    rtd: '*rtd_A'
    m2g:
    - ax.zoom_all(0.5)
    - ax.slide_x(-1)
  - kind: xor
    args:
    - kind: pipe
      rtd: '*rtd_A'
      m2g:
      - 'ax.slide( way.liss([-1,-1,-1],[1,1,1],[3,4,5])(sec) )'
    - kind: cone
      rtd: '*rtd_A'
      m2g:
      - ax.zoom_z(2)
      - ax.slide_z(-1)
      - 'ax.slide( way.liss([1,1,1],[-1,-1,-1],[4,5,6])(sec) )'
  m2g:
  - ax.rot_x(90)
  - ax.zoom_all(20)

# EOF
$ ./cg.py eyep=[0,0,0],[300,300,100],10 sec=20 yaml=op2.yaml data_name=all name=out_v49/op2_tst div=4 fps=15
  :
wh : 19200/19200(100.0%) : fin 0.24s
frm : 300/300(100.0%) : fin 2m 27.70s
estimated 1.31 hour at 640*480 30fps

$ ./cg.py eyep=[0,0,0],[300,300,100],10 sec=20 yaml=op2.yaml data_name=all name=out_v49/op2
  :
wh : 307200/307200(100.0%) : fin 9.04s
frm : 600/600(100.0%) : fin 1h 50m 22.71s

$ ls -lt out_v49/ | head
-rw-r--r--  1 kondoh  staff  1627032  6 10 22:24 op2_2.mp4
-rw-r--r--  1 kondoh  staff  3145033  6 10 22:24 op2_1.mp4
-rw-r--r--  1 kondoh  staff  5046499  6 10 22:22 op2.mp4
  :

円柱と円すいは、リサージュで適当に移動させてXORをとってます。 視線の先あたりに「球のNOT」と「立方体のNOT」が隠れていて、それらとANDをとってます。

もはや完成像の想像がついていけず、、、 これが正しい結果なのか、全然判りません。

ちょっと、円柱と円すいを角柱と角すいに置き換えてためしてみます。

$ cp op2.yaml op3.yaml

op3.yaml を編集して...

$ diff -u op2.yaml op3.yaml
--- op2.yaml	2018-06-10 20:28:40.000000000 +0900
+++ op3.yaml	2018-06-10 23:29:55.000000000 +0900
@@ -34,11 +34,13 @@
     - ax.slide_x(-1)
   - kind: xor
     args:
-    - kind: pipe
+    - kind: poly_n_prism
+      n: 16
       rtd: '*rtd_A'
       m2g:
       - 'ax.slide( way.liss([-1,-1,-1],[1,1,1],[3,4,5])(sec) )'
-    - kind: cone
+    - kind: poly_n_pyramid
+      n: 16
       rtd: '*rtd_A'
       m2g:
       - ax.zoom_z(2)

などと16角柱と16角すいに置き換え

$ ./cg.py eyep=[0,0,0],[300,300,100],10 sec=20 yaml=op3.yaml data_name=all name=out_v49/op3
  :
wh : 307200/307200(100.0%) : fin 19.84s
frm : 600/600(100.0%) : fin 5h 11m 24.03s

$ ls -lt out_v49/ | head
-rw-r--r--  1 kondoh  staff    853892  6 11 04:57 op3_4.mp4
-rw-r--r--@ 1 kondoh  staff   3140471  6 11 04:57 op3_3.mp4
-rw-r--r--  1 kondoh  staff   3145345  6 11 04:56 op3_2.mp4
-rw-r--r--  1 kondoh  staff   3129328  6 11 04:55 op3_1.mp4
-rw-r--r--@ 1 kondoh  staff  10784054  6 11 04:53 op3.mp4
  :

円柱1つのところが16*3個の三角形の平面に展開されるので、 さすがに時間がかかりますね。

これは、、、円すいの時と比べて、明らかに角すいの表示がおかしいです(>_<)

底面の多角形が、同じ平面上にある複数の三角形に展開されるところが、 領域の演算の処理的には問題が出てるのかも知れません...