Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Определить, является ли вписанной или описанной

Автор: SataNi 26.09.2006 2:32

Такая вот задачка:
"Даны координаты вершин треугольника и окружность, заданная уравнением x^2+y^2=r^2. Определить, является ли окружность вписанной или описанной по отношению к треугольнику."
Помогите ришить пожалуйста. rolleyes.gif Или хотяб подкскажите где копать?

Автор: lapp 26.09.2006 2:43

Цитата(SataNi @ 25.09.2006 23:32) *

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

Окружность на самом деле с центром в начале координат, или ты имеешь в виду что известен только радиус, а не центр?

Автор: volvo 26.09.2006 2:44

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

Необходимые формулы можешь посмотреть на АлгоЛисте

Автор: SataNi 26.09.2006 3:17

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

Автор: lapp 26.09.2006 3:22

Цитата(SataNi @ 26.09.2006 0:17) *

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

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

форум тут ни при чем. Берешь Яндекс и ищешь: АлгоЛист..

Автор: SataNi 26.09.2006 3:28

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

Цитата
форум тут ни при чем. Берешь Яндекс и ищешь: АлгоЛист..

Пасиб! good.gif

Автор: lapp 26.09.2006 3:37

Цитата(SataNi @ 26.09.2006 0:28) *

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

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

Только меня все же гложут сомнения... Дествительно условие точное и полное?

Автор: SataNi 26.09.2006 3:41

Точно полное и точно точное smile.gif Если хочеш сфотать могу lol.gif
Ладно завтра подумаю ещё... Сегодня уже не думается smile.gif

Автор: lapp 26.09.2006 3:52

Цитата(SataNi @ 26.09.2006 0:41) *

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

Я тебе верю.. smile.gif
Но тогда решение с одной стороны упрощается, с другой - в большинстве случаев просто невозможно. То есть надо, чтоб випсанная или описанная окружность треугольника была центрирована на начало координат.

Автор: Гость 27.09.2006 11:18

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

Автор: lapp 27.09.2006 15:42

Цитата(Гость @ 27.09.2006 8:18) *

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

Ты покажи, что именно получается и что не получается.
Мы подправим..

Автор: SataNi 28.09.2006 2:47

Получилось чтото вроде этого:

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 28.09.2006 9:18

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

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

Автор: SataNi 28.09.2006 10:29

Цитата(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 28.09.2006 11:03

Цитата(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) 28.09.2006 12:06

Цитата
Думаю преподам пофиг будет на это... Лишь бы алгоритм верный был...
"Преподы", как ты их называешь, сначала запустят программу, и если программа выдаст неверный результат (а при таком сравнении - вероятность велика), то они даже не посмотрят на твой алгоритм, потому что программа в первую очередь должна выдавать правильный ответ, а уж потом делать это красиво, быстро, и т.д.

Автор: SataNi 28.09.2006 22:04

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

Автор: lapp 29.09.2006 3:59

Цитата(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 29.09.2006 11:59

Теперь ясно... То есть получается, что координаты центра окружности известны(начало координат) и надо сделать ввод с клавы радиуса... Только на кой хрен мне тогда нужны x и y? Зачем мне эта точка на окружности? wacko.gif
PS: Сорри что туплю rolleyes.gif

Автор: lapp 29.09.2006 17:07

Цитата(SataNi @ 29.09.2006 8:59) *

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

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

Автор: SataNi 29.09.2006 20:14

Спасибо! Вроде понял smile.gif . Как проверят отпишусь rolleyes.gif