Título: [SOLUCIONADO] Problema matemático (vigésimo quinta edición xD) Publicado por: Eleкtro en 14 Marzo 2013, 22:28 pm Espero que alguien me pueda ayudar con esto...
Tengo un Timer donde debo realizar una operación. Estos son los elementos: Código
"Time_Measure" es un string y se refiere a segundos, minutos u horas. (S,M,H) "Time_Out" es la cantidad "X" de "Time_Measure" (Ejemplo: 30 segundos, 1 minuto, o 5 horas) "Current_Volume" es un valor single indefinido de 0 a 1 "Target_Volume" es otro valor single de 0 a 1 Lo que necesito hacer es calcular la relación de tiempo EN MILISEGUNDOS para disminuir un valor de "0.01" progresívamente desde al valor de "Current_Volume" hasta alcanzar el valor de "Target_Volume" Por poner un ejemplo, si tengo estos valores: Código
Traducido: 1 minuto Current volume: 100 Target volume: 0 ...Entonces deberé disminuir Cada 600 milisegundos un valor de 1 a "current volume" para alcanzar el valor de "target volume". Para eso, con una función que hice, primero convierto los "segundos, minutos u horas" elegidas, a milisegundos, y lo divido por 100: Código
Pero luego ya no sé como calcular el resto de la operación teniendo en cuenta el valor de "Current_Volume" y "target_Volume"... : Mi intento: Código
Creo que consigo un valor aproximado en mis estimaciones, pero no el exacto, me falta colocar bien algún factor que no sé... ¿Alguna ayuda porfavor? Título: Re: Problema matemático (vigésimo quinta edición xD) Publicado por: Keyen Night en 15 Marzo 2013, 01:21 am Y la pregunta general es entonces, ¿En cuanto tengo que aumentar X valor para que llegue a Y en Z tiempo durante W periodos?
Tienes que sumar en cada periodo W (el Interval del Timer), la diferencia entre X y Y dividido por el tiempo Z, todas estas variables se recomiendan Double o Long. Por ejemplo: De 0.0 (X) a 1.0 (Y), hay una diferencia de 1.0 si se quiere llegar en un tiempo de 1 segundo (Z) en 10 periodos de 100 milisegundos (W), entonces: Colocando el Interval del Timer en W (100 milisegundos), hay que sumar 1.0 / (Z / W) en cada periodo. Pero no estás recurriendo a las mejores practicas; define siempre el tiempo en milisegundos, no en minutos, ni en horas, eso es menos especifico y tiende a errores. Para dar formato u obtenerlo, si así lo deseas, usa TimeSpan. Título: Re: Problema matemático (vigésimo quinta edición xD) Publicado por: Eleкtro en 15 Marzo 2013, 08:24 am Gracias por contestar.
la pregunta general es entonces, ¿En cuanto tengo que aumentar X valor para que llegue a Y en Z tiempo durante W periodos? Que bien explicada, eso es lo que quiero, aunque el periodo es indefinido, creo que es lo que intento calcular también. Citar Tienes que sumar en cada periodo W (el Interval del Timer), la diferencia entre X y Y dividido por el tiempo Z, todas estas variables se recomiendan Double o Long. De 0.0 (X) a 1.0 (Y), hay una diferencia de 1.0 si se quiere llegar en un tiempo de 1 segundo (Z) en 10 periodos de 100 milisegundos (W), entonces: Colocando el Interval del Timer en W (100 milisegundos), hay que sumar 1.0 / (Z / W) en cada periodo. He intentado seguir los pasos que me indicas pero me he perdido, consigo un resultado que no es : PD: en este ejemplo defino el periodo pero también lo intento calcular, un periodo relativo para disminuir/aumentar un valor de "1" progresívamente, o quizás me estoy liando yo solo, no sé. Código
Citar Pero no estás recurriendo a las mejores practicas; define siempre el tiempo en milisegundos, no en minutos, ni en horas, eso es menos especifico y tiende a errores. Para dar formato u obtenerlo, si así lo deseas, usa TimeSpan. lo hago así, uso timespan (ticksper "X"...)para convertir el tiempo en MS, el valor de segundos/minutos/horas es un entero, no tengo error alguno al hacer esa conversión a MS. Título: Re: Problema matemático (vigésimo quinta edición xD) Publicado por: Eleкtro en 15 Marzo 2013, 18:27 pm ¿Nada?, ¿Alguien me puede ayudar a resolver del todo esa operación?
Es para poder terminar esta aplicación, la cual pienso compartir, y sólo me falta eso... Aquí podeis entender mejor los factores de la operación que necesito realizar: (http://img29.imageshack.us/img29/9930/captura1re.png) Uso las variables que he comentado en los posts de arriba, y el problema es que siempre se pasa (o no llega) al tiempo escojido, porque calculo mal la operación... Agradecería mucho una ayuda más para esto. Saludos... Título: Re: Problema matemático (vigésimo quinta edición xD) Publicado por: $Edu$ en 15 Marzo 2013, 23:23 pm Si intentas explicarlo de nuevo, con un ejemplo claro, intento ayudarte si quieres, pero en el primer post no hablabas de periodo y ahora si. No se para que necesitas el periodo, solo necesitas el valor de Interval para el Timer.
Olvidando los milisegundos, etc, que son cosas que veras luego tu, el problema es este: Tenemos un valor X que queremos que llegue al valor Y en Z tiempo. por ejemplo: x = 50 y = 20 z = 100 seg Hacemos la diferencia de x e y = 50 - 20 = 30. Ahora hacemos z/30 = 100/30 = 3,33333... El intervalo del Timer sera 3,33333.... seg = 3333,33.. milisegundos Asi que cada 3333,33.... milisegundos, a 50 se le restara 1 hasta llegar a 20, por lo tanto este Timer se ejecutara 30 veces cada 3333,33... milisegundos. Puse ese ejemplo para que veas que podras tener problemas con numeros periodicos y muchas cosas mas (na mentira, salio sin darme cuenta xD) pero tendrias que usar otro tipo de variable que no sea integer por eso mismo, aunque no se que valores usaras. Tal vez no es esto lo que pides, debo haber entendido mal, pero como dije antes, si dejas una buena explicacion te ayudo. Título: Re: Problema matemático (vigésimo quinta edición xD) Publicado por: Eleкtro en 16 Marzo 2013, 15:11 pm Me salvaste $Edu$ :)
La verdad es que yo ya estaba empezando a no entender ni mi própio problema ni lo que debía obtener xD, pero lo entendiste bien, era eso lo que necesitaba... Asi que cada 3333,33.... milisegundos, a 50 se le restara 1 hasta llegar a 20, por lo tanto este Timer se ejecutara 30 veces cada 3333,33... milisegundos. Lo que pasa es que dependiendo de si quiero disminuir o aumentar el valor, deberé intercambiar "X" por "Y" en la resta, aquí: Hacemos la diferencia de x e y = 50 - 20 = 30. ¿Estoy en lo cierto?, supongo que sí, porque he hecho las mediciones de lo que tarda el proceso, y parece que funciona corréctamente: Código
Bueno, gracias de nuevo, un saludo! Título: Re: [SOLUCIONADO] Problema matemático (vigésimo quinta edición xD) Publicado por: $Edu$ en 16 Marzo 2013, 15:58 pm No se bien que hacen tus funciones, que valores tendran las variables, etc, pero si algunos valores tendran decimales o peor aun, numeros periodicos (vaya uno a saber que elige el usuario) tendras que corregir esos posibles bugs, pero vamos, no entiendo bien que es lo que hara tu programa, pero tal vez no te importe tanta precision y te da lo mismo que no se demore 100 segundos por ejemplo, sino 99,9999 xD
Eso lo veras tu :P saludos! |