Fórum Desenhar círculos aleatórios sem se sobreporem #356467
03/04/2008
0
olá pessoal,
estou precisando desenhar círculos num form sem que um fique sobre um já existente,
por exemplo;
eu executo a rotina para desenhar 30 círculos, eles tem que ficarem todos 100¬ visíveis,
depois executo a rotina de novo com outra quantidade, ela tem que apagar os existentes e criar os novos em novas posições,
o que consegui até o momento foi a rotina abaixo, mas as vezes uns ficam sobre os outros,
agradeço muitíssimo que poder me ajudar,
abraços,
Ricardo Coelho,
rotina:
var
RAIZ_DE_DOIS = 1.4142135;
procedure TForm1.Button3Click(Sender: TObject);
var
Rect: TRect;
i,j,y,x, raio, posicao01, posicao02, qnt,a,b : integer;
begin
qnt := StrToInt(edit3.Text);
j:=1 ;
raio := 30;
Randomize;
for i:=1 to qnt do
begin
posicao01 := Random(image1.Width);
posicao02 := Random(image1.Height);
while posicao01 <20 do posicao01 := Random(image1.Width);
while posicao02 <20 do posicao02 := Random(image1.Height);
Rect.Left := posicao01 - Round(Raio/RAIZ_DE_DOIS);
Rect.Top := posicao02 - Round(Raio/RAIZ_DE_DOIS);
Rect.Right := posicao01 + Round(Raio/RAIZ_DE_DOIS);
Rect.Bottom := posicao02 + Round(Raio/RAIZ_DE_DOIS);
image1.Canvas.Brush.Color := clRed;
image1.Canvas.Ellipse(rect); // desenha o círculo
end;
end;
estou precisando desenhar círculos num form sem que um fique sobre um já existente,
por exemplo;
eu executo a rotina para desenhar 30 círculos, eles tem que ficarem todos 100¬ visíveis,
depois executo a rotina de novo com outra quantidade, ela tem que apagar os existentes e criar os novos em novas posições,
o que consegui até o momento foi a rotina abaixo, mas as vezes uns ficam sobre os outros,
agradeço muitíssimo que poder me ajudar,
abraços,
Ricardo Coelho,
rotina:
var
RAIZ_DE_DOIS = 1.4142135;
procedure TForm1.Button3Click(Sender: TObject);
var
Rect: TRect;
i,j,y,x, raio, posicao01, posicao02, qnt,a,b : integer;
begin
qnt := StrToInt(edit3.Text);
j:=1 ;
raio := 30;
Randomize;
for i:=1 to qnt do
begin
posicao01 := Random(image1.Width);
posicao02 := Random(image1.Height);
while posicao01 <20 do posicao01 := Random(image1.Width);
while posicao02 <20 do posicao02 := Random(image1.Height);
Rect.Left := posicao01 - Round(Raio/RAIZ_DE_DOIS);
Rect.Top := posicao02 - Round(Raio/RAIZ_DE_DOIS);
Rect.Right := posicao01 + Round(Raio/RAIZ_DE_DOIS);
Rect.Bottom := posicao02 + Round(Raio/RAIZ_DE_DOIS);
image1.Canvas.Brush.Color := clRed;
image1.Canvas.Ellipse(rect); // desenha o círculo
end;
end;
Rickcoelho
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)