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]] > > > > >