Un Triangulo usando canvas
#1 Guest_Jose Fco_*
Posted 13 December 2008 - 09:18 AM
Me gustaria que algun maestro nos pusiera por aca un ejemplito de como hacer un triangulo usando canvas y que nos explique como ponerle color.
Un Saludo.
PD:Seria buena idea, poder contar con un pequeño tutorial al respecto por aca.
#2
Posted 13 December 2008 - 09:44 AM
el canvas es una pizarra de dibujo, pero para dibujar debes utilizar comandos, para el triangulo yo utilizaria el polyline, donde se dibuja una linea en los puntos indicados, por ejemplo mira esta linea:
form1.Canvas.Polyline([point(10,10), point(20,30), point(30,30), point(10,10)]);
alli dibujas un triangulo, a pesar de tener 4 puntos, porque el primero y el ultimo es el mismo para que la linea cierre.
Voy a anexar un pequeño programita en C++
Turbo C++
Version 1.01
Copyright © 1990 by
Borland International, Inc.
es el juego de guerra naval, realizado lo que en ese entonces se conocia como Borland Graphic Interface BGI pero la mayoria de las funciones por no decir todas estan en el canvas, si quieres lo migras a delphi para que aprendas un poco de las funciones del canvas.
Attached Files
#3
Posted 13 December 2008 - 09:55 AM
Este pequeño saltamontes no entiende Maistro, el dia que pueda entender C++ habré aprendido.
Maistro, Es verdad que se parece...........
Saludos
#4
Posted 13 December 2008 - 10:02 AM
pero no te preocupes, despues que le agarras el truco no lo sueltas tan facil.
pd. Maistro, jeje, ingeniero y de pura suerte jajaja
#5 Guest_Jose Fco_*
Posted 13 December 2008 - 10:08 AM
Como decia en el primer post estaba mirando un codigo y pues aprendi a tirar lineas.(como es logico entre dos puntos) pero lo del triangulo no lo entendi muy bien.Dejame jugar con el cambiandole valores para verle la contrapelusa.
Un Saludo.
#6
Posted 13 December 2008 - 10:09 AM
#7 Guest_Jose Fco_*
Posted 13 December 2008 - 10:37 AM
form1.Canvas.Polyline([point(20,20), point(80,20), point(20,80), point(20,20)]);
Asi esta mas o menos lo que quiero, pero como no entiendo bien como corre el codigo pues no lo puedo acomodar.
Es cosa de tiempo y ver si encuentro algun tutorial.
Un Saludo.
PD:Una linea sola me es facil, porque se donde la quiero comensar y donde terminar.
#8
Posted 13 December 2008 - 10:44 AM
Dentro de cada point tienes dos valores, uno es el eje x y el otro es el eje y, asi cada punto corresponde a un punto especifico en la pantalla donde Y es la coordenada vertical X la coordenada horizontal.
Imaginate que el form es un eje de coordenadas, y trata de ubicar los puntos en el, un triangulo tiene 4 puntos porque el primero y el ultimo son los mismos, inicio y fin.
#9 Guest_Jose Fco_*
Posted 13 December 2008 - 10:53 AM
a ver si me puedo dar a entender:
Dentro de cada point tienes dos valores, uno es el eje x y el otro es el eje y, asi cada punto corresponde a un punto especifico en la pantalla donde Y es la coordenada vertical X la coordenada horizontal.
Imaginate que el form es un eje de coordenadas, y trata de ubicar los puntos en el, un triangulo tiene 4 puntos porque el primero y el ultimo son los mismos, inicio y fin.
Bueno X y Y esos me quedan claros, donde me perdi fue en el codigo.
Aqui encontre un ejemplito que me quedo mas claro:
procedure TForm1.Button1Click(Sender: TObject); var Puntos: array of TPoint; begin with Canvas do begin Pen.Color := clYellow; Pen.Width := 3; Brush.Color := clGreen; SetLength( Puntos, 3 ); Puntos[0].x := 150; Puntos[0].y := 150; Puntos[1].x := 250; Puntos[1].y := 200; Puntos[2].x := 150; Puntos[2].y := 200; Polygon( Puntos ); end; end;
Ya aquí encontré la forma de darle color también.
Un Saludo.
#10
Posted 14 December 2008 - 07:55 AM
Con el ejemplo que entendiste, vas a entender mejor el asunto.
procedure TForm1.Button2Click(Sender: TObject); begin with Canvas do begin Pen.Color := clYellow; Pen.Width := 3; Brush.Color := clGreen; Polygon([point(150,150), point(250,200), point(150,200)]); //Omiti el arreglo de TPoints y los he acomodado en la funcion Polygon... end; end;
Salud OS
#11 Guest_Jose Fco_*
Posted 14 December 2008 - 10:05 AM
Me esta empesando a gustar esta parte de graficas.
Saludos.
#12
Posted 26 March 2009 - 12:39 PM
#13
Posted 26 March 2009 - 12:44 PM
¿Como se le haría para dibujar un triangulo equilatero y que cuando minimizes o le pongas algo encima al triangulo no se borre?
Hola amigo
Utilizando el evento OnPaint de la forma
procedure TForm1.FormPaint(Sender: TObject); begin //Dibujar Triangulo equilatero end;
Salud OS
#14
Posted 26 March 2009 - 12:49 PM
¿Como se le haría para dibujar un triangulo equilatero y que cuando minimizes o le pongas algo encima al triangulo no se borre?
Hola amigo
Utilizando el evento OnPaint de la forma
delphi
procedure TForm1.FormPaint(Sender: TObject); begin //Dibujar Triangulo equilatero end;
Salud OS
Muy bien ya no se borra
¿Y como se le podrá hacer para dibujar el triangulo como equilatero?
#15
Posted 26 March 2009 - 01:08 PM
procedure TForm1.FormPaint(Sender: TObject); var Puntos: array of TPoint; begin with Canvas do begin Pen.Color := clBlue; Brush.Color := clBlue; SetLength( Puntos, 3 ); Puntos[0].x := 10; Puntos[0].y := 220; Puntos[1].x := 100; Puntos[1].y := 220; Puntos[2].x := 50; Puntos[2].y := 150; Polygon( Puntos ); end; end;
Salud OS
#16
Posted 26 March 2009 - 01:37 PM
90
86.02
80.62
procedure TForm1.FormPaint(Sender: TObject); function distancia(p1,p2: TPoint):double; begin Result:= sqrt(sqr(p2.x-p1.x)+sqr(p2.y-p1.y)) //http://es.wikipedia.org/wiki/Distancia end; var Puntos: array of TPoint; begin with Canvas do begin Pen.Color := clBlue; Brush.Color := clBlue; SetLength( Puntos, 3 ); Puntos[0].x := 10; Puntos[0].y := 220; Puntos[1].x := 100; Puntos[1].y := 220; Puntos[2].x := 50; Puntos[2].y := 150; Label1.Caption:=FloatToStr(distancia(Puntos[0],Puntos[1])); Label2.Caption:=FloatToStr(distancia(Puntos[1],Puntos[2])); Label3.Caption:=FloatToStr(distancia(Puntos[2],Puntos[0])); Polygon( Puntos ); end; end;
Edito: Había puesto mal la formula
#19
Posted 26 March 2009 - 04:48 PM
150
150.08
150.08
procedure TForm1.FormPaint(Sender: TObject); function distancia(p1,p2: TPoint):double; begin Result:= sqrt(sqr(p2.x-p1.x)+sqr(p2.y-p1.y)) //http://es.wikipedia.org/wiki/Distancia end; const lado = 150; var Puntos: array of TPoint; begin with Canvas do begin Pen.Color := clBlue; Brush.Color := clBlue; SetLength( Puntos, 3 ); Puntos[0].x := 0; Puntos[0].y := 0; Puntos[1].x := lado; Puntos[1].y := 0; Puntos[2].x := Round(lado/2); Puntos[2].y := Round((lado/2)*sqrt(3)); Label1.Caption:=FloatToStr(distancia(Puntos[0],Puntos[1])); Label2.Caption:=FloatToStr(distancia(Puntos[1],Puntos[2])); Label3.Caption:=FloatToStr(distancia(Puntos[2],Puntos[0])); Polygon( Puntos ); end; end;
#20
Posted 26 March 2009 - 05:08 PM
Intenta con esto
Puntos[0].x := 0; Puntos[0].y := 260; Puntos[1].x := lado; Puntos[1].y := 260; Puntos[2].x := Round(lado/2); Puntos[2].y := Round((lado/2)*sqrt(3));
Salud OS