по заданным координатам вершин двух треугольников (xA,yA,xB,yB...) нужно определить являются ли они подобными.
если кто-нибудь делал такое поделитесь мыслями... меня в задаче смущает что стороны в треугольниках получаются не целочисленными... тогда как опеределять их отношение =\
volvo
23.11.2007 4:57
Цитата
Два треугольника подобны, если выполняется одно из следующих условий, называемых признаками подобия: 1. Два угла одного треугольника равны двум углам другого треугольника. 2. Две стороны одного треугольника пропорциональны двум сторонам другого треугольника, а углы, образованные этими сторонами, равны. 3. Три стороны одного треугольника соответственно пропорциональны трем сторонам другого треугольника.
Так что, нет совершенно никакой необходимости завязываться на сторонах - можно найти углы и сравнить... Примеры нахождения сторон/углов по заданным координатам были на форуме.
Кстати, а в чем проблема с нецелочисленными сторонами? Что, к вещественным числам нельзя применять операцию деления?
Lapp
23.11.2007 11:04
Цитата(Скрытная @ 23.11.2007 0:42)
стороны в треугольниках получаются не целочисленными... тогда как опеределять их отношение =\
??? Определить отношение - нетрудно: операцию деления вещественных чисел, как отметил volvo, никто не отменял.. Вот сравнить потом эти отношения между собой - это уже задача. Из-за конечности представления чисел, а также ошибок в задании координат, числа могут отличаться в последних знаках, хотя по идее должны быть равны. Поэтому сравнивать нужно с учетом погрешности. Иначе говоря, нужно писать не так:
if a=b then ...
а так:
if Abs(a-b)<e then ...
- где e - это малое число, зависящее от порядков величин, использующихся в задаче (обычно на 8-10 порядков меньше этих величин, если ты используешь тип real). То есть если у тебя координаты порядка единиц или десятков, то можно взять e равным 10e-8.
volvo
23.11.2007 13:20
Ну, кстати, сравнивать отношение целых чисел пришлось бы точно так же - деление всегда возвращает вещественный результат, и нельзя пользоваться простым "="...
Lapp
23.11.2007 15:38
Цитата(volvo @ 23.11.2007 9:20)
деление всегда возвращает вещественный результат,
- это смотря какое... div - таки нет!
volvo
23.11.2007 15:44
Но согласись, что проверять треугольник со сторонами <11, 12, 17> на подобие треугольнику со сторонами <3, 4, 5> используя DIV - просто верх легкомыслия
Lapp
23.11.2007 15:57
Соглашусь, конечно. Но не большее, чем 99% поступков остальных новичков тут..
xds
23.11.2007 17:44
Если координаты - целые числа, то
if (a1 * b2 = a2 * b1) and (b1 * c2 = b2 * c1) and (c1 * a2 = c2 * a1) then { подобны } else { не подобны (бесподобны )}
где a1, b1, c1, a2, b2, c2 - квадраты длин сторон треугольников, т. е.
Заменить пропорцию на произведение вполне разумно. И, если не извлекать корни, то сравнение можно проводить точным равенством. Согласен, так красивше. Конечно, если координаты - целые . Но, судя по замечаниям автора темы, это скорее всего так и есть.
xds
23.11.2007 19:07
Подобное встречалось мне в какой-то олимпиадной задаче - прочие реализации не проходили некоторые тесты.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.