Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 07.04.2016, 22:19   #1
yana1996
Пользователь
 
Регистрация: 02.12.2015
Сообщений: 38
По умолчанию Описанная окружность

Помогите пожалуйста доделать..программа рисует треугольник . Нужно еще чтобы рисовалась описанная окружность треугольника .
Буду очень благодарна
Код:
procedure TForm1.Button2Click(Sender: TObject);
  var a,b,c,xc,yc,x1,y1,x2,y2,x3,y3:integer;
      p,x,h,m,l:real;
  begin
  if not TryStrToInt(Edit1.Text,a)
  or not TryStrToInt(Edit2.Text,b)
  or not TryStrToInt(Edit3.Text,c) then
   begin
    Showmessage('Данные не введены или введены некорректно');
    Edit1.Clear;
    Edit2.Clear;
    Edit3.Clear;
    exit;
   end;
  a:=StrToInt(Edit7.Text);
  b:=StrToInt(Edit8.Text);
  c:=StrToInt(Edit9.Text);
  if (a>=b+c)or(b>=a+c)or(c>=a+b) then
   begin
    showmessage('Это не треугольник, повторите ввод');
    Edit1.Clear;
    Edit2.Clear;
    Edit3.Clear;
    exit;
   end;
  xc:=panel1.Width div 2;
  yc:=panel1.Height div 2;
  p:=(a+b+c)/2;//периметр
  h:=2*sqrt(p*(p-a)*(p-b)*(p-c))/a;//длина высоты на сторону А
  if a*a+c*c<b*b then //если справа тупой угол
   begin
    x:=sqrt(c*c-h*h);//дополнение стороны а вправо
    l:=a+x;//длина горизонтальной проекции треугольника
   end
  else if a*a+b*b<c*c then//если слева тупой угол
   begin
    x:=sqrt(b*b-h*h);//влево
    l:=a+x;
   end
  else //если у основания нет тупых углов
   begin
    x:=sqrt(b*b-h*h);//часть нижней стороны а слева от основания высоты
    l:=a;
   end;
  //определим масштаб
  m:=(yc-30)/(h/2);//масштаб по вертикали
  if (2*xc-60)/l<m then m:=(2*xc-60)/l;//если по горизонтаи меньше, то этот масштаб
  //определим горизонтальные координаты
  if a*a+c*c<b*b then //если наклонен вправо
   begin
    x3:=xc+round(l*m/2);
    x2:=x3-round(x*m);
    x1:=x2-round(a*m);
   end
  else if a*a+b*b<c*c then //если влево
   begin
    x3:=xc-round(l*m/2);
    x1:=x3+round(x*m);
    x2:=x1+round(a*m);
   end
  else //если нет в основании тупых углов
   begin
    x1:=xc-round(l*m/2);{левая вершина}
    x2:=xc+round(l*m/2);{правая вешина}
    x3:=x1+round(x*m);{верхняя вершина}
   end;
  //вертикальные координаты
  y1:=yc+round(h*m/2);
  y2:=y1;
  y3:=yc-round(h*m/2);
  panel1.Canvas.pen.color:=Clwhite;
  panel1.Canvas.Rectangle(0,0,ClientWidth,ClientHeight);
  with panel1.Canvas do //нарисуем треугольник
   begin
    pen.Width:=3;
    pen.Color:=clRed;
    moveto(x1,y1);lineto(x2,y2);
    moveto(x2,y2);lineto(x3,y3);
    moveto(x1,y1);lineto(x3,y3);
    font.Color:=clBlue;
    textout((x1+x2) div 2,y1+10,'A');
    textout((x1+x3)div 2-20,yc-10,'B');
    textout((x2+x3)div 2+20,yc-10,'C');
 
   end;
Кросспост
http://programmersforum.ru/showthread.php?t=291123

Последний раз редактировалось Аватар; 07.04.2016 в 22:59.
yana1996 вне форума
Старый 07.04.2016, 22:45   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Во-первых, формулы для нахождения центра и радиуса этой окружности можно почерпнуть из этой статьи - https://ru.wikipedia.org/wiki/Описанная_окружность. Во-вторых, в этом коде достаточно много работы проводится для красивого расположения самого треугольника, но если будет рисоваться описанная окружность, то эта работа будет бесполезной. В-третьих, не нужно создавать одинаковые темы
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Окружность Wongraven Паскаль, Turbo Pascal, PascalABC.NET 0 21.06.2013 14:38
Окружность Murashov Общие вопросы C/C++ 14 01.11.2012 20:44
Окружность Ins1De Общие вопросы C/C++ 2 29.11.2011 12:15
окружность MetR Помощь студентам 1 08.01.2011 13:05
Окружность.. surovii Помощь студентам 28 29.03.2009 18:00