| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Alpha120 Lt


Registrado: 11 Mar 2007Mensajes: 99Ubicación: Sevilla, España
|
Publicado: Sab 14 Abr, 2007 8:13 pm Asunto: Dibujar Onda senoidal |
|
|
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 ) _________________ Saludos, Alpha. |
|
| Volver arriba |
|
 |
Raúl Capt


Registrado: 16 Ago 2002Mensajes: 174Ubicación: Oruro (Bolivia)
|
Publicado: Lun 16 Abr, 2007 11:22 pm Asunto: |
|
|
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:
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 |
|
 |
jacko Master


Registrado: 03 Sep 2005Mensajes: 287Ubicación: Colombia
|
Publicado: Lun 16 Abr, 2007 11:26 pm Asunto: |
|
|
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 |
|
 |
Raúl Capt


Registrado: 16 Ago 2002Mensajes: 174Ubicación: Oruro (Bolivia)
|
Publicado: Lun 16 Abr, 2007 11:30 pm Asunto: |
|
|
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 |
|
 |
Raúl Capt


Registrado: 16 Ago 2002Mensajes: 174Ubicación: Oruro (Bolivia)
|
Publicado: Lun 16 Abr, 2007 11:37 pm Asunto: |
|
|
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 |
|
 |
Raúl Capt


Registrado: 16 Ago 2002Mensajes: 174Ubicación: Oruro (Bolivia)
|
Publicado: Lun 16 Abr, 2007 11:39 pm Asunto: |
|
|
nada siempre...
haber otra prueba
while (xreal<limsuperior>Canvas->Pixels[x][y]=clBlue;
xreal+=presicion;
} _________________
 |
|
| Volver arriba |
|
 |
Raúl Capt


Registrado: 16 Ago 2002Mensajes: 174Ubicación: Oruro (Bolivia)
|
Publicado: Lun 16 Abr, 2007 11:47 pm Asunto: |
|
|
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 |
|
 |
Buildero Master


Registrado: 23 Dic 2003Mensajes: 523Ubicación: Puebla, México
|
Publicado: Mar 17 Abr, 2007 12:24 am Asunto: |
|
|
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 |
|
 |
Cerúleo Master


Registrado: 04 Ago 2003Mensajes: 332Ubicación: Santander, España
|
Publicado: Mar 17 Abr, 2007 2:15 pm Asunto: |
|
|
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 |
|
 |
Alpha120 Lt


Registrado: 11 Mar 2007Mensajes: 99Ubicación: Sevilla, España
|
Publicado: Mar 17 Abr, 2007 3:27 pm Asunto: |
|
|
Gracias a todos por aportarme tantas soluciones
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!!  _________________ Saludos, Alpha. |
|
| Volver arriba |
|
 |
|