• Miércoles 20 de Noviembre de 2024, 14:26

Autor Tema:  Seno,coseno, Tangente  (Leído 11706 veces)

avis_phoenix

  • Miembro activo
  • **
  • Mensajes: 96
  • Nacionalidad: mx
    • Ver Perfil
Seno,coseno, Tangente
« en: Martes 13 de Julio de 2004, 17:29 »
0
:hola: HOLA!! les voya a hacer una pregunta muy matematica sé que no es un foro para matematicas si no para c++, pero esta es mi pregunta ¿como se puede calcular el seno de un angulo sin usar al libreria math.h?, ¿alguein conoce el algoritmo op formula para sacar el seno, coseno,  y tangente? o al forma matematica que se usa, es decir ¿alguien sabe que hace una calculadora para sacar el seno, coseno y tangente? necesito de perdida la poesia de como se hace, por favor, esto lo pregunto pues quiero usar estas funciones en una cabecera grafica pero al ser gráfica debo usar en lomínimo otras cabeceras sobre todo matematicas pues hace muy lento el proceso y en un mdo o gráfico lo importante es la fluides del mismo, quiero evitar que se vea como se va haciendo la figura, por favor ayudenme. :(  :comp:  :hola:
"La envidia en los hombres muestra cuán desdichados se sienten, y su constante atención a lo que hacen o dejan de hacer los demás, muestran cuánto se aburren." "Las religiones, como las luciérnagas, necesitan de oscuridad para brillar." "Los hombres vulgares han inventado la vida en sociedad porque les es más fácil soportar a los demás que soportarse a sí mismos." "Sólo es libre aquello que existe por las necesidades de su propia naturaleza y cuyos actos se originan exclusivamente dentro de sí." "La experiencia nos ha demostrado que a la persona no le resulta nada más difícil de dominar que su lengua." "La madurez del hombre es haber vuelto a encontrar la seriedad con la que jugaba cuando era niño." "Los monos son demasiado buenos para que el hombre pueda descender de ellos." "El hombre, en su orgullo, creó a Dios a su imagen y semejanza" "Lo que hacemos no es nunca comprendido, y siempre es acogido sólo por los elogios o por la crítica."

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Seno,coseno, Tangente
« Respuesta #1 en: Miércoles 14 de Julio de 2004, 05:51 »
0
se hace a travez de sumatorias, pero no hagoe so hace ya años.. y escasamente me acuerdo..
investiga por metodos numericos para el calculo de funciones trigonometricas a partir de sumatorias...
en nu libro de algoritmos de cesar becerra hay ejercicios en pseudocodigo al respecto.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Seno,coseno, Tangente
« Respuesta #2 en: Miércoles 14 de Julio de 2004, 16:48 »
0
Cita de: "avis_phoenix"
.... quiero usar estas funciones en una cabecera grafica .....

.... al ser gráfica debo usar en lo mínimo otras cabeceras......

....sobre todo matematicas pues hace muy lento el proceso......

.....en un mdo o gráfico lo importante es la fluides del mismo.......
Deja ver si entendí, lo que quieres es velocidad y las funciones que vienen con la biblioteca "math" te parecen un asco de lentas...

Dependiendo del nivel de precisión que necesites, sería bueno que intentes usar tablas con los datos precalculados, no existe otra forma más rápida especialmente si las ecuaciones son algo "pesadas". Tendrías que analizar muy bien que resultados esperas para aplicar este método y si es factible o no. Si tu tabla ocupará más MB de RAM de lo que estás dispuesto a usar olvídate de este método.

Otro punto que veo: Es posible que, por la forma que estés graficando (Sería bueno que expusieras como estás realizando esto para ver si existe desperdicio de recursos), las funciones de graficación te consuman más tiempo que el mismo cálculo matemático.  De todas formas, como tu problema parece ser más de optimización que otra cosa, es vital que indiques información del compilador, versión, detalles del hardware máquina, etc que estás usando para tu programa para tener un panorama adecuado de por que va tan lenta la cosa.

avis_phoenix

  • Miembro activo
  • **
  • Mensajes: 96
  • Nacionalidad: mx
    • Ver Perfil
Re: Seno,coseno, Tangente
« Respuesta #3 en: Jueves 15 de Julio de 2004, 04:20 »
0
Vaya a lo que me refiero es que una cabecera de alto nivel cualquiera uqe sea (hasta la que estoy intentando a hacer) es muchsisiisisisisisisimo más lenta que el lenguaje ensablador simplemente hace más lento el dibujado cuado usas la multiplicación la simple multiplicación ahora imaginate lo que haría un algoritmo que esta hecho para ser general, yo no necesito tooodo loq ue puede hacer math.h, si no solo unas cuantas cosas, no neceisto nisiquiera exactitud, necesito que sea si acasi de 1 decimal no más (ahi contesto lo del la exactitud) pues no hay pixeles y medio, y necesito el decimal para redondear (si redondea por default pues no necesito decimales) ya me van entendiendo?, para mi librería usomucho ellenguaj eensamblador, sin embargo no conozco lo suficiente y me estoy giando por ayuda, sin embargo la ayuda hasta ahi llega(hasta lo que llevo), y por ejemplo para hacer un arco necesitaría saber coseno y seno, y comod iej si cargo tooooda la cabecera math.h pues se alentaría más (por cosas pequeñitas, pero valiosas para el ojo humano), la maquina, pues mi máquina no es la gran cosapero la quiero hacer para maquinas 486 con 16 mb y 4mb en video(que ya es mucho para esas máquinas) y la miapues es más potente, uso turbo c++ 3.0 como compilador, espero que con esto se entienda que cosa quiero, y bueno he estado pensado un poco y meserviria también saber hacer una raiz cuadrada (igual con 1 deciaml de exactitud) y ya, espero que puedan ayudarme y Gracias por toodo.
"La envidia en los hombres muestra cuán desdichados se sienten, y su constante atención a lo que hacen o dejan de hacer los demás, muestran cuánto se aburren." "Las religiones, como las luciérnagas, necesitan de oscuridad para brillar." "Los hombres vulgares han inventado la vida en sociedad porque les es más fácil soportar a los demás que soportarse a sí mismos." "Sólo es libre aquello que existe por las necesidades de su propia naturaleza y cuyos actos se originan exclusivamente dentro de sí." "La experiencia nos ha demostrado que a la persona no le resulta nada más difícil de dominar que su lengua." "La madurez del hombre es haber vuelto a encontrar la seriedad con la que jugaba cuando era niño." "Los monos son demasiado buenos para que el hombre pueda descender de ellos." "El hombre, en su orgullo, creó a Dios a su imagen y semejanza" "Lo que hacemos no es nunca comprendido, y siempre es acogido sólo por los elogios o por la crítica."

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Seno,coseno, Tangente
« Respuesta #4 en: Jueves 15 de Julio de 2004, 05:29 »
0
Cita de: "avis_phoenix"
... una cabecera de alto nivel cualquiera uqe sea (hasta la que estoy intentando a hacer) es muchsisiisisisisisisimo más lenta que el lenguaje ensablador...
Eso no siempre es cierto. De hecho para hacerlo mejor en ASM tienes que ser un programador de ASM que sepa buenos trucos, por lo menos con los compiladores actuales obtienes código ASM bastante bueno. (Verificado personalmente, luego de desensamblar mis programas)

Para pisar terreno firme te aconsejo que hagas esto: verifica el tiempo que toma en la 486 las operaciones de la biblioteca math y compáralas a realizar una multiplicación en punto flotante: realizas con un ciclo "for", digamos, 10000 operaciones simples de coseno, seno, tangente  y calculas cuanto tiempo pasó (mejor si lo haces unas 3 a 5 veces y tomas el promedio, mejor si el tiempo de prueba dura por lo menos unos 5 a 10 segundos (aumentas/disminuyes el número de cálculos para que tarde más/menos, más tiempo aburre, menos no es muy exacto) para notar diferencias)

También sería bueno que midieras el tiempo que toma realizar la simple graficación en pantalla.

Al final veremos en cuanto tiempo realiza digamos 10000 operaciones de coseno, 10000 puntos graficados en pantalla, 10000 líneas dibujadas, etc. Esas mediciones som imprescindibles para decir con certeza si se ha ganado algo (un 10% por lo menos diría que es algo) o nada con una optimización.

Teniendo esos datos veremos si es conveniente volver a crear la rueda...

Y una cosa... supongo que estará activado la opción de usar coprocesador matemático (y no emulación por software), por lo menos que sepa a partir de las 486 TODOS los procesadores incluyen un coprocesador.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Seno,coseno, Tangente
« Respuesta #5 en: Jueves 15 de Julio de 2004, 05:41 »
0
pues si se entiende..
pero lo cierto es que tendrias que ser un progrtamador en assembler con por lo menos 10 años de experiencia y conocer muchiciisisisimo de matematicas para poder hacer una funcion de seno, coseno etc.. mas rapida que la que ya trae la libreria math...
una cosa es optimizar una pequeña operacion a tus necesidades y otra cosa es meterce con metodos numericos que tan solo para entenderlos en lenguaje c te tomarias un largo tie po.. ahora en asembler este tiempo seria de años... y no exagero.

Con los compiladores de hoy en dia eso no es problema... dificilmente un humano lograria un codigo tan eficiente que hiceiera lo mismo e igual de rapido que el codigo generado por un compilador de lenguaje c...
hay cosas como las impresiones enm pantalla que serian mas vecloces en ensamblador solo porque tu usarias y crearias codigo para hacer cosas muy especificas en asm pero en lenguajes como c no existe y no debe existir una funcion muy especifica sino por el contrario que brinde la capacidad de reusar el codigo lo mas posible....
pero en el caso de las matematicas generalmente vas a tener que hacer funciones que reciban dos o mas parametros porque la idea es agilizar el proceso de desarrllo, asi que hacer mipementaciones que cubran varios aspectops desde ensamblador... es un trabajo titanico que nisiquiera debe ser para una sola persona sno para uans cuantas...
1-
Un consejo... no subestimes la calidad del cosdigo de los compiladores modernos...
2- otro consejo
si decides hacerlo todo tu en assembler.. espera unos años  a que aprendas a manejarlo muy bien y luego intenta con un grupo de amigos hacer todas las cosas que necesitas en ese lengeje... y si eres muy audaz y logras hacer la primera etapa trata de hacerla para que maneje por lo menos tres decimales....

NOooo mejor dicho..
suerte...

usa la math.

Recuerda que math.h no es una libreria es solo un encabezado que no hace absolutamente nada por si mismo..
si lo abres veras que no hay nada de codigo solo nombres de funciones con sus parametros , #defines, #includes y otras bobadas..
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

avis_phoenix

  • Miembro activo
  • **
  • Mensajes: 96
  • Nacionalidad: mx
    • Ver Perfil
Re: Seno,coseno, Tangente
« Respuesta #6 en: Jueves 15 de Julio de 2004, 06:34 »
0
:hola:  HOLA!! y gracias :gracias:  por todas las esperanzas y ánimos que me dan, :hitcomp: , es muy cierto lo que dices de los trucos de ensamblador, tambien es cierto que el tiempo en que realiza dichas operaciones es muy poco y dificilmente son lentos, pero bueno repito que hablo de gráficos, para el ojo humano una centesima de segundo es perfectamente captable, y bueno es chiste de esta pregunta no es hacer un algoritmo perfecto, repito necesito algo muy básico, nada exageradamente bueno, aquí hasta me hablan de grados de exactitud, no quiero exactitud, ni pretendo mejorar a borland, por favor no soy tanto (haganme la buena), si fuera tan fregon como para mejorar a los programadores de borland creanme que no vengo y pregunto en foros de internet, tampoco quiero pretender ser ensamblador bueno, ni conocer aprofundida este lenguaje (vaya demaciada profundidad), quiero abusar (aunque suene feo) de los que visitan estos foros por si alguno conoce al algoritmo y me lo pase, o la formula ya con eso me hago bolas yo solo, entiendo que no es un algoritmo sencillo, y repito que el chiste de no usar la librería math (aparte de aprender) es no usar un algoritmo complejo y complicado (complejo usando la definición matemática, pues tengo entendido que esto se realiza mediante algo de complejidad no tengo bien entendido exactamente que usan) y al no usar algo tan complicado evitar operaciones innecesarias, y así lograr mayor rápidez, así que espero que alguien conozca el algoritmo y me lo pase, explique en que iba a usar esta formula para que entendieran que tipo de formula necesito, que tipo de calculo necesito y por que no uso math.h, y si claro que sé que math.h no dice nada más que el nombre de las funciones, no creen que abrir un encabezado es laprimera curiosidad que tuve?, y que sabiendo que math.h hace elseno pensar que ahi dice como lo hace?, la abri hace mucho y vi que no tenia nada, pero bueno alparecer la voya  tener que usar, otra razón por la cual no quiero usar esta cabecera es por que yo tengo entendido que al usar un cabecera carga (lee) toooda la cabecera y no nada más lo que necesito, entonces se me hace mucho lo que hace esta cabecera para lo que yo necesito.  :(

Bueno si alguien conoce el algoritmo para calcular seno o coseno o  tangente o raiz cuadrada me haría muy feliz si me la pasara. :D

P.D. la tangente en realidad nola necesito pero tengomucha curiosidad :P

 :adios:
"La envidia en los hombres muestra cuán desdichados se sienten, y su constante atención a lo que hacen o dejan de hacer los demás, muestran cuánto se aburren." "Las religiones, como las luciérnagas, necesitan de oscuridad para brillar." "Los hombres vulgares han inventado la vida en sociedad porque les es más fácil soportar a los demás que soportarse a sí mismos." "Sólo es libre aquello que existe por las necesidades de su propia naturaleza y cuyos actos se originan exclusivamente dentro de sí." "La experiencia nos ha demostrado que a la persona no le resulta nada más difícil de dominar que su lengua." "La madurez del hombre es haber vuelto a encontrar la seriedad con la que jugaba cuando era niño." "Los monos son demasiado buenos para que el hombre pueda descender de ellos." "El hombre, en su orgullo, creó a Dios a su imagen y semejanza" "Lo que hacemos no es nunca comprendido, y siempre es acogido sólo por los elogios o por la crítica."

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Seno,coseno, Tangente
« Respuesta #7 en: Jueves 15 de Julio de 2004, 07:07 »
0
bueno..
insistes...
en mi modo de verlo perderas el tiepo tratando de hacer algo mas optimo que lo tiene el compilador

seguro se tardara mas cargando tu aplicacion en c que en assembler(algo tan pequeño com imperceptible)... pero una vez cargado sera lo mas rapido que puedas conseguir... si quieres una soucion rapida.. sino pues adelante con tu version de las funciones en assembler...

En la perima respuesta que te di. dice como encontrar los algoritmos.

sino repito... busca en internet acerca de metodos numericos para resolver seno coseno etc.. por metodos de aproximacion... y/o por sumatorias..
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Seno,coseno, Tangente
« Respuesta #8 en: Jueves 15 de Julio de 2004, 07:16 »
0
Por cuirto con el mdo grafico si es necesario la fluidez...
y eso se consigue con velocidad..
pero la verdad la velocidad no basta necesitas sabeer sincronizar las cosas que hacer con cosas comoel  barrido de la pantalla y las tecnicas de dibujo que utilices y las tecnicas buffering que uses es decir:
triplebuffer, flip, double buffer etc...

asiq eu no ganaras absolutamente nada con pretender hacer una funcion matematica compleja tu mismo...

En tu caso.. si la velocidad es muy critica (como en un calculo cientifico de un sistema en tiempo real(exageré un pocoton))
lo peor que puedes hacer es tratar de usar calculos matematicos hehos por ti mismo... muy mala solcion...
lo segundo , no tan malo, es usar lom que ya esta hecho y suficientemenmte bien optimizado (libreria math y su encabezado math.h), esto sera lo mas normal...

pero como en tu caso mencionas que son calcuilos muy pequeños , sin mayor precision...
yo recomiendo que en vez de ponerte a hacer las operaciones te hagas una tabla de equivalencias algo asi:
<!--xc1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>XCODE </td></tr><tr><td id='XCODE'><!--exc1-->
struct val_seno
{
   short grado;
   long  valor_seno;
};

struct val_seno valores_seno[N]
<!--xc2--></td></tr></table><div class='postcolor'><!--exc2-->

y tengas ya todo precalculado antes de empezar a graficar de tal manera que es mas rapido buscar en el array los valores equivalentes al seno de un grdo determinado que ponerce a hacer el calculo a travez de la libreria matematica o en el peor de los casos de ponerte a hacer tu mismo los calculos en assembler.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

carmamezo

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
Re: Seno,coseno, Tangente
« Respuesta #9 en: Jueves 15 de Julio de 2004, 10:06 »
0
La última respuesta de Juank es la que más rápido te va a permitir usar funciones trigonométricas, en la programación  de dispositivos PDS (procesamiento digital de señales) se usan una serie de tablas donde se guardan los valores de senos y cosenos.
En C debieras de hacer lo mismo, cargar esta tabla en memoria a través de un malloc (un array con todos los valores de todos los ángulos, al menos del primer cuadrante... el resto salen por una serie de reglas trigonométricas sencillas)  La búsqueda en este array se hace de manera muy rápida y por tanto satisface tus necesidades de velocidad... Ahora bien es un coñazo realizar el código.
De todas formas te puedo asegurar que los algoritmos incluidos en las librerías de C han sido programados por gente bastante lista y normalmente es dificil mejorarlos...
Suerte. :comp:
No hay tonto más molesto que el ingenioso.

avis_phoenix

  • Miembro activo
  • **
  • Mensajes: 96
  • Nacionalidad: mx
    • Ver Perfil
Re: Seno,coseno, Tangente
« Respuesta #10 en: Sábado 17 de Julio de 2004, 04:51 »
0
"Lo que hacemos no es nunca comprendido, y siempre es acogido sólo por los elogios o por la crítica."
Friedrich Wilhelm Nietzsche
"La envidia en los hombres muestra cuán desdichados se sienten, y su constante atención a lo que hacen o dejan de hacer los demás, muestran cuánto se aburren." "Las religiones, como las luciérnagas, necesitan de oscuridad para brillar." "Los hombres vulgares han inventado la vida en sociedad porque les es más fácil soportar a los demás que soportarse a sí mismos." "Sólo es libre aquello que existe por las necesidades de su propia naturaleza y cuyos actos se originan exclusivamente dentro de sí." "La experiencia nos ha demostrado que a la persona no le resulta nada más difícil de dominar que su lengua." "La madurez del hombre es haber vuelto a encontrar la seriedad con la que jugaba cuando era niño." "Los monos son demasiado buenos para que el hombre pueda descender de ellos." "El hombre, en su orgullo, creó a Dios a su imagen y semejanza" "Lo que hacemos no es nunca comprendido, y siempre es acogido sólo por los elogios o por la crítica."