PDA

Ver la Versión Completa : Dibujar sobre un heptágono regular sabiendo el rádio


RONPABLO
27-07-2011, 21:19:55
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...

http://i56.tinypic.com/14adilc.png

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:


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í:

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. :)