saludos!
miren colegas, el problema es que necesito pintar un círculo matemáticamente, sin usar el método Ellipse del Canvas ya que con este método si el Pen.Width = 1 e intento ir "cerrando el radio" y repintar un nuevo círculo quedan pixeles sin pintar, mi objetivo es lograr un Degradado Radial parecido al de PhotoShop, pero lo que necesito primeramente es logarar que no ocurra lo que acabo de explicar, si uso la fórmula matemática del círculo:
R^2 = (X - H)^2 + (Y - K)^2, y despejo para halla a que valor de X le corresponde en Y según el radio, me sucede lo siguiente:
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
R: Real;
implementation
{$R *.DFM}
uses Math;
function GetY(R, X: Real ): Real;
var
H, K, solve1, solve2: real;
begin
H := R;
K := R;
solve1 := sqr(R) - sqr ( X - H );
solve2 := (sqrt( abs(solve1) )) + k;
Result := solve2;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
X: Real;
Y: Integer;
Value: Byte;
begin
X := 0.000;
Screen.Cursor := crHourGlass;
while X <= R * 2 do
begin
Y := Round(GetY(R, X)) ;
Value := 255 * Round(Y * (sin(DegToRad(Y))));
Canvas.Pixels[ 200 - Round(R) + Round(X), 200 - round(R) + Y ] := RGB(Value, Value, Value);
Canvas.Pixels[ 200 - Round(R) + Round(X), 200 + round(R) - Y ] := RGB(Value, Value, Value);
X := X + 0.1;
end;
Screen.Cursor := crDefault
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
R := 100;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
I: Integer;
begin
for I := 1 to 100 do
begin
R := I;
Button1Click(self);
end;
end;
nuevamente existen pixeles que no lograr cerrar el arco completamente,
espero que me hallan entendido y que me puedan responder.
mil gracias de antemano,
saludos!
aeff!