Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Dibujar Onda senoidal

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Dibujar Onda senoidal Responder citando

Saludos, a ver si me podeis echar una mano con este dilema.

¿Cómo hago para dibujar una onda senoidal en el Canvas de un TImage??

En realidad, lo que me interesa es saber como puedo hallar los valores de Y a partir de X, para ir metiendolos en un array -que serán las coordenadas de los puntos que formarán la senoide-.

A ver si alguien me echa una mano, algun matemático (porque yo las matemáticas, como que no mucho Sad )
_________________
Saludos, Alpha.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Hola, haber si he entendido tu duda, lo que quieres hacer es ir dibujando una onda sinusoidal y esto lo quieres hacer en un TImage, talves lo que te puedo indicar es como graficar la funcion f(x)=Seno(x), como no te el builder a mano voy a tratar de hacerlo lo mejor posible....

Antes que nada necesitamos incluir la libreria para funciones matematicas:
Código:
#include <math>

Ahora lo que vamos a colocar será un TImage de 200x200, y un boton
En el evento onClic del boton colocamos el siguiente codigo:
Código:

{
    int x,y;
   float xreal, yreal, presicion, liminferior, limsuperior;
   presicion = 0.01;
   liminferior = -3;
   limsuperior = 3;
   xreal = liminferior;
   //Limpiamos la Imagen
   Image1->Canvas->Rectangle(-1,-1,201,201);
   //  Graficamos los ejes
   // EJE X
   Image1->Canvas->MoveTo(0,100);
   Image1->Canvas->LineTo(200,100);
   // EJE Y
   Image1->Canvas->MoveTo(100,0);
   Image1->Canvas->LineTo(100,200);
   // Hacemos el ciclo para graficar todos los puntos desde -3 a 3
   while (xreal<limsuperior>Canvas->Pixels[x][y]=clBlue;
xreal+=presicion;
}
}

NOTA.- Recuerda este metodo es a traves de ir colocanco punto por punto, para que la grafica sea mejor puedes hacer variar el valor de la presicion, pero recuerda si tu presicion es menor se tardara mucho mas en graficar, y para tener una grafica simetrica los valores para la escala en X y la escala en Y deben de ser iguales..., yo lo coloque el valor de 100 en la escala de Y para que tenga un tamaño exacto en cuanto a abarcar todo el area del TImage, bueno espero haber sido claro si tienes alguna duda del codigo no dudes en preguntar, cuidate y me informas de como te ha ido... bye
_________________


Ultima edición por Raúl el Lun 16 Abr, 2007 11:35 pm, editado 2 veces
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor Yahoo Messenger MSN Messenger
Mensaje    Asunto: Responder citando

Hola Raul

Perdon por la pregunta, pero en tu codigo, dónde haces el calculo del Seno?

Ah! y otra cosa, la libreria es math.h, eh?

Gracias!
_________________
Dios es real... a menos que se declare entero!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Ayudaaa...

Alguien porfavor que me ayude... ya modifique por tercera vez el mensaje pero nada que se queda otra vez tal como lo ven, se corta el pedazo de codigo mas importante, que es donde se calcula el seno, haber despues de insertar este mensaje tratare de hacerlo nuevamente....

Espero que resulte...

Bye
_________________
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor Yahoo Messenger MSN Messenger
Mensaje    Asunto: Responder citando

Crying or Very sad Nada no hay caso

haber dejare la parte del while aqui:
Código:

while (xreal<limsuperior>Canvas->Pixels[x][y]=clBlue;
xreal+=presicion;
}

ah y gracias Jacko tienes razon, pero igual modifico esa parte pero nada no hace caso...
_________________
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor Yahoo Messenger MSN Messenger
Mensaje    Asunto: Responder citando

nada siempre...

haber otra prueba

while (xreal<limsuperior>Canvas->Pixels[x][y]=clBlue;
xreal+=presicion;
}
_________________
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor Yahoo Messenger MSN Messenger
Mensaje    Asunto: Responder citando

No llego a comprender porque se corta el trozo de codigo, nunca habia visto este tipo de fallas
en fin aqui les dejo la dirección con el pedazo de codigo del ciclo while que falta, despues de este ciclo ya viene solamente la llave final hasta la vista y espero que les sirva...

Si algun moderador puede revisar que paso... estamos en contacto bye

http://es.geocities.com/sejasraulm/arch/while.txt
_________________
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor Yahoo Messenger MSN Messenger
Mensaje    Asunto: Responder citando

No es ningún error... deshabilita el HTML en el mensaje y listo. Es muy probable que algunos caracteres los interprete como código HTML.

Saludos!
_________________
Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Hola. Espero que esto te sirva.
Código:
//* Declaro el gráfico
TCanvas *Grafica=new TCanvas;
En el evento de un botón o en el evento OnPaint del TCanvas coloca este código (no tengo el Builder a mano pero espero que se entienda):
L=anchura del TCanvas
H=altura del TCanvas
Código:
//* Dibujo el eje X
Grafico->MoveTo(0,H/2);
Grafico->LineTo(L,H/2);
//* Dibujo el eje Y
Grafico->MoveTo(0,0);
Grafico->LineTo(0,H);
n=número de puntos de cálculo
s=número de senos en el eje
Código:
//* Grafico el seno de x (amplitud máxima H/2) en 100 puntos del eje X
int n=20,s=5;
double dx,x,y;
const Pi=3.1415;
//* Pongo el lápiz al principio de la gráfica
Gráfico->MoveTo(0,H/2);
dx=L/s/n;
for(int i=1;i<n*s+1;i++){
//* Calculo el nuevo punto (X,Y)
  x=i*dx;
  y=sin(x);
//* Dibujo la línea hasta el nuevo punto
  Grafico->MoveTo(int(x),int(y*H/2));
}
Un saludo y espero que te sirva.
_________________
Nunca digas "Es imposible" sin intentarlo antes.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Gracias a todos por aportarme tantas soluciones Very Happy

Al final, me ha servido mejor la solución de Raúl, ha sido ajustar un par de cosillas y voilà! señal senoidal en pantalla.

Gracias de nuevo!! Very Happy
_________________
Saludos, Alpha.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.