Ir al contenido


Un Triangulo usando canvas


  • Por favor identifícate para responder
23 respuestas en este tema

#1 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 13 diciembre 2008 - 09:18

Pues eso amigos.Estaba mirando el otro dia un tutorial de como hacer lineas, usando Canvas y pues no me quedo muy claro.
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 eduarcol

eduarcol

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.483 mensajes
  • LocationVenezuela

Escrito 13 diciembre 2008 - 09:44

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:


delphi
  1. 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.

Archivos adjuntos

  • Archivo adjunto  108_.zip   3,54KB   11 descargas

  • 0

#3 Caral

Caral

    Advanced Member

  • Administrador
  • 4.262 mensajes
  • LocationCosta Rica

Escrito 13 diciembre 2008 - 09:55

Hola
Este pequeño saltamontes no entiende Maistro, el dia que pueda entender C++ habré aprendido. :D
Maistro, Es verdad que se parece........... :
Saludos
  • 0

#4 eduarcol

eduarcol

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.483 mensajes
  • LocationVenezuela

Escrito 13 diciembre 2008 - 10:02

no es tan dificil como parece, es mas pior  8o|

pero no te preocupes, despues que le agarras el truco no lo sueltas tan facil.


pd. Maistro, jeje, ingeniero y de pura suerte jajaja
  • 0

#5 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 13 diciembre 2008 - 10:08

Yo sigo prefiriendo Delphi (Pascal) como que esta escrito pensando en los humanos. El C es un codigo muy enrredado.
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 eduarcol

eduarcol

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.483 mensajes
  • LocationVenezuela

Escrito 13 diciembre 2008 - 10:09

eso, muevele y veras, me avisas si te quedan dudas
  • 0

#7 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 13 diciembre 2008 - 10:37

Ya le jugue un poco y pues tengo que entender primero las cordenadas esas (me siguen estando confusas)



delphi
  1. 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 eduarcol

eduarcol

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.483 mensajes
  • LocationVenezuela

Escrito 13 diciembre 2008 - 10:44

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.
  • 0

#9 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 13 diciembre 2008 - 10:53


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:

delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var  Puntos: array of TPoint;
  3. begin
  4. with Canvas do
  5. begin
  6. Pen.Color := clYellow;
  7. Pen.Width := 3;
  8. Brush.Color := clGreen;
  9. SetLength( Puntos, 3 );
  10. Puntos[0].x := 150;
  11. Puntos[0].y := 150;
  12. Puntos[1].x := 250;
  13. Puntos[1].y := 200;
  14. Puntos[2].x := 150;
  15. Puntos[2].y := 200;
  16. Polygon( Puntos );
  17. end;
  18. end;


Ya aquí encontré la forma de darle color también.

Un Saludo.

#10 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.257 mensajes
  • LocationMéxico

Escrito 14 diciembre 2008 - 07:55

Con el ejemplo que entendiste, vas a entender mejor el asunto.


delphi
  1. procedure TForm1.Button2Click(Sender: TObject);
  2. begin
  3.   with Canvas do begin
  4.     Pen.Color := clYellow;
  5.     Pen.Width := 3;
  6.     Brush.Color := clGreen;
  7.     Polygon([point(150,150), point(250,200), point(150,200)]); //Omiti el arreglo de TPoints y los he acomodado en la funcion Polygon...
  8.   end;
  9. end;


Salud OS
  • 0

#11 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 14 diciembre 2008 - 10:05

Gracias Maestro.

Me esta empesando a gustar esta parte de graficas. :)

Saludos.

#12 axesys

axesys

    Advanced Member

  • Moderadores
  • PipPipPip
  • 640 mensajes
  • LocationLos Mochis

Escrito 26 marzo 2009 - 12:39

¿Como se le harí­a para dibujar un triangulo equilatero y que cuando minimizes o le pongas algo encima al triangulo no se borre?
  • 0

#13 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.257 mensajes
  • LocationMéxico

Escrito 26 marzo 2009 - 12:44

¿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
  1. procedure TForm1.FormPaint(Sender: TObject);
  2. begin
  3.    //Dibujar Triangulo equilatero
  4. end;



Salud OS
  • 0

#14 axesys

axesys

    Advanced Member

  • Moderadores
  • PipPipPip
  • 640 mensajes
  • LocationLos Mochis

Escrito 26 marzo 2009 - 12:49


¿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
  1. procedure TForm1.FormPaint(Sender: TObject);
  2. begin
  3.    //Dibujar Triangulo equilatero
  4. end;



Salud OS


Muy bien (y) ya no se borra

¿Y como se le podrá hacer para dibujar el triangulo como equilatero?
  • 0

#15 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.257 mensajes
  • LocationMéxico

Escrito 26 marzo 2009 - 01:08

Hola



delphi
  1. procedure TForm1.FormPaint(Sender: TObject);
  2. var
  3.   Puntos: array of TPoint;
  4. begin
  5.   with Canvas do begin
  6.     Pen.Color := clBlue;
  7.     Brush.Color := clBlue;
  8.     SetLength( Puntos, 3 );
  9.     Puntos[0].x := 10;
  10.     Puntos[0].y := 220;
  11.     Puntos[1].x := 100;
  12.     Puntos[1].y := 220;
  13.     Puntos[2].x := 50;
  14.     Puntos[2].y := 150;
  15.     Polygon( Puntos );
  16.   end;
  17. end;



Salud OS
  • 0

#16 axesys

axesys

    Advanced Member

  • Moderadores
  • PipPipPip
  • 640 mensajes
  • LocationLos Mochis

Escrito 26 marzo 2009 - 01:37

Sale un escaleno con todos los lados diferentes

90
86.02
80.62



delphi
  1. procedure TForm1.FormPaint(Sender: TObject);
  2. function distancia(p1,p2: TPoint):double;
  3. begin
  4.   Result:= sqrt(sqr(p2.x-p1.x)+sqr(p2.y-p1.y)) //http://es.wikipedia.org/wiki/Distancia
  5. end;
  6. var
  7. Puntos: array of TPoint;
  8. begin
  9. with Canvas do begin
  10.   Pen.Color := clBlue;
  11.   Brush.Color := clBlue;
  12.   SetLength( Puntos, 3 );
  13.   Puntos[0].x := 10;
  14.   Puntos[0].y := 220;
  15.   Puntos[1].x := 100;
  16.   Puntos[1].y := 220;
  17.   Puntos[2].x := 50;
  18.   Puntos[2].y := 150;
  19.   Label1.Caption:=FloatToStr(distancia(Puntos[0],Puntos[1]));
  20.   Label2.Caption:=FloatToStr(distancia(Puntos[1],Puntos[2]));
  21.   Label3.Caption:=FloatToStr(distancia(Puntos[2],Puntos[0]));
  22.   Polygon( Puntos );
  23. end;
  24. end;



Edito: Habí­a puesto mal la formula  :p
  • 0

#17 Fenareth

Fenareth

    Advanced Member

  • Moderador
  • PipPipPip
  • 3.486 mensajes
  • LocationMexico City

Escrito 26 marzo 2009 - 02:59

Hola axesys !

Has visto ya este hilo ???... creo que encontrarás algo muy bueno  (y)

Saludos
  • 0

#18 axesys

axesys

    Advanced Member

  • Moderadores
  • PipPipPip
  • 640 mensajes
  • LocationLos Mochis

Escrito 26 marzo 2009 - 04:23

Hola axesys !

Has visto ya este hilo ???... creo que encontrarás algo muy bueno  (y)

Saludos


Hola Fenareth, si esta muy bueno me gusto lo de la estrella, aunque ese triángulo tampoco es equilatero tiene dos lados de 172.05 y uno de 200 así­ que es un isósceles
  • 0

#19 axesys

axesys

    Advanced Member

  • Moderadores
  • PipPipPip
  • 640 mensajes
  • LocationLos Mochis

Escrito 26 marzo 2009 - 04:48

Con este ya sale más equilatero pero sale de cabeza alguien sabe como voltearlo

150
150.08
150.08



delphi
  1. procedure TForm1.FormPaint(Sender: TObject);
  2. function distancia(p1,p2: TPoint):double;
  3. begin
  4.   Result:= sqrt(sqr(p2.x-p1.x)+sqr(p2.y-p1.y)) //http://es.wikipedia.org/wiki/Distancia
  5. end;
  6. const
  7. lado = 150;
  8. var
  9. Puntos: array of TPoint;
  10. begin
  11. with Canvas do begin
  12.   Pen.Color := clBlue;
  13.   Brush.Color := clBlue;
  14.   SetLength( Puntos, 3 );
  15.   Puntos[0].x := 0;
  16.   Puntos[0].y := 0;
  17.   Puntos[1].x := lado;
  18.   Puntos[1].y := 0;
  19.   Puntos[2].x := Round(lado/2);
  20.   Puntos[2].y := Round((lado/2)*sqrt(3));
  21.   Label1.Caption:=FloatToStr(distancia(Puntos[0],Puntos[1]));
  22.   Label2.Caption:=FloatToStr(distancia(Puntos[1],Puntos[2]));
  23.   Label3.Caption:=FloatToStr(distancia(Puntos[2],Puntos[0]));
  24.   Polygon( Puntos );
  25. end;
  26. end;


  • 0

#20 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.257 mensajes
  • LocationMéxico

Escrito 26 marzo 2009 - 05:08

Hola

Intenta con esto



delphi
  1.   Puntos[0].x := 0;
  2.   Puntos[0].y := 260;
  3.   Puntos[1].x := lado;
  4.   Puntos[1].y := 260;
  5.   Puntos[2].x := Round(lado/2);
  6.   Puntos[2].y := Round((lado/2)*sqrt(3));



Salud OS
  • 0