Вывести все клетки, которые покрывает заданная окружность - Pascal

Формулировка задачи:

На клеточном поле дана окружность, с центром в середине клетки с координатами (xc; yc) и радиусом r. Нужно вывести координаты всех клеток, которые покрывает заданная окружность. Пример Ввод: 2 2 2 Вывод: 0 1 0 2 0 3 1 0 1 1 1 3 1 4 2 0 2 4 3 0 3 1 3 3 3 4 4 1 4 2 4 3

Код к задаче: «Вывести все клетки, которые покрывает заданная окружность - Pascal»

textual
var x1,y1,x2,y2,x3,y3,x4,y4,a,b,c,x,y:integer;
begin
repeat
writeln('Введите координаты клеток с началом и концом отрезка');
readln(x1,y1,x2,y2);
until(x1<>x2)or(y1<>y2);//чтобы точки не совпали
//найдем левый и правый концы по Х
if x1<x2 then
 begin
  x3:=x1;
  x4:=x2;
 end
else
 begin
  x3:=x2;
  x4:=x1;
 end;
//найдем нижний и верхний концы по Y
if y1<y2 then
 begin
  y3:=y1;
  y4:=y2;
 end
else
 begin
  y3:=y2;
  y4:=y1;
 end;
//составим уравнение прямой ay+bx+c=0, вернее определим ее коэффициенты a,b,c
a:=y2-y1;
b:=x1-x2;
c:=x1*(y1-y2)+y1*(x2-x1);
for x:=x3 to x4 do
for y:=y3 to y4 do
//если противоположные  вершины по разные стороны от отрезка
if((a*(x-0.5)+b*(y+0.5)+c)*(a*(x+0.5)+b*(y-0.5)+c)<=0)
or((a*(x-0.5)+b*(y-0.5)+c)*(a*(x+0.5)+b*(y+0.5)+c)<=0)
then writeln(x,' ',y);
end.

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

7   голосов, оценка 3.857 из 5


СОХРАНИТЬ ССЫЛКУ