По координатам трех точек построить треугольник (если это возможно, в про-тивном случае заново ввести координаты трех точек). Построить на чертеже треугольника все его медианы, биссектрисы, высоты, вписанную и описанную окружности. Рассчитать и вывести рядом с треугольником основные параметры (длины сторон, медиан, биссектрис, высот, радиусов вписанной и описанной окружностей). Построение и расчет характеристик делать одновременно: по-строить треугольник и вывести длины его сторон, начертить все медианы и вы-вести их длины и т.д.
Вобщем с углами, сторонами, медианами и биссектрисами я вроде разобрался, насчёт высот - прошу проверить, мне кажется что не всё учтено. Просьба подсказать как находить центр описанной окружности, радиус и ценрт вписанной окружности.
Не судите строго, просто я сам сейчас в 9 классе.
Вот нароботки кода (если лучше его убрать в .txt файл, то скажите, я понимаю что он огромный):
здесь я использую рандомное задание координат, чтобы профиксить все баги.
program
GrafChast;
uses
Crt, Graph;
var
AB, BC, CA:real;
XA, YA, XB, YB, XC, YC: Integer;
XMA, YMA, XMB, YMB, XMC, YMC: Integer;
MA, MB, MC: Real;
Driver, Mode: integer;
CosA, CosB, CosC,CosA2, SinA2, TanA2: Real;
SinA, SinB, SinC: Real;
XKA, YKA, XKB, YKB, XKC, YKC: Integer;
KA, KB, KC: Real;
UA,UB,UC: Real;
SumU: Real;
Square, Perimetr, PolPerimetr: Real;
HA, HB, HC: Real;
XHA, YHA, XHB, YHB, XHC, YHC: Integer;
HA1, HA2, HB1, HB2, HC1, HC2: Real;
T: Real;
RadiusO: Real;
XRO, YRO: Integer;
label
L1;
begin
L1:clrscr;
{-------------------------------------------------------------}
{Vvod koordinat}
{ writeln('***Vvedite koordinati to4ek***');
writeln;
writeln('To4ka A');
gotoxy(1, 4);
write('X= ');
gotoxy(7, 4);
write('Y=');
gotoxy(3, 4);
readln(XA);
gotoxy(9, 4);
readln(YA);
writeln;
writeln('To4KA B');
gotoxy(1, 7);
write('X=');
gotoxy(7, 7);
write('Y=');
gotoxy(3, 7);
readln(XB);
gotoxy(9, 7);
readln(YB);
writeln;
writeln('To4KA C');
gotoxy(1, 10);
write('X=');
gotoxy(7, 10);
write('Y=');
gotoxy(3, 10);
readln(XC);
gotoxy(9, 10);
readln(YC);
if (XA > 640) or (XB > 640) or (XC > 640) or (YA > 480) or (YB > 480) or (YC > 480) then
begin
writeln('Nepravilno Zadani koordinati to4ek!!!');
readkey;
goto l1;
end; }
randomize;
XA:=random(640);
YA:=random(480);
XB:=random(640);
YB:=random(480);
XC:=random(640);
YC:=random(480);
{ XA:=320;
YA:=60;
XB:=90;
YB:=380;
XC:=549;
YC:=130;
{-------------------------------------------------------------}
{Storoni}
AB := sqrt((XB - XA) * (XB - XA) + (YB - YA) * (YB - YA));
BC := sqrt((XC - XB) * (XC - XB) + (YC - YB) * (YC - YB));
CA := sqrt((XA - XC) * (XA - XC) + (XA - YC) * (YA - YC));
if (AB + BC <= CA) or (BC + CA <= AB) or (CA + AB <= BC) then
begin
writeln('Postroenia treugolniKA nevozmogno!!!');
readkey;
goto l1;
end;
Perimetr := AB + BC + CA;
PolPerimetr := Perimetr / 2;
Square := sqrt(PolPerimetr * (PolPerimetr - AB)*(PolPerimetr - BC)*(PolPerimetr - CA));
{-------------------------------------------------------------}
{Mediani}
XMA := trunc((XB + XC) / 2);
YMA := trunc((YB + YC) / 2);
MA := sqrt((XA - XMA) * (XA - XMA) + (YA - YMA) * (YA - YMA));
XMB := trunc((XC + XA) / 2);
YMB := trunc((YC + YA) / 2);
MB := sqrt((XB - XMB) * (XB - XMB) + (YB - YMB) * (YB - YMB));
XMC := trunc((XA + XB) / 2);
YMC := trunc((YA + YB) / 2);
MC :=sqrt((XC - XMC) * (XC - XMC) + (YC - YMC) * (YC - YMC));
{Cos and Sin}
CosA := (BC * BC - AB * AB - CA * CA) / ((-2) * AB * CA);
SinA := sqrt(1 - CosA * CosA);
CosB := (CA * CA - AB * AB - BC * BC) / ((-2) * AB * BC);
SinB := sqrt(1 -CosB * CosB);
CosC := (AB * AB - BC * BC - CA * CA) / ((-2) * BC * CA);
SinC := sqrt(1 - CosC * CosC);
{-------------------------------------------------------------}
{Bissektrisi}
XKA := trunc((CA * XB + AB * XC) / (CA + AB));
YKA := trunc((CA * YB + AB * YC) / (CA + AB));
KA := sqrt((XA - XKA) * (XA - XKA) + (YA - YKA) * (YA - YKA));
XKB := trunc((AB * XC + BC * XA) / (AB + BC));
YKB := trunc((AB * YC + BC * YA) / (AB + BC));
KB := sqrt((XB - XKB) * (XB - XKB) + (YB - YKB) * (YB - YKB));
XKC := trunc((BC * XA + CA * XB) / (BC + CA));
YKC := trunc((BC * YA + CA * YB) / (BC + CA));
KC := sqrt((XC - XKC)*(XC - XKC)+(YC - YKC)*(YC - YKC));
{-------------------------------------------------------------}
HA := 2 * Square / BC;
HB := 2 * Square / CA;
HC := 2 * Square / AB;
T := arctan((YC - YB) / BC / sqrt(1 - ((YC - YB) / BC) * ((YC - YB) / BC)));
if XB > XC then
T := Pi - T;
HA1 := sqrt(sqr(AB) - sqr(HA));
HA2 := sqrt(sqr(CA) - sqr(HA));
if (HA1 + HA2 > BC) and (HA1 < HA2) then
HA1 := -HA1;
XHA := round(HA1 * cos(T))+XB;
YHA := round(HA1 * sin(T))+YB;
T := arctan((YA - YC) / CA / sqrt(1 - ((YA - YC) / CA) * ((YA - YC) / CA)));
if XC > XA then
T := Pi - T;
HB1 := sqrt(sqr(BC) - sqr(HB));
HB2 := sqrt(sqr(AB) - sqr(HB));
if (HB1 + HB2 > CA) and (HB1 < HB2) then
HB1 := -HB1;
XHB := round(HB1 * cos(T))+XC;
YHB := round(HB1 * sin(T))+YC;
T := arctan((YB - YA) / AB / sqrt(1 - ((YB - YA) / AB) * ((YB - YA) / AB)));
if XA > XB then
T := Pi - T;
HC1 := sqrt(abs(sqr(CA) - sqr(HB)));
HC2 := sqrt(abs(sqr(BC) - sqr(HB)));
if (HC1 + HC2 > AB) and (HC1 < HC2) then
HC1 := -HC1;
XHC := round(HC1 * cos(T))+XA;
YHC := round(HC1 * sin(T))+YA;
{-------------------------------------------------------------}
{Ugli}
if CosA < 0 then
UA := 180 - arctan(SinA / sqrt(1 - SinA * SinA)) * 180 / pi
else UA := arctan(SinA / sqrt(1 - SinA * SinA)) * 180 / pi;
if CosB < 0 then
UB := 180 - arctan(SinB / sqrt(1 - SinB * SinB)) * 180 / pi
else UB := arctan(SinB / sqrt(1 - SinB * SinB)) * 180 / pi;
if CosC < 0 then
UC := 180 - arctan(SinC / sqrt(1 - SinC * SinC)) * 180 / pi
else UC := arctan(SinC / sqrt(1 - SinC * SinC)) * 180 / pi;
SumU := UA + UB + UC;
{-------------------------------------------------------------}
RadiusO :=Square / PolPerimetr;
CosA2 := sqrt((1 + CosA) / 2);
SinA2 := sqrt(1 - sqr(CosA2));
TanA2 := SinA2 / CosA2;
XRO := round(RadiusO / TanA2);
YRO := round(RadiusO);
{-------------------------------------------------------------}
{Vivod INFO}
writeln;
writeln('***AB=', AB:5:2, '*** ');
writeln('***BC=', BC:5:2, '*** ');
writeln('***CA=', CA:5:2, '*** ');
writeln;
writeln('***MA=', MA:5:2, '*** ');
writeln('***MB=', MB:5:2, '*** ');
writeln('***MC=', MC:5:2, '*** ');
writeln;
writeln('***KA=', KA:5:2, '*** ');
writeln('***KB=', KB:5:2, '*** ');
writeln('***KC=', KC:5:2, '*** ');
writeln;
writeln('***CosA=', CosA:5:2, '*** ');
writeln('***CosB=', CosB:5:2, '*** ');
writeln('***CosC=', CosC:5:2, '*** ');
writeln;
writeln('***^A=', UA:5:2, '*** ');
writeln('***^B=', UB:5:2, '*** ');
writeln('***^C=', UC:5:2, '*** ');
writeln('***^A + ^B + ^C = ', SumU:5:2, '***');
driver := 9;
mode := 2;
initgraph(driver, mode, 'EGAVGA.BGI');
setbkcolor(black);
{-------------------------------------------------------------}
circle(XRO, YRO, Round(RadiusO));
{Storoni}
setcolor(white);
putpixel(XA, YA, white);
outtextxy(XA + 4, YA + 4, 'A');
putpixel(XB, YB, white);
outtextxy(XB + 4, YB + 4, 'B');
putpixel(XC, YC, white);
outtextxy(XC + 4, YC + 4, 'C');
setcolor(green);
line(XA, YA, XB, YB);
line(XB, YB, XC, YC);
line(XC, YC, XA, YA);
{-------------------------------------------------------------}
{Visoti}
setcolor(white);
putpixel(XHA, YHA, white);
outtextxy(XhA + 4, YhA + 4, 'H1');
putpixel(XHB, YHB, white);
outtextxy(XHB + 4, YHB + 4, 'H2');
putpixel(XHC, YHC, white);
outtextxy(XHC + 4, YHC + 4, 'H3');
setcolor(yellow);
line(XA, YA, XHA, YHA);
line(XB, YB, XHB, YHB);
line(XC, YC, XHC, YHC);
{-------------------------------------------------------------}
{Mediani}
setcolor(white);
putpixel(XMA, YMA, white);
outtextxy(XMA + 4, YMA + 4, 'M1');
putpixel(XMB, YMB, white);
outtextxy(XMB + 4, YMB + 4, 'M2');
putpixel(XMC, YMC, white);
outtextxy(XMC + 4, YMC + 4, 'M3');
setcolor(red);
line(XA, YA, XMA, YMA);
line(XB, YB, XMB, YMB);
line(XC, YC, XMC, YMC);
{-------------------------------------------------------------}
{Bissektrisi}
setcolor(white);
putpixel(XKA, YKA, white);
outtextxy(XKA + 4, YKA + 4, 'K1');
putpixel(XKB, YKB, white);
outtextxy(XKB + 4, YKB + 4, 'K2');
putpixel(XKC, YKC, white);
outtextxy(XKC + 4, YKC + 4, 'K3');
setcolor(blue);
line(XA, YA, XKA, YKA);
line(XB, YB, XKB, YKB);
line(XC, YC, XKC, YKC);
{-------------------------------------------------------------}
readkey;
closegraph;
end.