# # A simple example of curve morphing. # # Gershon Elber, March 1996. # # # Sets the viewing direction on the display device. # save_mat = view_mat; view_mat = roty( 180 ); viewobj( view_mat ); view_mat = save_mat; viewstate( "PolyAprx", 1 ); viewstate( "WidthLines", 1 ); # # Animation speed. The lower this number, the faster the animations will be, # skipping more frames. # speed = 0.25; EchoSrc = iritState("EchoSource", false); ############################################################################ Locally = cbspline( 3, list( ctlpt( E2, 0.62705, -0.418086 ), ctlpt( E2, 0.593439, -0.416962 ), ctlpt( E2, 0.414706, -0.366445 ), ctlpt( E2, 0.362948, -0.332803 ), ctlpt( E2, 0.33727, -0.293801 ), ctlpt( E2, 0.288731, -0.146024 ), ctlpt( E2, 0.292251, -0.0630604 ), ctlpt( E2, 0.326431, -0.0942595 ), ctlpt( E2, 0.379121, -0.513736 ), ctlpt( E2, 0.324176, -0.348901 ), ctlpt( E2, 0.247253, -0.337912 ), ctlpt( E2, 0.285714, -0.32967 ), ctlpt( E2, 0.339394, -0.378232 ), ctlpt( E2, 0.285714, -0.46978 ), ctlpt( E2, 0.214286, -0.458791 ), ctlpt( E2, 0.200549, -0.368132 ), ctlpt( E2, 0.241758, -0.337912 ), ctlpt( E2, 0.145604, -0.346154 ), ctlpt( E2, 0.0714286, -0.326923 ), ctlpt( E2, 0.151099, -0.348901 ), ctlpt( E2, 0.175711, -0.360335 ), ctlpt( E2, 0.159341, -0.447802 ), ctlpt( E2, 0.0659341, -0.425824 ), ctlpt( E2, 0.0192308, -0.365385 ), ctlpt( E2, -0.0631868, -0.348901 ), ctlpt( E2, -0.0604396, -0.351648 ), ctlpt( E2, -0.0147518, -0.367252 ), ctlpt( E2, 0.0202549, -0.396131 ), ctlpt( E2, 0.0306359, -0.41967 ), ctlpt( E2, 0.00413766, -0.447826 ), ctlpt( E2, -0.0567533, -0.42663 ), ctlpt( E2, -0.0635566, -0.39429 ), ctlpt( E2, -0.0686813, -0.357143 ), ctlpt( E2, -0.0575531, -0.346678 ), ctlpt( E2, -0.0464482, -0.397592 ), ctlpt( E2, -0.0510823, -0.431478 ), ctlpt( E2, -0.0697253, -0.455784 ), ctlpt( E2, -0.122527, -0.441885 ), ctlpt( E2, -0.161539, -0.384224 ), ctlpt( E2, -0.18956, -0.302198 ), ctlpt( E2, -0.247253, -0.0659341 ), ctlpt( E2, -0.145604, -0.332418 ), ctlpt( E2, -0.14011, -0.445055 ), ctlpt( E2, -0.255495, -0.445055 ), ctlpt( E2, -0.302198, -0.307692 ), ctlpt( E2, -0.35749, -0.0587375 ), ctlpt( E2, -0.269231, -0.285714 ), ctlpt( E2, -0.299451, -0.453297 ), ctlpt( E2, -0.377342, -0.390006 ), ctlpt( E2, -0.391946, -0.273712 ), ctlpt( E2, -0.384193, -0.298763 ), ctlpt( E2, -0.370793, -0.373895 ), ctlpt( E2, -0.367854, -0.402319 ), ctlpt( E2, -0.42033, -0.425824 ), ctlpt( E2, -0.471097, -0.323993 ), ctlpt( E2, -0.468744, -0.312264 ), ctlpt( E2, -0.471475, -0.382282 ), ctlpt( E2, -0.453039, -0.555819 ), ctlpt( E2, -0.337647, -0.586488 ), ctlpt( E2, -0.352405, -0.544612 ), ctlpt( E2, -0.467128, -0.523359 ) ), list( 0, 0, 0, 0.0169492, 0.0338983, 0.0508475, 0.0677966, 0.0847458, 0.101695, 0.118644, 0.135593, 0.152542, 0.169492, 0.186441, 0.20339, 0.220339, 0.237288, 0.254237, 0.271186, 0.288136, 0.305085, 0.322034, 0.338983, 0.355932, 0.372881, 0.389831, 0.40678, 0.423729, 0.440678, 0.457627, 0.474576, 0.491525, 0.508475, 0.525424, 0.542373, 0.559322, 0.576271, 0.59322, 0.610169, 0.627119, 0.644068, 0.661017, 0.677966, 0.694915, 0.711864, 0.728814, 0.745763, 0.762712, 0.779661, 0.79661, 0.813559, 0.830508, 0.847458, 0.864407, 0.881356, 0.898305, 0.915254, 0.932203, 0.949153, 0.966102, 0.983051, 1, 1, 1 ) ); Globally = cbspline( 3, list( ctlpt( E2, 0.409341, 0.456044 ), ctlpt( E2, 0.495896, 0.463099 ), ctlpt( E2, 0.526756, 0.459253 ), ctlpt( E2, 0.56319, 0.436464 ), ctlpt( E2, 0.575311, 0.37219 ), ctlpt( E2, 0.443829, 0.352561 ), ctlpt( E2, 0.381178, 0.375885 ), ctlpt( E2, 0.39083, 0.442424 ), ctlpt( E2, 0.393845, 0.452091 ), ctlpt( E2, 0.392158, 0.456488 ), ctlpt( E2, 0.393817, 0.377047 ), ctlpt( E2, 0.423314, 0.207375 ), ctlpt( E2, 0.535714, 0.0604396 ), ctlpt( E2, 0.424317, 0.313974 ), ctlpt( E2, 0.300315, 0.373214 ), ctlpt( E2, 0.217076, 0.572057 ), ctlpt( E2, 0.204434, 0.692412 ), ctlpt( E2, 0.202976, 0.705647 ), ctlpt( E2, 0.223419, 0.662085 ), ctlpt( E2, 0.264346, 0.543445 ), ctlpt( E2, 0.272216, 0.438565 ), ctlpt( E2, 0.279823, 0.392373 ), ctlpt( E2, 0.252354, 0.386253 ), ctlpt( E2, 0.181319, 0.436813 ), ctlpt( E2, 0.199259, 0.400732 ), ctlpt( E2, 0.213134, 0.347925 ), ctlpt( E2, 0.152955, 0.36674 ), ctlpt( E2, 0.135194, 0.394466 ), ctlpt( E2, 0.143426, 0.433858 ), ctlpt( E2, 0.155053, 0.437899 ), ctlpt( E2, 0.171634, 0.435626 ), ctlpt( E2, 0.185458, 0.433952 ), ctlpt( E2, 0.0495181, 0.432913 ), ctlpt( E2, 0.0170595, 0.440174 ), ctlpt( E2, 0.0190177, 0.449884 ), ctlpt( E2, -0.0230322, 0.650896 ), ctlpt( E2, 0, 0.607143 ), ctlpt( E2, 0.0108935, 0.436632 ), ctlpt( E2, 0.0349947, 0.30953 ), ctlpt( E2, 0.0423563, 0.38203 ), ctlpt( E2, 0.00549451, 0.445055 ), ctlpt( E2, -0.0686813, 0.442308 ), ctlpt( E2, -0.0479742, 0.371294 ), ctlpt( E2, 0.0174776, 0.354734 ), ctlpt( E2, 0.0412115, 0.367527 ), ctlpt( E2, -0.134615, 0.412088 ), ctlpt( E2, -0.214663, 0.411028 ), ctlpt( E2, -0.192762, 0.422809 ), ctlpt( E2, -0.104396, 0.395604 ), ctlpt( E2, -0.097058, 0.335892 ), ctlpt( E2, -0.203297, 0.335165 ), ctlpt( E2, -0.195055, 0.42033 ), ctlpt( E2, -0.17033, 0.296703 ), ctlpt( E2, -0.205187, 0.314129 ), ctlpt( E2, -0.32967, 0.478022 ), ctlpt( E2, -0.349878, 0.693383 ), ctlpt( E2, -0.273502, 0.525542 ), ctlpt( E2, -0.266794, 0.324805 ), ctlpt( E2, -0.29383, 0.326754 ), ctlpt( E2, -0.453297, 0.5 ), ctlpt( E2, -0.456044, 0.692308 ), ctlpt( E2, -0.392857, 0.527473 ), ctlpt( E2, -0.417582, 0.293956 ), ctlpt( E2, -0.480769, 0.302198 ), ctlpt( E2, -0.508242, 0.442308 ), ctlpt( E2, -0.516484, 0.340659 ), ctlpt( E2, -0.571429, 0.32967 ), ctlpt( E2, -0.601648, 0.431319 ), ctlpt( E2, -0.596154, 0.271978 ), ctlpt( E2, -0.535714, 0.181319 ), ctlpt( E2, -0.461538, 0.173077 ) ), list( 0, 0, 0, 0.0144928, 0.0289855, 0.0434783, 0.057971, 0.0724638, 0.0869565, 0.101449, 0.115942, 0.130435, 0.144928, 0.15942, 0.173913, 0.188406, 0.202899, 0.217391, 0.231884, 0.246377, 0.26087, 0.275362, 0.289855, 0.304348, 0.318841, 0.333333, 0.347826, 0.362319, 0.376812, 0.391304, 0.405797, 0.42029, 0.434783, 0.449275, 0.463768, 0.478261, 0.492754, 0.507246, 0.521739, 0.536232, 0.550725, 0.565217, 0.57971, 0.594203, 0.608696, 0.623188, 0.637681, 0.652174, 0.666667, 0.681159, 0.695652, 0.710145, 0.724638, 0.73913, 0.753623, 0.768116, 0.782609, 0.797101, 0.811594, 0.826087, 0.84058, 0.855072, 0.869565, 0.884058, 0.898551, 0.913043, 0.927536, 0.942029, 0.956522, 0.971014, 0.985507, 1, 1, 1 ) ); EchoSrc = iritState("EchoSource", EchoSrc); free( EchoSrc ); ffcompat( Locally, Globally ); color( Locally, red ); color( Globally, green ); view( list( Locally, Globally ), on ); for ( i = 0, 1, 300 * speed, c = cmorph( Locally, Globally, 0, i / ( 300.0 * speed ) ): color( c, yellow ): viewobj( c ) ); save( "glocal1", list( Locally, Globally, cmorph( Locally, Globally, 0, 0.5 ) ) ); Globally2 = ffmatch( Locally, Globally, 20, 100, 2, false, -2 ); ffcompat( Locally, Globally2 ); for ( i = 0, 1, 100 * speed, c = cmorph( Locally, Globally2, 0, i / ( 100.0 * speed ) ): color( c, yellow ): viewobj( c ) ); save( "glocal2", list( Locally, Globally, cmorph( Locally, Globally2, 0, 0.5 ) ) ); viewstate( "PolyAprx", 0 ); viewstate( "WidthLines", 0 ); free( speed ); free( Locally ); free( Globally ); free( Globally2 ); free( c );