Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Центр вписанной в треугольник окружности

01.01.2007
 {**** UBPFD *********** by kladovka.net.ru ****
>> Центр вписанной в треугольник окружности
 
P1
, P2, P3 - вершины треугольника.
 
Зависимости: Windows
Автор:       Fenik, fenik@nm.ru, Новоуральск
Copyright:   Николай Федоровских
Дата:        29 сентября 2004 г.
********************************************** }
 
function CenterCircleInTriang(const P1, P2, P3: TPoint): TPoint;
 
 
function LineLength(P1, P2: TPoint): Double;
 
begin
   
Result := Sqrt(Sqr(P1.X - P2.X) + Sqr(P1.Y - P2.Y));
 
end;
 
var a, b, c, Perim: Double;
begin
  a
:= LineLength(P1, P2);
  b
:= LineLength(P2, P3);
  c
:= LineLength(P3, P1);
 
Perim := 1 / (a + b + c);
 
Result := Point(Round((b * P1.x + c * P2.x + a * P3.x) * Perim),
                 
Round((b * P1.y + c * P2.y + a * P3.y) * Perim));
end;
 
 
 
Пример использования:
function Distance(const P, P1, P2: TPoint): Integer;
{ Расстояние от точки P до прямой P1-P2 }
begin
 
Result := Abs(Round(
   
((P1.Y - P2.Y) * P.X +
     
(P2.X - P1.X) * P.Y +
     
(P1.X * P2.Y - P2.X * P1.Y)) /
   
Sqrt(Sqr(P1.X - P2.X) + Sqr(P2.Y - P1.Y))));
end;
 
procedure TForm1
.Button1Click(Sender: TObject);
var P1, P2, P3, C: TPoint;
    L
: Integer;
begin
  P1
:= Point(60, 160);
  P2
:= Point(250, 110);
  P3
:= Point(365, 350);
  C
:= CenterCircleInTriang(P1, P2, P3);
  L
:= Distance(C, P1, P2);
 
with Canvas do begin
   
Brush.Color := clWhite;
   
Polygon([P1, P2, P3]);
   
Brush.Color := clRed;
   
Ellipse(C.X - L, C.Y - L, C.X + L, C.Y + L);
 
end;
end;