Да ладно, я уже успел нагло передрать функции

Да ладно, я уже успел нагло передрать функции X0 и Y0 из поста xKVtorlol прикрутить их к своей программке. Все сошлось. Теперь осталось только комментарии добить и прочее мелкое украшательство, типа генерации координат точек случайным образом. Но с этим я как-нибудь и сам справлюсь! :twisted:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  c:integer;
  a:array [1..4] of array [1..2] of integer;
implementation

uses Unit2;

{$R *.dfm}

Function X0:extended;
Var
 chisl,znam:longint;
Begin
  chisl:=(a[3,2]-a[2,2])*(a[1,1]*a[1,1]+a[1,2]*a[1,2])+(a[1,2]-a[3,2])*(a[2,1]*a[2,1]+a[2,2]*a[2,2])+
(a[2,2]-a[1,2])*(a[3,1]*a[3,1]+a[3,2]*a[3,2]);
  znam :=2*((a[1,2]-a[2,2])*(a[1,1]-a[3,1])-(a[1,2]-a[3,2])*(a[1,1]-a[2,1]));
  X0:=chisl/znam;
End;

Function Y0(x0:extended):extended;
Var
 chisl,znam:extended;
Begin
  chisl:=a[1,1]*a[1,1]-a[2,1]*a[2,1]+a[1,2]*a[1,2]-a[2,2]*a[2,2]-2*(a[1,1]-a[2,1])*x0;
  znam :=2*(a[1,2]-a[2,2]);
  Y0:=chisl/znam;
End;

procedure PutCircle(X,Y,R:integer; Solid:Boolean);
const
 YMax: Integer = 400;
var
 MyMetafile: TMetafile; 
begin
 MyMetafile := TMetafile.Create;  
 with TMetafileCanvas.Create(MyMetafile, 0) do
  try
    if Solid then with Brush do
     begin
      Color := clRed;
      Style := bsSolid;
     end
   else
    Brush.Style := bsClear;
   Ellipse(X-R,Ymax-(Y-R),X+R,Ymax-(Y+R));
  finally
   Free;
  end;
  Form1.Canvas.Draw(0,0,MyMetafile);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 a[1,1]:=257;
 a[1,2]:=201;
 a[2,1]:=166;
 a[2,2]:=279;
 a[3,1]:=119;
 a[3,2]:=85;
end;

procedure TForm1.Form1Click(Sender: TObject);
var
 i,r:byte;
begin
 a[4,1]:=round(X0);
 a[4,2]:=round(Y0(a[4,1]));

 for i:=1 to 3 do
  begin
   PutCircle(a[i,1],a[i,2],5,True);
  end;
 r:=round(sqrt(sqr((a[1,1]-a[4,1]))+sqr((a[1,2]-a[4,2]))));
 PutCircle(a[4,1],a[4,2],r,False);
end;

end.

Задачка из геометрии: кто подскажет?