Der Ansatz ist nicht schlecht, du musst aber bei dem Zeichnen vom Mittelpunkt ausgehen.
Delphi-Quellcode:
for i :=1 to Anzahl_Punkte do
begin
if x=0 then
begin
xi:=trunc (xm + ri*cos(i*winkelstueck)); // <--<<
yi:=trunc (ym + ri*sin(i*winkelstueck)); // <--<<
Image1.Canvas.LineTo(xi, yi)
end else
begin
xi:=trunc (xm + ra*cos(winkelstueck)); // <--<<
yi:=trunc (ym + ra*sin(winkelstueck)); // <--<<
image1.Canvas.lineto(xi, yi);
end;
end;