Страница 1 из 2

Рисование)) никак не получаецо))

Добавлено: 22 апр 2008, 20:53
DOM
Задача следующая: нарисовать звезду и заполнить(залить ее) каким-либо цветом.Затем вокруг звезды описать квадрат.Звезду нарисовал, а вот ее окраска и рисование квадрата никак не выходит.
Конечно наверное это очень легко, но я эту тему не разбирал, а завтра показать задачку преподу надо полюбому))Помогите пожалуйста))

Код: Выделить всё

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  procedure StarLine(x0,y0,r:integer);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
var
x,y,r:integer;

procedure TForm1.StarLine(x0,y0,r:integer);
var
  p:array[1..11] of TPoint;
  a:integer;
  i:integer;
begin
  a:=18;
  for i:=1 to 10 do
    begin
      if (i mod 2=0) then
        begin
          p[i].x:=x0+Round(r/3*cos(a*2*pi/360));
          p[i].y:=y0-Round(r/3*sin(a*2*pi/360));
        end
      else
        begin
          p[i].x:=x0+Round(r*cos(a*2*pi/360));
          p[i].y:=y0-Round(r*sin(a*2*pi/360));
        end;
      a:=a+36;
  end;
  p[11].X:=p[1].X;
  p[11].Y:=p[1].Y;
  Canvas.Polyline(p);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Canvas.Pen.Color:=clRed;
  StarLine(200,250,100);
end;

end.
 
Собстенно вот код, который рисует звезду.Теперь надо ее окрасить и вписать ее в квадрат.

Re: Рисование)) никак не получаецо))

Добавлено: 22 апр 2008, 21:58
MOTOCoder
Вместо Canvas.Polyline(p); используйте
[syntax='Delphi']
canvas.Brush.Color:=clred;
Canvas.Polygon(p);{заполненная звезда}
canvas.Brush.Style:=bsclear;
Canvas.Rectangle(p[5].X,p[9].y,p[11].x,p[3].y);{квадрат}
[/syntax]

Re: Рисование)) никак не получаецо))

Добавлено: 22 апр 2008, 22:09
DOM
Спосибище!!! Я так и думал, что так и надо делать))
Забыл блин Polyline удалить!
Еще раз СПС

Re: Рисование)) никак не получаецо))

Добавлено: 24 апр 2008, 18:48
DOM
Помогите еще пожалуйста доработать задачу немного.Суть в следующем:внутри квадрата случайным образом появляются точки, и если они не попадают на звезду, то окрашиваются случайным цветом(а если попадают, то не визуализируются)

Очень надо сделать, знаю что просто, но как всегда нету времени на изучение материала.Буду вам очень признателен.заранее спасибо!!!

Re: Рисование)) никак не получаецо))

Добавлено: 24 апр 2008, 20:10
DOM
Чтобы точки появлялись, я то могу сделать, но они только одного цвета и появляются где попало, а не в квадрате))помогите чем можете плиз))

Re: Рисование)) никак не получаецо))

Добавлено: 24 апр 2008, 20:10
MOTOCoder
1. Добавить переменные

Код: Выделить всё

w,h,yy,xx,dx,dy:integer;
2. В конце процедуры StarLine добавить блок инициализации переменных
[syntax='Delphi']
xx:=p[5].x;
yy:=p[5].Y;
w:=p[11].x-p[5].x;
h:=p[9].y-p[3].Y;
[/syntax]

3. Добавить на форму таймер, установив свойство enabled в False, в Button1.Click после вызова StarLine добавить

Код: Выделить всё

Timer1.Enabled:=true;
4. В обработчике Timer1.OnTimer разместить код
[syntax='Delphi']
dx:=random(w);
dy:=random(h);
dx:=xx+dx;
dy:=yy+dy;
if Canvas.Pixels[dx,dy]=clred then
Canvas.Pixels[dx,dy]:=Random(maxint);
[/syntax]

В роде бы все.

Re: Рисование)) никак не получаецо))

Добавлено: 24 апр 2008, 20:21
DOM
А можно как-то без таймера обойтись...например при нажатии на кнопку каждый раз рисуются произвольно точки???

Re: Рисование)) никак не получаецо))

Добавлено: 24 апр 2008, 20:37
MOTOCoder
DOM писал(а):А можно как-то без таймера обойтись...например при нажатии на кнопку каждый раз рисуются произвольно точки???


Можно(нужно переписать код обработчика таймера в обработчик OnClick кнопки), но вероятность попадания точки в звезду невелика, поэтому, чтобы увидеть хотя бы несколько точек, придется нажать кнопку много раз. По-моему с таймером лучше.

Re: Рисование)) никак не получаецо))

Добавлено: 24 апр 2008, 22:12
DOM
а как еще сделать так, что точки, которые попадают на здезду окрашиваются в красный цвет или вообще не появляются?

Re: Рисование)) никак не получаецо))

Добавлено: 24 апр 2008, 22:51
MOTOCoder
А, это я перепутал. В условии if Canvas.Pixels[dx,dy]=clred then нужно заменить = на <>.