Ver Mensaje Individual
  #13  
Antiguo 19-05-2004
Avatar de dchaparro
dchaparro dchaparro is offline
Registrado
 
Registrado: abr 2004
Ubicación: La Plata, Argentina
Posts: 9
Reputación: 0
dchaparro Va por buen camino
Graficar una ecuacion cuadratica

Bueno, como no tenia nada que hacer, programe un pequeño procedimiento que grafica una funcion cuadratica.
Simplemente se crea un form, se ponen 5 edits, un TImage y un boton. Nombrar los Edits de la siguiente manera:
Edita,Editb,Editc,EditEscalax,EditEscalay y a la imagen le puse nombre: Hoja

En el OnClick del boton pegar el siguiente codigo:

Código:
procedure TForm1.Button1Click(Sender: TObject);
var a,b,c,escx,escy,x,fx: Real;
	origenx,origeny,i: integer;
begin
a:= StrToFloat(Edita.Text);//convierto los edits en numeros
b:= StrToFloat(Editb.Text);
c:= StrToFloat(Editc.Text);
escx:= StrToFloat(EditEscalax.Text);
escy:= StrToFloat(EditEscalay.Text);
with Hoja.Canvas do //Hoja es una TImage en este caso
begin
origenx:= Trunc(Hoja.Width/2); //establezco el origen (0,0) en la mitad de la hoja
origeny:= Trunc(Hoja.Height/2);
MoveTo(origenx,0); //dibujo los ejes
LineTo(origenx,Hoja.Height);
MoveTo(0,origeny);
LineTo(Hoja.Width,origeny);
for i:= 0 to Hoja.Width do	 //genero el grafico en todo el ancho de TImage
	 begin
	 x:= -escx + 2*escx*i/Hoja.Width; // simplemente observar los valores extremos de i
	 fx:= a*x*x + b*x + c;	// fx es el valor de la ecuacion en el punto x, esta claro
	 if i = 0 then //La primera vez solo muevo
		MoveTo(0,Trunc(origeny - fx*origeny/escy))
		else
		LineTo(i,Trunc(origeny - fx*origeny/escy));
	 end;
end;
end;
Esta funcion, grafica en la imagen una ecuacion cuadratica ax2+bx+c, donde a, b y c son los valores cargados en Edita,Editb y Editc.
En EditEscalax y EditEscalay pondremos los rangos que queremos visualizar, para los ejes x e y respectivamente.
Como se ve, no es muy dificil, ya que el programa ocupa tan solo una pantalla y claro que es mejorable a gusto del consumidor

Bueno, espero que sirva para algo.

PD: ingresando cero en "Edita", tendremos una ecuacion lineal

PD2: podemos cambiar la linea: fx:= a*x*x + b*x + c;
por la funcion que deseemos, por ej fx:= sin(x); funciona a la perfección.

Última edición por dchaparro fecha: 19-05-2004 a las 02:24:52. Razón: Error en una linea del codigo
Responder Con Cita