Вопрос задан 05.05.2019 в 18:35. Предмет Информатика. Спрашивает Тихий Влад.

Из текста даны 3 точки, нужно найти окружность, которая охватывает все точкик примеру три точки с

координатами:a(100 100)b(300 300)c(100 300)а вывести координаты центра и на котором лежат все точки.какой код будет на Pascal?
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Кусь Арина.
Точки A, B, C, заданные на плоскости координатами, соединяем между собой и получаем треугольник. Задача сводится к нахождению радиуса и координат центра окружности, описанной вокруг треугольника.
Направим вдоль сторон треугольника ABC векторы:
a от В к С, b от А к С, с от А к В.
Радиус описанной окружности можно найти по формуле:
R= \frac{\bar{a}}{2*sin\alpha}; \quad cos\alpha=(|\bar{a}|*|\bar{b}|)/(\bar{a}*\bar{b})
В числителе последней дроби стоит скалярное произведение векторов, в знаменателе - произведение их модулей.
Координаты центра вычисляются по формулам:
O_x= \frac{1}{4S} *\left| \begin {matrix} {x_a^2+y_a^2 \quad y_a \quad 1 \\ x_b^2+y_b^2 \quad y_b \quad 1 \\ x_c^2+y_c^2 \quad y_c \quad 1} \end {matrix} \right|; \quad O_y= -\frac{1}{4S} *\left| \begin {matrix} {x_a^2+y_a^2 \quad x_a \quad 1 \\ x_b^2+y_b^2 \quad x_b \quad 1 \\ x_c^2+y_c^2 \quad x_c \quad 1} \end {matrix} \right|;
В приведенных формулах используются координаты точек, а не векторов.
Площадь треугольника S может быть вычислена по формуле Герона:
S= \sqrt{p(p-a)(p-b)(p-c)}; \quad p= \frac{a+b+c}{2}

type
  Vector = record
    x: real;
    y: real;
    l: real
  end;
  Point = record
    x: real;
    y: real
  end;

procedure InitPoint(s: string; var P: Point);
  //Вводит координаты x,y точки P
begin
  write('Введите координаты x,y точки ' + s, ' ');
  readln(P.x, P.y)
end;

procedure GetVector(A: Point; B: Point; var AB: Vector);
  // Определяет координаты вектора и его длину по пвре точек
begin
  with AB do
  begin
    x := B.x - A.x;
    y := B.y - A.y;
    l := sqrt(sqr(x) + sqr(y))
  end
end;

function InnerProd(a: Vector; b: Vector): real;
begin
  Result := a.x * b.x + a.y * b.y
end;

function Alpha(a: Vector; b: Vector): real;
  // Возвращает угол между векторами a,b
begin
  result := arccos(abs(InnerProd(a, b)) / (a.l * b.l));
end;

function TriangleSq(a: real; b: real; c: real): real;
  // Возвращает площадь треугольника, найденную по трем сторонам
  // (формула Герона)
var
  p: real;
begin
  p := (a + b + c) / 2;
  Result := sqrt(p * (p - a) * (p - b) * (p - c))
end;

procedure GetCenter(A: Point; B: Point; C: Point; S: Real; var D: Point);
// Помещает в запись D координаты центра окружности площадью S,
// описанной вокруг треугольника с вершинами А,В и С
var
  la2, lb2, lc2, detx, dety: real;

begin
  la2 := Sqr(A.x) + Sqr(A.y);
  lb2 := Sqr(B.x) + Sqr(B.y);
  lc2 := Sqr(C.x) + Sqr(C.y);
  detx := lb2 * C.y - lc2 * B.y - la2 * C.y + lc2 * A.y + la2 * B.y - lb2 * A.y;
  dety := lb2 * C.x - lc2 * B.x - la2 * C.x + lc2 * A.x + la2 * B.x - lb2 * A.x;
  D.x := detx / (4 * S);
  D.y := -dety / (4 * S)
end;

var
  Ap, Bp, Cp: Point;
  a, b, c: Vector;
  R, S: real;
  Op: Point;

begin
  //Ввод координат точек
  InitPoint('A', Ap);
  InitPoint('B', Bp);
  InitPoint('C', Cp);
  //Вычисление векторов a=BC, b=AB, c=AC
  GetVector(Bp, Cp, a);
  GetVector(Ap, Bp, b);
  GetVector(Ap, Cp, c);
  R := A.l / (2 * sin(Alpha(b, c))); //радиус описанной окружности
  S := TriangleSq(A.l, B.l, C.l);
  GetCenter(Ap, Bp, Cp, S, Op);
  writeln('Радиус описанной окружности R=', R:0:2);
  writeln('Координаты центра этой окружности: О(', Op.x:0:1, ';', Op.y:0:1, ')')
end.

Тестовое решение (проверено геометрическим построением):

Введите координаты x,y точки A 100 100
Введите координаты x,y точки B 300 300
Введите координаты x,y точки C 100 300
Радиус описанной окружности R=141.42
Координаты центра этой окружности: О(200.0;200.0)


0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Для решения данной задачи на Pascal можно использовать следующий код:

```pascal program FindCircleCenter;

type TPoint = record x, y: Integer; end;

function CircleCenter(a, b, c: TPoint): TPoint; var center: TPoint; D, Dx, Dy, Ex, Ey, Fx, Fy: Integer; begin Dx := b.x - a.x; Dy := b.y - a.y; Ex := c.x - a.x; Ey := c.y - a.y; Fx := Dx * (a.x + b.x) + Dy * (a.y + b.y); Fy := Ex * (a.x + c.x) + Ey * (a.y + c.y); D := 2 * (Dx * (c.y - b.y) - Dy * (c.x - b.x)); center.x := (Ey * Fx - Dy * Fy) div D; center.y := (Dx * Fy - Ex * Fx) div D; Result := center; end;

var a, b, c, center: TPoint; begin a.x := 100; a.y := 100; b.x := 300; b.y := 300; c.x := 100; c.y := 300; center := CircleCenter(a, b, c); writeln('Координаты центра окружности: (', center.x, ', ', center.y, ')'); writeln('Точки, лежащие на окружности: a(', a.x, ', ', a.y, '), b(', b.x, ', ', b.y, '), c(', c.x, ', ', c.y, ')'); end. ```

В данном коде используется функция `CircleCenter`, которая принимает три точки `a`, `b` и `c` и возвращает координаты центра окружности. Для вычисления координат центра используется формула, основанная на найденных значениях `Dx`, `Dy`, `Ex`, `Ey`, `Fx` и `Fy`.

Затем в основной программе создаются переменные `a`, `b`, `c` и `center`, в которых задаются координаты точек и сохраняются координаты центра окружности, найденные с помощью функции `CircleCenter`.

Выводятся координаты центра окружности и координаты всех трех точек, лежащих на окружности.

0 0

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос