Помощь - Поиск - Пользователи - Календарь
Полная версия: Определить, является ли вписанной или описанной
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
SataNi
Такая вот задачка:
"Даны координаты вершин треугольника и окружность, заданная уравнением x^2+y^2=r^2. Определить, является ли окружность вписанной или описанной по отношению к треугольнику."
Помогите ришить пожалуйста. rolleyes.gif Или хотяб подкскажите где копать?
Lapp
Цитата(SataNi @ 25.09.2006 23:32) *

Такая вот задачка:
окружность, заданная уравнением x^2+y^2=r^2.

Окружность на самом деле с центром в начале координат, или ты имеешь в виду что известен только радиус, а не центр?
volvo
Где копать? Пожалуйста... Копай сюда: если окружность описанная, то все вершины лежат на окружности (у тебя есть координаты вершин и уравнение окружности, проверяй smile.gif )... Если же окружность - вписанная, то расстояние от центра окружности до любой из его сторон (расстояние от точки до прямой, уравнение прямой можешь получить из координат вершин) будет одинаковым...

Необходимые формулы можешь посмотреть на АлгоЛисте
SataNi
lapp, про то что у неё центр в начале координат ничего не сказано nea.gif Скорее всего только радиус известен...
volvo, сорри, я новенький на форуме... rolleyes.gif Что за АлгоЛист?
Lapp
Цитата(SataNi @ 26.09.2006 0:17) *

про то что у неё центр в начале координат ничего не сказано
...
я новенький на форуме... rolleyes.gif Что за АлгоЛист?

То, что ее уравнение задано в такой форме, это и есть сказано. Именно это и удивляет, так как такое условие в принципе кажется лишним и, скорее всего, противоречивым. Уравнение окружности действительно присутствовало в условии или это ты дописал?

форум тут ни при чем. Берешь Яндекс и ищешь: АлгоЛист..
SataNi
Текст задания точный. Книга передо мной лежит...
Цитата
форум тут ни при чем. Берешь Яндекс и ищешь: АлгоЛист..

Пасиб! good.gif
Lapp
Цитата(SataNi @ 26.09.2006 0:28) *

Текст задания точный. Книга передо мной лежит...

Тоды ой..
Не знаю, как это будет вязаться с реальными координатами точек, но проверка тогда явно облегчается: нужно всего лишь проверить для вершин треугольника равенство x^2+y^2=r^2

Только меня все же гложут сомнения... Дествительно условие точное и полное?
SataNi
Точно полное и точно точное smile.gif Если хочеш сфотать могу lol.gif
Ладно завтра подумаю ещё... Сегодня уже не думается smile.gif
Lapp
Цитата(SataNi @ 26.09.2006 0:41) *

Если хочеш сфотать могу

Я тебе верю.. smile.gif
Но тогда решение с одной стороны упрощается, с другой - в большинстве случаев просто невозможно. То есть надо, чтоб випсанная или описанная окружность треугольника была центрирована на начало координат.
Гость
Млин... Не получается чтото... Напишите, пожалуйста, хотя бы примерный код sad.gif
Lapp
Цитата(Гость @ 27.09.2006 8:18) *

Млин... Не получается чтото... Напишите, пожалуйста, хотя бы примерный код sad.gif

Ты покажи, что именно получается и что не получается.
Мы подправим..
SataNi
Получилось чтото вроде этого:

Program laba2;
var x1,x2,x3,y1,y2,y3,r,p1,p2,p3,o1,o2,ras1,ras2,ras3:real;
begin
writeln('Введите координаты вершин треугольника');
write('A'); readln(x1, y1);
write('B'); readln(x2, y2);
write('C'); readln(x3, y3);
writeln('Введите координаты цетра окружности');
write('O'); readln(o1,o2);
r:=SQRT(SQR(o1)+SQR(o2));

p1:=SQRT(SQR(o1-x1)+SQR(o2-y1));
p2:=SQRT(SQR(o1-x2)+SQR(o2-y2));
p3:=SQRT(SQR(o1-x3)+SQR(o2-y3));

if (p1=r) and (p2=r) and (p3=r) then
writeln('Окружность описана около треугольника')
else
begin

ras1:=abs((o1-x1)*(y2-y1)-(o2-y1)*(x2-x1))/sqrt(sqr(x2-x1)+sqr(y2-y1));
writeln(ras1);
ras2:=abs((o1-x2)*(y3-y2)-(o2-y2)*(x3-x2))/sqrt(sqr(x3-x2)+sqr(y3-y2));
writeln(ras2);
ras3:=abs((o1-x1)*(y3-y1)-(o2-y1)*(x3-x1))/sqrt(sqr(x3-x1)+sqr(y3-y1));
writeln(ras3);
if (ras1=r) and (ras2=r) and (ras3=r) then
writeln('Окружность вписана в треугольник')
else writeln('Ничего не описано и не вписано!:)')

end;
readln;
end.


Не знаю правильно или нет... Но вродебы правильно smile.gif
Lapp
1. Почему ты рассчитываешь радиус окружности так:
r:=SQRT(SQR(o1)+SQR(o2));
?
Получается, что твоя окружность обязательно проходит через начало координат. Мне кажется, разумнее запрашивать радиус, как ты запрашиваешь все остальное. Хотя, я вообще не понимаю, как это вяжется с условием, в котором центр окружности железно помещен в начало координат..

2. Проверку на равенство двух переменных типа real (и подобных) нельзя проводить простым равенством. Дело в том, что из-за неизбежных ошибок вычисления два равных числа могут реально оказаться неравными в машинном представлении. Нужно сравнивать разность чисел с подходящим маленьким числом, например:
Abs(a-b)<1e-7
Это число выбирается из соображений длины представления используемого типа и порядка чисел.
SataNi
Цитата(lapp @ 28.09.2006 5:18) *

1. Почему ты рассчитываешь радиус окружности так:
r:=SQRT(SQR(o1)+SQR(o2));
?
Получается, что твоя окружность обязательно проходит через начало координат.

Почему? Не проходит она обязательно через начало координат... Так я рассчитываю, потому что окружность задана таким уравнением... unsure.gif
Просто по введённым координатам программа рассчитывает радиус, формула которого записана в условии... Разве неправильно?

Цитата(lapp @ 28.09.2006 5:18) *

2. Проверку на равенство двух переменных типа real (и подобных) нельзя проводить простым равенством.

Это лаборатрная по теме разветвляющиеся алгоритмы, 3я по счёту.. Думаю преподам пофиг будет на это... Лишь бы алгоритм верный был... rolleyes.gif
Lapp
Цитата(SataNi @ 28.09.2006 7:29) *

Почему? Не проходит она обязательно через начало координат... Так я рассчитываю, потому что окружность задана таким уравнением... unsure.gif
Просто по введённым координатам программа рассчитывает радиус, формула которого записана в условии... Разве неправильно?

Смотри рисунок. Это то, что ты делаешь.
Нажмите для просмотра прикрепленного файла
В условии было x^2+y^2=r^2, то есть окружность с центром в начале координат. Боюсь, ты путаешь координаты точки на окружности (х,у) и координаты ее центра (о1,о2)
Цитата(SataNi @ 28.09.2006 7:29) *

Это лаборатрная по теме разветвляющиеся алгоритмы, 3я по счёту.. Думаю преподам пофиг будет на это... Лишь бы алгоритм верный был... rolleyes.gif

Ну-ну.. хотя бы знай, что ответить, если спросят..
Volvo (guest)
Цитата
Думаю преподам пофиг будет на это... Лишь бы алгоритм верный был...
"Преподы", как ты их называешь, сначала запустят программу, и если программа выдаст неверный результат (а при таком сравнении - вероятность велика), то они даже не посмотрят на твой алгоритм, потому что программа в первую очередь должна выдавать правильный ответ, а уж потом делать это красиво, быстро, и т.д.
SataNi
До меня не дойдёт почему у окружности центр - начало координат? В условии этого не сказано... unsure.gif
Lapp
Цитата(SataNi @ 28.09.2006 19:04) *

До меня не дойдёт почему у окружности центр - начало координат? В условии этого не сказано... unsure.gif

Общее уравнение окружности такое:
(x-Xc)^2 + (y-Yc)^2 = r^2
где Xc, Yc - координаты центра окружности.

У тебя в условии уравнение такое:
x^2+y^2=r^2

Что можно переписать так:
(x-0)^2 + (y-0)^2=r^2

Теперь сравни это с общим уравнением. Видишь? Xc и Yc равны нулю..
Ясно?
SataNi
Теперь ясно... То есть получается, что координаты центра окружности известны(начало координат) и надо сделать ввод с клавы радиуса... Только на кой хрен мне тогда нужны x и y? Зачем мне эта точка на окружности? wacko.gif
PS: Сорри что туплю rolleyes.gif
Lapp
Цитата(SataNi @ 29.09.2006 8:59) *

Только на кой хрен мне тогда нужны x и y? Зачем мне эта точка на окружности?

Ты про какие x и y? Которые входят в уравнение? Они представляют произвольную точку на кривой (в данном случае - окружности). Как же без них записать уравнение?..
Ты прав, тебе нужно вводить только радиус. И проверять лежат ли вершины треугольника на этой укружности (то есть удовлетворяют ли их координаты ур-ию окружности) - это для случая описанной окружности - либо делать проверку для вписанной (скажем, как ты делал).
Теперь понятнее? smile.gif
SataNi
Спасибо! Вроде понял smile.gif . Как проверят отпишусь rolleyes.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.