bellecaro
25-08-2016, 16:01:06
Hola a todos, soy nueva en esto de Delphi :p, ya leí la guía de estilo y me parece muy interesante.
Estoy tratando de realizar una gráfica de puntos con ejes cartesianos, existe una tabla stringGrid que se llena con los datos tomados en un laboratorio y esos datos deben ser graficados luego de completar la tabla. El problema que tengo es que cuando pulso el boton de graficar lee los datos y los grafica pero no logro ubicar los ejes "x" y "y" para que se vean. Ya llevo dos días buscando y no lo encuentro, lo que he tratado de hacer es lo siguiente:
procedure TrazarEjesYpuntos;
var
i:integer;
x1,y1:real;
const
r=2;
begin
begin
WITH form1.image1.Canvas DO
begin
Pen.Color:=0;
MoveTo(H(minX),V(0));
LineTo(H(maxX),V(0));
MoveTo(H(0),V(minY));
LineTo(H(0),V(maxX));
for i:=1 to N do
begin
x1:=tabla[1,i];
y1:=tabla[2,i];
form1.image1.Canvas.Ellipse(H(x1)-r,V(y1)-r,H(x1)+r,V(y1)+r);
end;
end;
end;
function H(x:real):integer;
begin
H:=round(H0+x*EscX);
end;
function V(y:real):integer;
begin
V:=round(V0-y*EscY);
end;
procedure DetectarExtremos;
var i:integer;
begin
minX:=tabla[1,1];
miny:=tabla[2,1];
maxX:=tabla[1,1];
maxY:=tabla[2,1];
for i:=2 to N do
begin
if tabla[1,i]>maxX then maxX:=tabla[1,i];
if tabla[1,i]<minX then minX:=tabla[1,i];
if tabla[2,i]>maxY then maxY:=tabla[2,i];
if tabla[2,i]<minY then minY:=tabla[2,i];
end;
end;
procedure calcEscalas;
var
aux:real;
begin
aux:=maxX-minX;
maxX:=maxX+aux/10.0;
minX:=minX-aux/10.0;
EscX:=ancho/(maxX-minX);
H0:=-minX*EscX;
aux:=maxY-minY;
maxY:=maxY+aux/10.0;
minY:=minY-aux/10.0;
EscY:=alto/(maxX-minY);
V0:=alto+minY*EscY;
end;
con
ancho:=form1.image1.width;
alto:=form1.image1.height;
El ancho y alto por lo que veo es el tamaño que esta puesto en las propiedades de la imagen que son 353 y 472, por lo tanto si trato de dibujar los puntos (1,3),(2,2)y(3,1) no veo ejes, pero si dibujo los puntos (500,0); (300,200) y (0,200) si veo los ejes.
gracias por su ayuda
Estoy tratando de realizar una gráfica de puntos con ejes cartesianos, existe una tabla stringGrid que se llena con los datos tomados en un laboratorio y esos datos deben ser graficados luego de completar la tabla. El problema que tengo es que cuando pulso el boton de graficar lee los datos y los grafica pero no logro ubicar los ejes "x" y "y" para que se vean. Ya llevo dos días buscando y no lo encuentro, lo que he tratado de hacer es lo siguiente:
procedure TrazarEjesYpuntos;
var
i:integer;
x1,y1:real;
const
r=2;
begin
begin
WITH form1.image1.Canvas DO
begin
Pen.Color:=0;
MoveTo(H(minX),V(0));
LineTo(H(maxX),V(0));
MoveTo(H(0),V(minY));
LineTo(H(0),V(maxX));
for i:=1 to N do
begin
x1:=tabla[1,i];
y1:=tabla[2,i];
form1.image1.Canvas.Ellipse(H(x1)-r,V(y1)-r,H(x1)+r,V(y1)+r);
end;
end;
end;
function H(x:real):integer;
begin
H:=round(H0+x*EscX);
end;
function V(y:real):integer;
begin
V:=round(V0-y*EscY);
end;
procedure DetectarExtremos;
var i:integer;
begin
minX:=tabla[1,1];
miny:=tabla[2,1];
maxX:=tabla[1,1];
maxY:=tabla[2,1];
for i:=2 to N do
begin
if tabla[1,i]>maxX then maxX:=tabla[1,i];
if tabla[1,i]<minX then minX:=tabla[1,i];
if tabla[2,i]>maxY then maxY:=tabla[2,i];
if tabla[2,i]<minY then minY:=tabla[2,i];
end;
end;
procedure calcEscalas;
var
aux:real;
begin
aux:=maxX-minX;
maxX:=maxX+aux/10.0;
minX:=minX-aux/10.0;
EscX:=ancho/(maxX-minX);
H0:=-minX*EscX;
aux:=maxY-minY;
maxY:=maxY+aux/10.0;
minY:=minY-aux/10.0;
EscY:=alto/(maxX-minY);
V0:=alto+minY*EscY;
end;
con
ancho:=form1.image1.width;
alto:=form1.image1.height;
El ancho y alto por lo que veo es el tamaño que esta puesto en las propiedades de la imagen que son 353 y 472, por lo tanto si trato de dibujar los puntos (1,3),(2,2)y(3,1) no veo ejes, pero si dibujo los puntos (500,0); (300,200) y (0,200) si veo los ejes.
gracias por su ayuda