Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-01-2009
Avatar de aeff
aeff aeff is offline
Miembro
 
Registrado: oct 2006
Ubicación: Cuba, Guantánamo
Posts: 348
Poder: 18
aeff Va camino a la fama
¿Cómo pintar un círculo matemáticamente?

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
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
  R: Real;
implementation
{$R *.DFM}
uses Math;
  function GetY(R, X: Real ): Real;
  var
    H, K, solve1, solve2: real;
  begin
    // R^2 = (X - H)^2 + (Y - K)^2
    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!
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Un Falso NYT Circulo el 12 de Noviembre RONPABLO La Taberna 0 13-11-2008 23:23:00
Círculo sin relleno bosterito Gráficos 2 01-02-2007 22:41:02
cómo recortar (en circulo) un formulario en delphi? rls Gráficos 2 02-06-2006 09:15:14
Como pintar la fila de un DBGrid Gustavo Gowdak OOP 2 04-05-2006 21:34:04
El círculo delphi.com.ar Humor 11 28-04-2004 21:22:42


La franja horaria es GMT +2. Ahora son las 09:32:59.


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
Copyright 1996-2007 Club Delphi