14.04.2009, 13:19 | #1 (permalink) |
Новичок
Регистрация: 31.03.2009
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Найти общую часть окружностей
Общую часть накладывающихся друг на друга окружностей закрасить зелёным цветом. |
14.04.2009, 13:19 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Найдены следующие совпадения с вашей темой Ремонт HP DV6000 серии. Часть 2 Проблема с концентратором. Часть 2 |
17.04.2009, 03:08 | #4 (permalink) |
Новичок
Регистрация: 31.03.2009
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
У меня возникает вопрос(точнее два, но второй, наверное, не по теме) по следующему коду:
Код:
var Form1: TForm1; R: array [0..n] of Record R: 20..40; P: TPoint; C: TColor; end; ... var I, J: Integer; P1: array [0..n] of HRGN; P: HRGN; DC: HDC; begin Canvas.Brush.Color:= clBtnFace; Canvas.Rectangle(0, 0, Width, Height); for I:= 0 to n do with R[I] do begin R:= Random(20) + 21; P.X:= Random(Width - 2*R) + R; P.Y:= Random(Height - 2*R) + R; C:= RGB(0, random(255), random(255)); Canvas.Pen.Color:= C; Canvas.Brush.Color:= C; Canvas.Ellipse(P.X - R, P.Y - R, P.X + R, P.Y + R); P1[I]:= CreateEllipticRgn(P.X - R, P.Y - R, P.X + R, P.Y + R); end; Canvas.Brush.Color:= clRed; DC:= GetDC(Handle); for I:= 0 to n do for J:= 0 to n do begin CombineRgn(P, P1[I], P1[J], RGN_AND); FillRgn(DC, P, Canvas.Brush.Handle); end; end; 1) В результате ни один из кругов не закрашен в красный цвет; 2) Круги выходят за пределы формы. |
20.04.2009, 14:28 | #5 (permalink) |
Новичок
Регистрация: 31.03.2009
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
В общем, проблема 1) решена:
Код:
var I, J: Integer; P1: array [0..n] of HRGN; P: HRGN; DC: HDC; begin B.Canvas.Brush.Color:= clBtnFace; //Тип: TBitmap(объявлена как глобальная переменная) B.Canvas.Rectangle(0, 0, Width, Height); for I:= 0 to n do with R[I] do//Массив записей(R - радиус, P - центр, С - цвет) begin B.Canvas.Pen.Color:= C; B.Canvas.Brush.Color:= C; if (P.X + dx[I] - R<=0) or (P.X + dx[I] + R>=ClientWidth) then // Смещение по оси Ox(у каждого круга разная "скорость") dx[I]:= -dx[I]; P.X:=P.X + dx[I]; if (P.Y + dy[I] - R<=0) or (P.Y + dy[I] + R>=ClientHeight) then dy[I]:= -dy[I];// Смещение по оси Oy P.Y:=P.Y + dy[I]; B.Canvas.Ellipse(P.X - R, P.Y - R, P.X + R, P.Y + R); P1[I]:= CreateEllipticRgn(P.X - R, P.Y - R, P.X + R, P.Y + R); end; Canvas.Draw(0, 0, B); Canvas.Brush.Color:= clRed; DC:= Canvas.Handle; P:= CreateEllipticRgn(0,0,1,1); for I:= 0 to n do for J:= I+1 to n do begin CombineRgn(P, P1[I], P1[J], RGN_AND); FillRgn(DC, P, Canvas.Brush.Handle); end; end; |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|