Регистрация: 13.09.2010
Сообщений: 7
|
Разбиение
Ребята помогите пожалуста,очень срочно надо!Уже незнаю что делать ![Радость](images/smilies/smile.gif) в общем в чём состоит задача:есть квадрат,а внутри него в центре круг.Нужно сделать разбииение таким образом:круг не должен делиться,а вот квадрат должен быть наподобие паутинки.то есть от центра квадрата отходят "лучики",то есть квадрат будто делится на маленькие равные треугольники,у каждого из которых одна вершина в центре.и эти треугольники нужно ещё поделить на прямоугольнички. в общем незнаю как поделить на прямоугольники.Рисунок и код приложен внизу. В начале квадрат делил на 4 треугольника,потом каждый из которых делил пополам итд.как треугольник Серпинского.
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Spin, Buttons, ExtCtrls, ComCtrls;
type
TForm1 = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
Panel1: TPanel;
SpeedButton1: TSpeedButton;
Label4: TLabel;
SpinEdit1: TSpinEdit;
Button1: TButton;
Panel2: TPanel;
Image1: TPaintBox;
procedure SpeedButton1Click(Sender: TObject);
// procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
rnd,x1,x2,x3,x4,x5,y1,y2,y3,y4,y5,x11,y11,x55,y55,x22,y22,x33,y33,xa,ya,xb,yb, FinalKol,R:integer;
c:char;
kol:integer;
implementation
{$R *.dfm}
procedure Line(x1,y1,x2,y2:real; C:TCanvas);
begin
c.Moveto(round(x1),round(y1));
c.lineto(round(x2),round(y2));
end;
Procedure Tri(kol:integer;x1,y1,x2,y2:real);
var
xd,yd,xe,ye,xf,yf,xg,yg:real;f:integer;
begin
inc(kol);
if kol= 3 then
begin
line(x1,y1,x2,y2, Form1.Image1.Canvas);
line(x2,y2,x3,y3, Form1.Image1.Canvas);
line(x3,y3,x1,y1, Form1.Image1.Canvas);
line(x11,y11,x4,y4, Form1.Image1.Canvas);
line(x4,y4,x3,y3, Form1.Image1.Canvas);
line(x3,y3,x11,y11, Form1.Image1.Canvas);
line(x5,y5,x22,y22, Form1.Image1.Canvas);
line(x22,y22,x3,y3, Form1.Image1.Canvas);
line(x3,y3,x22,y22, Form1.Image1.Canvas);
line(x4,y4,x3,y3, Form1.Image1.Canvas);
line(x3,y3,x55,y55, Form1.Image1.Canvas);
line(x55,y55,x4,y4, Form1.Image1.Canvas);
form1.Image1.Canvas.Refresh;
end
else
begin
xd:=round((x1+x2)/2);
yd:=round((y1+y2)/2);
xe:=round((x11+x4)/2);
ye:=round((y11+y4)/2);
xf:=round((x22+x5)/2);
yf:=round((y22+y5)/2);
xg:=round((x4+x55)/2);
yg:=round((y4+y55)/2);
Tri(kol,x1,y1,xd,yd);
Tri(kol,xd,yd,x2,y2);
Tri(kol,x11,y11,xe,ye);
Tri(kol,xe,ye,x4,y4);
Tri(kol,x22,y22,xf,yf);
Tri(kol,xf,yf,x5,y5);
Tri(kol,x4,y4,xg,yg);
Tri(kol,xg,yg,x55,y55);
end;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
var x0,y0:integer;
begin
image1.Canvas.Brush.Color:=clWhite;
image1.Canvas.rectangle(0,0,image1.Width,image1.Height);
x1:=0;
y1:=300;
x2:=300;
y2:=300;
x3:=150;
y3:=150;
x11:=0;
y11:=300;
x4:=0;
y4:=0;
x5:=300;
y5:=0;
x22:=300;
y22:=300;
x55:=300;
y55:=0;
image1.Canvas.CleanupInstance;
if spinedit1.value >0 then
begin
FinalKol:=Spinedit1.Value;
Tri(0,x1,y1,x2,y2);
end;
x0:= (300 div 2) - 50;
y0:= (300 div 2) - 50;
Image1.Canvas.Ellipse(x0,y0,x0+100,y0+100);
end;
end.
Последний раз редактировалось Stilet; 07.11.2010 в 10:06.
|