diff -urN wf-/data.c wf/data.c
--- wf-/data.c	2015-12-20 00:00:00.000000000 +0900
+++ wf/data.c	2015-12-21 00:00:00.000000000 +0900
@@ -266,25 +266,25 @@
 static void
 op_data_slide_way(struct way *slide, data_t *data, prm_t *prm)
 {
-	affin_t af;
-	struct way way = *slide;
+	struct way way = *slide;	
+	d3_t p;
+	data_t op = { type_slide, &p };
 
 	way_get(&way, prm->sec);
-	affin_slide(&af, &way.ret_p);
-	affin_compo(&prm->af, &prm->af, &af);
-	data_draw(data, prm);
+	p = way.ret_p;
+	op_data_draw(&op, data, prm);
 }
 
 static void
 op_data_rot_way(struct rot_way *rw, data_t *data, prm_t *prm)
 {
-	affin_t af;
 	struct way way = rw->deg_way;
+	struct rot rot = { .l = rw->l };
+	data_t op = { type_rot, &rot };
 
 	way_get(&way, prm->sec);
-	affin_rot(&af, &rw->l, way.ret_v);
-	affin_compo(&prm->af, &prm->af, &af);
-	data_draw(data, prm);
+	rot.deg = way.ret_v;
+	op_data_draw(&op, data, prm);
 }
 
 static void
diff -urN wf-/way.c wf/way.c
--- wf-/way.c	2015-12-19 00:00:00.000000000 +0900
+++ wf/way.c	2015-12-21 00:00:00.000000000 +0900
@@ -52,7 +52,7 @@
 
 	if(way->dg == 1){
 		if(way->vs){
-			way->ret_v = linear(t, 0, ts[idx], way->vs[idx], way->vs[nxt]);
+			way->ret_v = linear(t, 0, 1, way->vs[idx], way->vs[nxt]);
 		}
 		if(way->ps){
 			line_t l;
diff -urN wf-/wf_ex.c wf/wf_ex.c
--- wf-/wf_ex.c	2015-12-20 00:00:00.000000000 +0900
+++ wf/wf_ex.c	2015-12-21 00:00:00.000000000 +0900
@@ -221,12 +221,36 @@
 		  }},
 		  .data = &(data_t){ type_cube } }};
 
+		data_t *ferris_wheel = &(data_t){ type_op_data_set, &(struct op_data_set){
+		  .op = &(data_t){ type_arr, (data_t[]){
+		    { type_slide, &(d3_t){20,20,-10} },
+		    { type_copy_timeshift, &(struct copy_timeshift){
+		      .n=12, .init_sec=0, .step_sec=10.0/12, .init={0,0,0}, .step={0,0,0} } },
+		    { type_rot_way, &(struct rot_way){
+		      .l=LINE_Y, .deg_way={ .n=2, .vs=(double[]){0,-360}, .ts=(double[]){10,0}, .ps=NULL, .dg=1 } } },
+		    { type_end } }},
+		  .data = &(data_t){ type_arr, (data_t[]){
+		    { type_op_data_set, &(struct op_data_set){
+		      .op = &(data_t){ type_zoom_and_slide, (d3_t[]){{3,1,1},{10-3,0,0}} },
+		      .data = &(data_t){ type_square } }},
+		    { type_op_data_set, &(struct op_data_set){
+		      .op = &(data_t){ type_arr, (data_t[]){
+			{ type_slide, &(d3_t){10,0,0} },
+			{ type_rot_way, &(struct rot_way){
+			  .l=LINE_Y, .deg_way={ .n=2, .vs=(double[]){0,360}, .ts=(double[]){10,0}, .ps=NULL, .dg=1 } }},
+			{ type_slide, &(d3_t){0,0,-1} },
+			{ type_end } }},
+		      .data = &(data_t){ type_cube } }},
+		    { type_end }
+		  }}
+		}};
+
 		data.type = type_arr;
 		data.p = (data_t[]){
 			*axyz,
 			*cross,
 			*cube, *cube3,
-			*cup,
+			*cup, *ferris_wheel,
 			{ type_end }
 		};
 	}