Hola a todos: Estoy intentando visualizar unos resultados de un programa en R de forma dinámica. Dichos resultados se pueden representar, básicamente, con un plano que gira sobre uno de sus ejes: para dar sensación de movimiento he utilizado la función rgl.clear(), ya que no encuentro los equivalentes en rgl de los parámetros add o new. El problema es que al limpiar la pantalla con rgl.clear la imagen aparece "*flasheada*". Un ejemplo de lo que digo se puede ver, ejecutando: ang <- pi/180 cont <- 1 while(cont < 360) { # Vertices del cuadrado original if(cont == 1) { v <- matrix(NA,4,3) v[,1] <- c(0,0,1,1) v[,2] <- c(0,0,0,0) v[,3] <- c(0,1,1,0) # Cuadrado Original quads3d(v[,1],v[,2],v[,3],col="green") } # Rotacion v[1,] <- rotate3d(v[1,], ang, 0, 1, 0) v[2,] <- rotate3d(v[2,], ang, 0, 1, 0) v[3,] <- rotate3d(v[3,], ang, 0, 1, 0) v[4,] <- rotate3d(v[4,], ang, 0, 1, 0) # Pausa Sys.sleep(0.3) # Limpiar if(rgl.cur() !=0) rgl.clear() # Nuevo cuadrado quads3d(v[,1],v[,2],v[,3],col="green") # cont <- cont + 1 } ¿Hay alguna forma de dar movimiento a una figura con rgl sin que aparezcan esos flashes? Muchas gracias por adelantado. Un saludo, Alberto Soria. [[alternative HTML version deleted]]
Hola Alberto, No estoy seguro de que sea exactamente lo que buscas, pero quizás te sirva el ejemplo que viene en help(rgl.viewpoint): library(rgl) # animated round trip tour for 10 seconds rgl.open() shade3d(oh3d(), color="red") start <- proc.time()[3] while ((i <- 36*(proc.time()[3]-start)) < 360) { rgl.viewpoint(i,i/4); } Saludos. Oscar. ------------------- Oscar Perpiñán Lamigueiro Dpto. IngenierÃa Eléctrica EUITI-UPM http://procomun.wordpress.com ----------------------------------------->Hola a todos: > >Estoy intentando visualizar unos resultados de un programa en R de >forma dinámica. Dichos resultados se pueden representar, básicamente, >con un plano que gira sobre uno de sus ejes: para dar sensación de >movimiento he utilizado la función rgl.clear(), ya que no encuentro >los equivalentes en rgl de los parámetros add o new. El problema es >que al limpiar la pantalla con rgl.clear la imagen aparece >"*flasheada*". Un ejemplo de lo que digo se puede ver, ejecutando: > >ang <- pi/180 >cont <- 1 >while(cont < 360) { > # Vertices del cuadrado original > if(cont == 1) { > v <- matrix(NA,4,3) > v[,1] <- c(0,0,1,1) > v[,2] <- c(0,0,0,0) > v[,3] <- c(0,1,1,0) > # Cuadrado Original > quads3d(v[,1],v[,2],v[,3],col="green") > } > # Rotacion > v[1,] <- rotate3d(v[1,], ang, 0, 1, 0) > v[2,] <- rotate3d(v[2,], ang, 0, 1, 0) > v[3,] <- rotate3d(v[3,], ang, 0, 1, 0) > v[4,] <- rotate3d(v[4,], ang, 0, 1, 0) > # Pausa > Sys.sleep(0.3) > # Limpiar > if(rgl.cur() !=0) rgl.clear() > # Nuevo cuadrado > quads3d(v[,1],v[,2],v[,3],col="green") > # > cont <- cont + 1 > } > >¿Hay alguna forma de dar movimiento a una figura con rgl sin que >aparezcan esos flashes? > >Muchas gracias por adelantado. > >Un saludo, >Alberto Soria. > > [[alternative HTML version deleted]] >
Hola, Sí, el flash se produce. Como alternativa, si es que puedes utilizar algo diferente a rgl es capturar un conjunto de gráficos a modo de snapshots y luego juntarles para dar esta sensación de animación. Hay un paquete en R para ello: animation <http://cran.at.r-project.org/web/packages/animation/index.html> A Gallery of Animations in Statistics and Utilities to Create Animations Saludos, Carlos Ortega www.qualityexcellence.es 2011/7/7 Alberto Soria <alberto.soria@ari-solar.es>> Hola a todos: > > Estoy intentando visualizar unos resultados de un programa en R de forma > dinámica. Dichos resultados se pueden representar, básicamente, con un > plano > que gira sobre uno de sus ejes: para dar sensación de movimiento he > utilizado la función rgl.clear(), ya que no encuentro los equivalentes en > rgl de los parámetros add o new. El problema es que al limpiar la pantalla > con rgl.clear la imagen aparece "*flasheada*". Un ejemplo de lo que digo se > puede ver, ejecutando: > > ang <- pi/180 > cont <- 1 > while(cont < 360) { > # Vertices del cuadrado original > if(cont == 1) { > v <- matrix(NA,4,3) > v[,1] <- c(0,0,1,1) > v[,2] <- c(0,0,0,0) > v[,3] <- c(0,1,1,0) > # Cuadrado Original > quads3d(v[,1],v[,2],v[,3],col="green") > } > # Rotacion > v[1,] <- rotate3d(v[1,], ang, 0, 1, 0) > v[2,] <- rotate3d(v[2,], ang, 0, 1, 0) > v[3,] <- rotate3d(v[3,], ang, 0, 1, 0) > v[4,] <- rotate3d(v[4,], ang, 0, 1, 0) > # Pausa > Sys.sleep(0.3) > # Limpiar > if(rgl.cur() !=0) rgl.clear() > # Nuevo cuadrado > quads3d(v[,1],v[,2],v[,3],col="green") > # > cont <- cont + 1 > } > > ¿Hay alguna forma de dar movimiento a una figura con rgl sin que aparezcan > esos flashes? > > Muchas gracias por adelantado. > > Un saludo, > Alberto Soria. > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >[[alternative HTML version deleted]]
Gracias a los dos! Creo que lo que hace viewpoint es cambiar el punto de vista de la camara, que da una sensación de movimiento muy buena, pero en el momento que se tengan planos que se mueven de forma diferentes es la misma pantalla ya no sirve... Voy a echarlo un vistazo al paquete animation, a ver que tal. Gracias de nuevo! Un saludo, Alberto. El 7 de julio de 2011 09:40, Oscar Perpiñan Lamigueiro < oscar.perpinan@upm.es> escribió:> Hola Alberto, > > No estoy seguro de que sea exactamente lo que buscas, pero quizás te > sirva el ejemplo que viene en help(rgl.viewpoint): > > library(rgl) > # animated round trip tour for 10 seconds > > rgl.open() > shade3d(oh3d(), color="red") > > start <- proc.time()[3] > while ((i <- 36*(proc.time()[3]-start)) < 360) { > rgl.viewpoint(i,i/4); > } > > Saludos. > > Oscar. > ------------------- > Oscar Perpiñán Lamigueiro > Dpto. IngenierÃa Eléctrica > EUITI-UPM > > http://procomun.wordpress.com > > ----------------------------------------- > >Hola a todos: > > > >Estoy intentando visualizar unos resultados de un programa en R de > >forma dinámica. Dichos resultados se pueden representar, básicamente, > >con un plano que gira sobre uno de sus ejes: para dar sensación de > >movimiento he utilizado la función rgl.clear(), ya que no encuentro > >los equivalentes en rgl de los parámetros add o new. El problema es > >que al limpiar la pantalla con rgl.clear la imagen aparece > >"*flasheada*". Un ejemplo de lo que digo se puede ver, ejecutando: > > > >ang <- pi/180 > >cont <- 1 > >while(cont < 360) { > > # Vertices del cuadrado original > > if(cont == 1) { > > v <- matrix(NA,4,3) > > v[,1] <- c(0,0,1,1) > > v[,2] <- c(0,0,0,0) > > v[,3] <- c(0,1,1,0) > > # Cuadrado Original > > quads3d(v[,1],v[,2],v[,3],col="green") > > } > > # Rotacion > > v[1,] <- rotate3d(v[1,], ang, 0, 1, 0) > > v[2,] <- rotate3d(v[2,], ang, 0, 1, 0) > > v[3,] <- rotate3d(v[3,], ang, 0, 1, 0) > > v[4,] <- rotate3d(v[4,], ang, 0, 1, 0) > > # Pausa > > Sys.sleep(0.3) > > # Limpiar > > if(rgl.cur() !=0) rgl.clear() > > # Nuevo cuadrado > > quads3d(v[,1],v[,2],v[,3],col="green") > > # > > cont <- cont + 1 > > } > > > >¿Hay alguna forma de dar movimiento a una figura con rgl sin que > >aparezcan esos flashes? > > > >Muchas gracias por adelantado. > > > >Un saludo, > >Alberto Soria. > > > > [[alternative HTML version deleted]] > > >[[alternative HTML version deleted]]
Es verdad. Prueba a echarle un vistazo al código de la demo "flag". Es un objeto que cambia de forma y textura según va girando. Quizás puedas construir una función similar que cree/modifique objetos varios. library(rgl) demo(flag) Saludos. Oscar. El Thu, 7 Jul 2011 09:55:40 +0200 Alberto Soria <alberto.soria en ari-solar.es> escribió:> Gracias a los dos! > > Creo que lo que hace viewpoint es cambiar el punto de vista de la > camara, que da una sensación de movimiento muy buena, pero en el > momento que se tengan planos que se mueven de forma diferentes es la > misma pantalla ya no sirve... > > Voy a echarlo un vistazo al paquete animation, a ver que tal. > > Gracias de nuevo! > > Un saludo, > Alberto. > > > > El 7 de julio de 2011 09:40, Oscar Perpiñan Lamigueiro < > oscar.perpinan en upm.es> escribió: > > > Hola Alberto, > > > > No estoy seguro de que sea exactamente lo que buscas, pero quizás te > > sirva el ejemplo que viene en help(rgl.viewpoint): > > > > library(rgl) > > # animated round trip tour for 10 seconds > > > > rgl.open() > > shade3d(oh3d(), color="red") > > > > start <- proc.time()[3] > > while ((i <- 36*(proc.time()[3]-start)) < 360) { > > rgl.viewpoint(i,i/4); > > } > > > > Saludos. > > > > Oscar. > > ------------------- > > Oscar Perpiñán Lamigueiro > > Dpto. IngenierÃa Eléctrica > > EUITI-UPM > > > > http://procomun.wordpress.com > > > > ----------------------------------------- > > >Hola a todos: > > > > > >Estoy intentando visualizar unos resultados de un programa en R de > > >forma dinámica. Dichos resultados se pueden representar, > > >básicamente, con un plano que gira sobre uno de sus ejes: para dar > > >sensación de movimiento he utilizado la función rgl.clear(), ya > > >que no encuentro los equivalentes en rgl de los parámetros add o > > >new. El problema es que al limpiar la pantalla con rgl.clear la > > >imagen aparece "*flasheada*". Un ejemplo de lo que digo se puede > > >ver, ejecutando: > > > > > >ang <- pi/180 > > >cont <- 1 > > >while(cont < 360) { > > > # Vertices del cuadrado original > > > if(cont == 1) { > > > v <- matrix(NA,4,3) > > > v[,1] <- c(0,0,1,1) > > > v[,2] <- c(0,0,0,0) > > > v[,3] <- c(0,1,1,0) > > > # Cuadrado Original > > > quads3d(v[,1],v[,2],v[,3],col="green") > > > } > > > # Rotacion > > > v[1,] <- rotate3d(v[1,], ang, 0, 1, 0) > > > v[2,] <- rotate3d(v[2,], ang, 0, 1, 0) > > > v[3,] <- rotate3d(v[3,], ang, 0, 1, 0) > > > v[4,] <- rotate3d(v[4,], ang, 0, 1, 0) > > > # Pausa > > > Sys.sleep(0.3) > > > # Limpiar > > > if(rgl.cur() !=0) rgl.clear() > > > # Nuevo cuadrado > > > quads3d(v[,1],v[,2],v[,3],col="green") > > > # > > > cont <- cont + 1 > > > } > > > > > >¿Hay alguna forma de dar movimiento a una figura con rgl sin que > > >aparezcan esos flashes? > > > > > >Muchas gracias por adelantado. > > > > > >Un saludo, > > >Alberto Soria. > > > > > > [[alternative HTML version deleted]] > > > > >