Создаем искусственный интеллект. Урок 10. Закончим рисование графа пространства состояний. |
|
|
Автор megabax
|
22.11.2010 г. |
unit AIObj
Создаем искусственный интеллект. Урок 10.
Закончим рисование графа пространства состояний.
Исходники у уроку можно скачать
здесь.
Прежде чем дорабатывать рисование дуг, как было обещано на
прошлом уроке, давайте произведен
небольшой рефакторинг кода. Поскольку Искусственный интеллект по английский
Artificial intelligence, заменив во всех созданных нами классах префикс
II на AI. Теперь доработаем
метод DrawArc:
procedure TAIProblemSpace.DrawArc(AImage:TImage;index1,index2:integer);
var xr,yr,dx,dy,x,y:integer; ar:double; ari:integer;
y2:integer;
side:integer;
dir:integer;
begin
if index2>index1 then dir:=1
else dir:=-1;
if index2 mod 2 = 0 then
begin
side:=-1;
x:=FLeft+FTopWidth;
end else begin
side:=1;
x:=FLeft;
end;
y:=FTop+index1*FDistance;
y2:=FTop+index2*FDistance;
dx:=FTopWidth;
dy:=FTopHeight;
xr:=x+dx*5;
yr:=FTop+index2*FDistance;
DDraw(AImage.Canvas, x, y+dy div 2, x,
y2+dy div 2,(10+abs(index2-index1)*5)*side*dir);
AImage.Canvas.MoveTo(x, y2+dy div 2);
if dir=1 then
begin
AImage.Canvas.LineTo(x-5*side, y2+dy
div 2);
AImage.Canvas.MoveTo(x, y2+dy div
2);
AImage.Canvas.LineTo(x, y2+dy div
2-7);
end else begin
AImage.Canvas.LineTo(x-5*side, y2+dy
div 2);
AImage.Canvas.MoveTo(x, y2+dy div
2);
AImage.Canvas.LineTo(x, y2+dy div
2+7);
end;
end; |
Далее, тестовый пример (при создании формы);
procedure TfrmAI.FormCreate(Sender:
TObject);
var PS:TAIProblemSpace;
p,p1,p2,p3:TAIStateItem;
begin
p:=TAIStateItem.Create;
p1:=TAIStateItem.Create;
p2:=TAIStateItem.Create;
p3:=TAIStateItem.Create;
p.AddExit(p1);
p.AddExit(p2);
p2.AddExit(p3);
p1.AddExit(p);
PS:=TAIProblemSpace.Create;
PS.Add(p);
PS.Add(p1);
PS.Add(p2);
PS.Add(p3);
PS.Draw(ImageTest);
end; |
Теперь запустим программу и увидим такую картинку:
Исходники у уроку можно скачать
здесь.
|
Последнее обновление ( 22.11.2010 г. )
|