4.変形後の座標を求める

いよいよ変形に向かいます。
中心を持ち上げて変形しましょう。

paper1.gif



paper2.gif

先ず、各 point が移動する先の座標を求めます。
これも実際に折り紙を折った方が分かりやすいです。
計算には三角関数等も使いますが、今回は平方根だけで済みます。

-1 0 1  #0 左前 → 0 0 0
0 0 1   #1 中前 → 0 0.707 0.707
1 0 1   #2 右前 → 0 0 0
1 0 0   #3 右中 → 0.707 0.707 0
1 0 -1  #4 右奥 → 0 0 0
0 0 -1  #5 中奥 → 0 0.707 -0.707
-1 0 -1 #6 左奥 → 0 0 0
-1 0 0  #7 左中 → -0.707 0.707 0
0 0 0   #8 中心 → 0 1.414 0



5-1.変形1

CoordinateInterpolator ノードを使って変形するようにします。
折り紙に TouchSensor ノードを付け、クリックすると変形が始まるようにします。

#VRML V2.0 utf8
#視点設定
Viewpoint {
    position 0 0 3
}
#光源設定
DirectionalLight {
    direction 0 -1 0
}
#折り紙
Transform {
    translation 0 -0.707 0
    children [
        DEF TS TouchSensor {
        }
        Shape {
            appearance Appearance {
                material Material {
                    diffuseColor 1 1 1
                }
            }
            geometry IndexedFaceSet {
                coord DEF origamiPoint Coordinate {
                    point [
                        -1 0 1 #0 左前
                        0 0 1 #1 中前
                        1 0 1 #2 右前
                        1 0 0 #3 右中
                        1 0 -1 #4 右奥
                        0 0 -1 #5 中奥
                        -1 0 -1 #6 左奥
                        -1 0 0 #7 左中
                        0 0 0 #8 中心
                    ]
                }
                coordIndex [
                    0 1 8 -1
                    1 2 8 -1
                    2 3 8 -1
                    3 4 8 -1
                    4 5 8 -1
                    5 6 8 -1
                    6 7 8 -1
                    7 0 8 -1
                ]
                solid FALSE
            }
        }
    ]
}
#変形設定
DEF TIMER TimeSensor {
    cycleInterval 15
}
DEF CI CoordinateInterpolator {
    key [0 1]
    keyValue [
        -1 0 1 #変形前
        0 0 1
        1 0 1
        1 0 0
        1 0 -1
        0 0 -1
        -1 0 -1
        -1 0 0
        0 0 0

        0 0 0 #変形後
        0 0.707 0.707
        0 0 0
        0.707 0.707 0
        0 0 0
        0 0.707 -0.707
        0 0 0
        -0.707 0.707 0
        0 1.414 0
    ]
}
ROUTE TS.touchTime TO TIMER.startTime
ROUTE TIMER.fraction_changed TO CI.set_fraction
ROUTE CI.value_changed TO origamiPoint.set_point


さあ、動かしてみましょう。
クリックすると変形が始まります。



「5-2.変形2」へ進む