по заданным координатам вершин двух треугольников (xA,yA,xB,yB...) нужно определить являются ли они подобными.
если кто-нибудь делал такое поделитесь мыслями... меня в задаче смущает что стороны в треугольниках получаются не целочисленными... тогда как опеределять их отношение =\
if a=b then ...а так:
if Abs(a-b)<e then ...- где e - это малое число, зависящее от порядков величин, использующихся в задаче (обычно на 8-10 порядков меньше этих величин, если ты используешь тип real). То есть если у тебя координаты порядка единиц или десятков, то можно взять e равным 10e-8.
Ну, кстати, сравнивать отношение целых чисел пришлось бы точно так же - деление всегда возвращает вещественный результат, и нельзя пользоваться простым "="...
Но согласись, что проверять треугольник со сторонами <11, 12, 17> на подобие треугольнику со сторонами <3, 4, 5> используя DIV - просто верх легкомыслия
Соглашусь, конечно.
Но не большее, чем 99% поступков остальных новичков тут..
Если координаты - целые числа, то
if (a1 * b2 = a2 * b1) and (b1 * c2 = b2 * c1) and (c1 * a2 = c2 * a1) thenгде a1, b1, c1, a2, b2, c2 - квадраты длин сторон треугольников, т. е.
{ подобны }
else
{ не подобны (бесподобны )}
a1 := Sqr(x12 - x11) + Sqr(y12 - y11);
a2 := Sqr(x22 - x21) + Sqr(y22 - y21);
b1 := Sqr(x13 - x12) + Sqr(y13 - y12);
b2 := Sqr(x23 - x22) + Sqr(y23 - y22);
c1 := Sqr(x11 - x13) + Sqr(y11 - y13);
c2 := Sqr(x21 - x23) + Sqr(y21 - y23);
Заменить пропорцию на произведение вполне разумно.
И, если не извлекать корни, то сравнение можно проводить точным равенством.
Согласен, так красивше. Конечно, если координаты - целые . Но, судя по замечаниям автора темы, это скорее всего так и есть.
Подобное встречалось мне в какой-то олимпиадной задаче - прочие реализации не проходили некоторые тесты.