задача по курсовой По координатам трех точек построить треугольник (если это возможно, в про-тивном случае заново ввести координаты трех точек). Построить на чертеже треугольника все его медианы, биссектрисы, высоты, вписанную и описанную окружности. Рассчитать и вывести рядом с треугольником основные параметры (длины сторон, медиан, биссектрис, высот, радиусов вписанной и описанной окружностей). Построение и расчет характеристик делать одновременно: по-строить треугольник и вывести длины его сторон, начертить все медианы и вы-вести их длины и т.д.
Вобщем с углами, сторонами, медианами и биссектрисами я вроде разобрался, насчёт высот - прошу проверить, мне кажется что не всё учтено. Просьба подсказать как находить центр описанной окружности, радиус и ценрт вписанной окружности.
Не судите строго, просто я сам сейчас в 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.