Помощь - Поиск - Пользователи - Календарь
Полная версия: Графика
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
-max-
Помогите решить:

Дано три целых числа, определяющих положение центра окружности на экране и ее радиус. Если окружность не пересекает горизонтальную прямую, проходящую через середину экрана, то высветить данную окружность и окружность, симметрическую данной относительно этой прямой.
volvo
В чем проблема? Не знаешь, как определить, пересекаются ли прямая и окружность? Ничего проще: если координата Y центра окружности строго меньше чем ((GetMaxY div 2) - R) или строго больше, чем ((GetMaxY div 2) + R), то окружность и прямая НЕ пересекаются.

Как чертить прямые и окружности - см. Help на Line/Circle
-max-
Помогите доделать задачу:

Дано три целых числа, определяющих положение центра окружности на экране и ее радиус. Если окружность не пересекает горизонтальную прямую, проходящую через середину экрана, то высветить данную окружность и окружность, симметрическую данной относительно этой прямой.


Код
uses crt, graph;
var
driver, mode,error: integer;
x,y,r:word;
begin
writeln('vvedit x,y,r');
readln(x,y,r);
begin
driver:=detect;
initgraph(driver, mode, 'c:\tp\bp\bgi');
error:=graphresult;
line(0,240,640,240);
circle(x,y,r);
if y<((getmaxy div 2)-r) then
circle(x,y,r);
if y>((getmaxy div 2)+r) then
circle(x,y,r);
closegraph;
readln;
end;
end.
volvo
Ты второй пост внимательно прочел? Я же написал: ИЛИ ... ИЛИ

if (y<((getmaxy div 2)-r)) OR (y>((getmaxy div 2)+r))
then { Начертить симметричную окружность }
Гость
А как начертить симметричную окружность???
Бравый генерал
Uses
Graph;

Var
gd,gm,x,y,r,d: Integer;

Begin
WriteLn('Vvedite x,y,r: ');
ReadLn(x,y,r);

gd:=Detect;
InitGraph(gd, gm, 'c:\tp\bp\bgi');

line(0, GetMaxY div 2, GetMaxX, GetMaxY div 2);
Circle(x,y,r);

d:=y - (GetMaxY div 2);
if abs(d) >= r
then Circle(x, (GetMaxY div 2) - d, r);

ReadLn;
CloseGraph
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.