Предмет: Информатика,
автор: lizasnv
Помогите записать алгоритм Помогите записать алгоритм Запишите на алгоритмическом языке алгоритм построения окружности заданного радиуса r, проходящей через заданные точки А и В
Ответы
Автор ответа:
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.
Поскольку задача школьная, то вариант совпадения точек не рассматривается
Алгоритмического языка не знаю, но поскольку это вариант псевдокода, то думаю алгоритм вполне понятен
алг Круг_по_двум_точкам_и_радиусу(арг действ 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.
Приложения:
Похожие вопросы
Предмет: Математика,
автор: anonim5608
Предмет: Математика,
автор: danildandy611
Предмет: Английский язык,
автор: animeshniknorichan
Предмет: Математика,
автор: 2920415
Предмет: История,
автор: neklesaelen