Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Dibujar sobre un heptágono regular sabiendo el rádio (https://www.clubdelphi.com/foros/showthread.php?t=75067)

RONPABLO 27-07-2011 21:19:55

Dibujar sobre un heptágono regular sabiendo el rádio
 
hola, estoy un poco enredado tratando de dibujar en un heptágono regular una línea (o hasta 7) desde el centro (punto azul) a una distancia variable de su centro (en este caso cualquiera de los puntos rojos).... en si me da un poco de pena reconocer que no recuerdo nada de como tratar los ángulos, de como calcular coordenadas y creo que es por ahí por donde debo seguir... en la siguiente imagen les muestro el heptágono sobre el cual pienso trabajar...


RONPABLO 27-07-2011 21:24:31

creo que me falto definir mejor, mi intensión es que teniendo un punto de referencia (el primer punto rojo al lado derecho del número 3 que esta en la gráfica que envié), poder saber donde deben ir los otros 6 puntos rojos

RONPABLO 27-07-2011 22:19:15

listo... hay veces que con solo preguntar como que todo se despeja :) dejo la solución:

Código Delphi [-]
procedure TForm1.PintarLineas(radio, CentroX, CentroY  : integer);
var i : integer;
   ang : double;
begin
  Image1.Canvas.Pen.Color := clRed;
  Image1.Canvas.Pen.Width := 1;

  for i := 1 to 8 do
  begin
     ang := i * (2 * pi) / 7;
     if i = 1 then
        Image1.Canvas.MoveTo(round(CentroX + (radio * cos(90 + ang))) ,round(CentroY + (radio * sin(90 + ang))))
     else
        Image1.Canvas.LineTo(round(CentroX + (radio * cos(90 + ang))) ,round(CentroY + (radio * sin(90 + ang))));
  end;
end;

ecfisa 27-07-2011 22:59:16

Hola RONPABLO.

Me alegro que le dieras solución, yo estuve intentando con algo así:
Código Delphi [-]
procedure DibujarHep(const Frm: TForm; const Centro:TPoint; const Radio: Integer);
var
  P: array[1..6] of TPoint;
  Ang, i: Integer;
begin
  Ang:= 0;
  for i:= 1 to 6 do
  begin
    P[i].X:= Centro.X + Round(Radio * Cos(Ang));
    P[i].Y:= Centro.Y + Round(Radio * Sin(Ang));
    Inc(Ang, 45);
  end;
  Frm.Canvas.Polygon(P);
end;
Pero me parece más sencillo tu código ;)

Saludos. :)


La franja horaria es GMT +2. Ahora son las 19:29:18.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi