Вопрос задан 28.12.2018 в 16:31. Предмет Информатика. Спрашивает Аглямова Регина.

Помогите записать алгоритм Помогите записать алгоритм Запишите на алгоритмическом языке алгоритм

построения окружности заданного радиуса r, проходящей через заданные точки А и В
0 0
Перейти к ответам

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

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Божко Никита.
Для начала задачу нужно решить чисто математически, решения приведены на листочках. 
Поскольку задача школьная, то вариант совпадения точек не рассматривается
Алгоритмического языка не знаю, но поскольку это вариант псевдокода, то думаю алгоритм вполне понятен

алг Круг_по_двум_точкам_и_радиусу(арг действ Ax, арг действ Ay, арг действ Bx, арг действ By, арг действ r)
   дано | A,B,r
   надо | нарисовать окружность
нач
    ввод Ax, Ay, Bx, By, r

    действ dAB = ((Ax - Bx)^2 + (Ay - By)^2)^(0.5) // длина АВ
    действ h = (r^2-dAB^2/4)^(0.5) // высота и длина вектора ОМ

    // М середина АВ
    действ Mx = (Ax + Bx) / 2 
    действ My = (Ay + By) / 2

    //первый круг
    действ Ox = Mx + (Ay - By) * h/dAB
    действ Oy = My - (Ax - Bx) * h/dAB
    нарисовать_круг(Ox, Oy, r)


    //второй круг
    Ox = Mx - (Ay - By) * h/dAB
    Oy = My + (Ax - Bx) * h/dAB
    нарисовать_круг(Ox, Oy, r)
кон

//PascalABC.NET версия 3.3.1590 от 03.12.2017
//Если программа не запускается, то обновите версию

uses GraphABC;
const
    zoom = 100;

var
    Ax, Ay, Bx, By, r: real;

begin
    readln(Ax, Ay, Bx, By, r);
   
    var dAB := sqrt(sqr(Ax - Bx) + sqr(Ay - By)); // длина АВ
    var h := sqrt(r * r - dAB * dAB / 4); // высота и длина вектора ОМ
   
    // М середина АВ
    var Mx := (Ax + Bx) / 2;
    var My := (Ay + By) / 2;
   
    //первый круг
    var Ox := Mx + (By - Ay) * h / dAB;
    var Oy := My - (Bx - Ax) * h / dAB;
    DrawCircle(round(Ox * zoom), round(Oy * zoom), round(r * zoom));
   
    //второй круг
    Ox := Mx - (By - Ay) * h / dAB;
    Oy := My + (Bx - Ax) * h / dAB;
    DrawCircle(round(Ox * zoom), round(Oy * zoom), round(r * zoom));
end.

0 0

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

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

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