Public Sub simulacion_algoritmo_paper_JCISER() Dim text0 = crlf text0 = text0 + "SIMULACION GENERAL DEL ALGORITMO JCISER" ' Call informar0(text0 + crlf) Call informar0(text0 + crlf) ' Dim todo_auto = 1 ' If todo_auto = 1 Then 'If nofi$ = "" Then 'nofi$ = "D:\Danzante\Mociones\0.ARCADE.Viernes 1.mc2" 'openfile_Mcn_feten(nofi$) 'archivos = 1 'TextBox1.Text = nofi$ + " " + noticia 'TextBox4.Text = 140 'TextBox5.Text = 189 'End If 'E'nd If Dim prin, fin, num As Short Call vmociones.calcula_limites(prin, fin, num) Dim prin0 = prin Dim fin0 = fin 'Tras cambiar? referencia 'copio_mociones_short_a_double() 'vmociones.Button63.BackColor = System.Drawing.Color.Tomato Dim mocion_tranf As Byte = 0 Dim prini, fini ' = prin + num prini = prin ' To fin Step num fini = prini + num 'letre = letre + "Momentos 0, 1: " + Str(momentos_mociones(0, Val(vmociones.TextBox1.Text))) + _ ' Str(momentos_mociones(0, Val(vmociones.TextBox1.Text))) + crlf '+ crlf ' Dim paso_a_refe_0 = 0 '¡============================================================================== 'FUERA DEL ALGORITMO, SOLO EN LA SIMULACION: ' Public Function copio_bloque_mocion_refe(mocion_origen As Byte, mocion_destino As Byte, referencia_origen As Byte, referencia_destino As Byte, ByVal prin As Short, ByVal fin As Short) As Double 'devuelve distancia_2 Point4D() If paso_a_refe_0 = 1 Then If numero_arti_referencia <> 0 Then For kkk = 0 To numero_camaras - 1 Call copio_bloque_mocion_refe(kkk, kkk, numero_arti_referencia, 0, prini, fini) 'devuelve distancia_2 Point4D() Next End If End If '¡============================================================================== 'Tras cambiar? referencia copio_mociones_short_a_double() vmociones.Button63.BackColor = System.Drawing.Color.Tomato '¡============================================================================== 'ESTO SIMULA LA CALIBRACION CON EL PRIMER BLOQUE '¡============================================================================== Call reune_bloque_mociones_giro_escala_traslacion(mocion_tranf, prini, fini, letre, matriz_estimacion_total) 'longitud basada en mociones separadas y media de huesos Call longitudes_dos_mociones(prini, fini, 0) 'no representa 'en dos se han mppromediado 'longitud basada en mociones ya reunidas (ver01) y, promedio de location of articulaciones homólogas y medida entondes de esqueleto. 'lo pasa a 2 Call promedia_mociones(prini, fini, numero_arti_referencia, 3, 1, 2) ' 'ha de ser la ultima porque es la que se usa en OPTIMIZACION Call longitudes_media_mociones_reunidas(prini, fini, 2) 'no representaProyecto Danzante. Simulación completa de JCISER (incluido en Danzante)
A continuación presentamos la secuencia completa de simulación de toda la aplicación descrita en el paper JCISER. Como hemos visto antes, partimos de una moción doble, grabación en archivo de extensión .mc2, en la cual, calibramos con 50 cuadros a partir de 140 (elegido por proporcionar unas longitudes de huesos relativamente estables. A continuación optimizamos esos mismos 50 cuadros con ol una de las mociones giradas según el resultado de la calibración citada. a continuación optimizamos los siguientes 50 cuadros, con esa misma giro de calibración. Finalmente vemos la película de los esqueletos optimizados para cada cuadro. Para comprobar y medir, su comportamiento suave.
'¡============================================================================== 'ESTO SIMULA LA OPTIMIZACION DEL PRIMER BLOQUE (el mismo que survio para calibrar retoca_paper_los_cuadros_bloque(prini, fini) '¡============================================================================== 'Hasta ahora hemos optimizado el bloque que sirvio para calibrar. ' No es extraño que el ajuste sea pequeño (puede ser erróneo!!) 'Ahora conviwne simular la optimizacion en tiempo real. Para ello: '1. Rotamos siguiente bloque con la matriz R obtenida en la reunion previa '2. `promediamaos ambas (pskel y qskel) AUNQUE DEBE SUSTITUIRSE POR el skel :_opt del cuadro anterior '3. Optimizamos ese nuevo bloque 'Como reunimos la mocion 0 hacia la 1, hacemos eso mismo con el nuevo bloque 'Public Function rota_bloque_mocion_feten(prin, fin, m1, m2) 'As Point4D() 'podemos recorrer todas la mocion en bloques de num 'for prini = prin + num fini = prini + num '¡============================================================================== 'FUERA DEL ALGORITMO, SOLO EN LA SIMULACION: ' Public Function copio_bloque_mocion_refe(mocion_origen As Byte, mocion_destino As Byte, referencia_origen As Byte, referencia_destino As Byte, ByVal prin As Short, ByVal fin As Short) As Double 'devuelve distancia_2 Point4D() If paso_a_refe_0 = 1 Then If numero_arti_referencia <> 0 Then For kkk = 0 To numero_camaras - 1 Call copio_bloque_mocion_refe(kkk, kkk, numero_arti_referencia, 0, prini, fini) 'devuelve distancia_2 Point4D() Next End If End If '¡============================================================================== '¡============================================================================== 'ESTO SIMULA LA OPTIMIZACION USANDO las DISTANCIA de HUESOS y la MSTRIZ R que lleva Q a p obtenidas en laCALIBRACION '¡============================================================================== '¡============================================================================== 'ESTAS OPERACIONES, PARA SIMULAR NEJOR, no DEBEn ser en Bloque, sino CUADRO A CUADRO 'QUE ES COMO LLEGAN DESDE LAS CAMARAS EN TIEMPO REAL '¡============================================================================== '============================================================================== '1. 'implementamos el paso de q=Rp*+t del articulo 'la matriz estimacion toyal no es perfecta, solo parecida a la que se ontiene poco c poco acumylando 'creo que ya lo es NO matriz_libre = matriz_estimacion_total 'se emplea para rotar 'matriz_libre = matriz_estimacion_total_global 'mocion_tranf ha sido 0, que ha sido llevada a 3 y reunida allí con 1 ' matriz_libre.Invert() 'el promedio se almacena en 2 'ESTO NO FUNCIONA BIEN (Sep 2016). Sale pequeño el esqueleto 'Esto supone que se obtubo matriz_estimacion acercando mocion 0 a 3 Dim mocion_rotada If roto_mocion_1 = 0 Then 'o una mocion_rotada = mocion_tranf 'p sea m0 ' rota_bloque_mocion_feten(prini, fini, mocion_tranf, 3) 'As Point4D() Else 'u otra 'la nternativa mocion_rotada = 1 - mocion_tranf matriz_libre.Invert() ' = matriz_estimacion_total 'se emplea para rotar End If Dim mocion_no_rotada = 1 - mocion_rotada 'rota m1 y lo almaceba en m2 ' Public Function mocion_a_pseudoesqueleto_mocion(mocion As Byte, motor As Integer, referencia As Byte, presenta As Byte) As Point4D() ' Public Function rota_bloque_mocion_feten(prin, fin, m1, m2) 'As Point4D() ' rota_bloque_mocion_feten(prini, fini, mocion_rotada, 3) 'As Point4D()'¡=============================================================================='IMPORTANTE SOBRE FIAB ILIDAD Y Coeficientes WW al optimizar. 'Al REUNIR o ROTAR NO modificamos la os coeficientes de fiabiliada de captacion. ' PERO 'SÍ modificamos las cercanias de proyecciones en pantalla. 'Por lo TANTO, los cordicientes ww 'HAN DE CALCULARSE en qskel 'ANTES de realizar la ROTACION de Bloque (a la reunion no le afecta) 'Pero sí al RETOCA 'por lo tanto, NADA de BLOQUES 'O bien CALCULAMOS ww en BLOQUE antes de ROTAR y de RETOCAR '¡==============================================================================
'IMPORTANTE SOBRE FIAB ILIDAD Y Coeficientes WW al optimizar. 'Al REUNIR o ROTAR NO modificamos la os coeficientes de fiabiliada de captacion. ' PERO 'SÍ modificamos las cercanias de proyecciones en pantalla. 'Por lo TANTO, los cordicientes ww 'HAN DE CALCULARSE en qskel 'ANTES de realizar la ROTACION de Bloque (a la reunion no le afecta) 'Pero sí al RETOCA 'por lo tanto, NADA de BLOQUES 'O bien CALCULAMOS ww en BLOQUE antes de ROTAR y de RETOCAR '¡==============================================================================¡==============================================================================
'NUEVO. roto in situ rota_bloque_mocion_feten(prini, fini, mocion_rotada, mocion_rotada) 'As Point4D() 'REVISAR text0 = text0 + "Para obtener q*=Rq+t ROTO Mocion" + Str(mocion_rotada) + " a mocion" + Str(3) ' Call informar0(text0 + crlf) Call informar(text0 + crlf) 'Call informar0(text0 + crlf) '============================================================= 'cpmo esta pero tocando 1 y 3, en luagr de 0 y 1 'porque 3 es el transformado de 0 ' archivos = 0 'vmociones.Button4.BackColor = System.Drawing.Color.LightGray '2. 'No indispesable el promedio, si se alamacena allí la anteriori. SI 'se emplea la 2 pues para anterior o para promedio, Call promedia_mociones(prini, fini, numero_arti_referencia, 3, mocion_no_rotada, 2) 'Call copio_bloque_mocion(3, mocion_rotada, numero_arti_referencia, prini, fini) 'Call copio_bloque_mocion_D(3, mocion_rotada, prini, fini) 'copio_mociones_double_a_short() 'dibujo vmociones.TextBox4.Text = prini vmociones.TextBox5.Text = fini 'Call toca_mocion() 'toca_mocion_feten(prini, fini) 'ijo con calculos de ww 'meter cercanias entre arti en pantallas 'cuando se pueda, distinguir trackes from inferred '¡============================================================================== 'ESTO SIMULA LA OPTIMIZACION DEL SIGUIENTE BLOQUE (el siguiente que sirvio para calibrar retoca_paper_los_cuadros_bloque(prini, fini) 'copio_mociones_todas_double_a_short() '0 y 1 dibujo copio_mociones_auxiliares_double_a_short() '2 y 3 dibujo '¡============================================================================== ' Public Sub toca_fragmento_mociones_api(ByVal prin As Short, ByVal fin As Short, ByVal m0 As Byte, ByVal m1 As Byte) toca_fragmento_mociones_api(prini, fini, 2, 2)
redactado el 13 oct de 2016
Vuelta al Principio Última actualización: martes, 18 de octubre de 2016 Visitantes: