Є масив трикутників, заданих координатами вершин
- Python
- Математика
- геометрія
Є масив трикутників, заданих координатами вершин. Потрібно визначити номери трикутників, подібних першому.
Що я роблю.
1. Нам знадобиться формула відстані між точками:
2. Для визначення подібних трикутників я буду користуватися тим фактом, що ставлення периметрів таких трикутників дорівнює коеф. подібності, а відношення площ - квадрату того ж числа. Відповідно мені потрібно знайти їх для кожного з трикутників. Ось так:
3. Тепер функція, яка буде визначати подібні трикутники:
4. І цією функцією побігли за списком трикутників
У чому моя помилка?
2. Якщо трикутники задані координатами вершин - найпростіше перевіряти третя ознака подібності (всі три сторони одного трикутника пропорційні сторонам другого).
3. Якщо координати вершин - невеликі цілі числа, то краще перевіряти пропорційність не самих сторін, а їх квадратів, причому перевіряти не відносини сторін, а твори "хрест-навхрест".
Щоб порівнювати тільки потенційно відповідні сторони - сортувати довжини сторін (насправді квадрати довжин) в кожному трикутнику по зростанню.
Наприклад, ось так можна модифікувати вихідний код:
Дзеркальне відображення одного з подібних трикутників зберігає пропорції сторін і площ, але трикутники перестають бути подібними, якщо вони не рівнобедрений.
А взагалі, якщо трохи подумати, то легко побачити (с), що існує нескінченно багато різних трикутників з рівними периметром і площею. Доказ (Нечитка) приблизно таке:
Розглянемо всі трикутники заданого периметра. Уявімо кожен з них точкою P в полярній системі координат, одна з вершин трикутника лежить на початку координат, друга - дана точка, третя лежить на полярній осі. Уявімо площа такого трикутника висотою z в циліндричній системі координат заснованої на даній полярної. Безліч всіх трикутників даного периметра описується безліччю точок P, яке покриває деяку однозв'язного область, на кордонах якої площа дорівнює 0. Крім того, площа трикутника - безперервна функція від P. Виберемо довільну точку P0 всередині області. Нехай S (P0) = S0> 0. Розглянемо всі можливі шляхи від точки P0 до кордонів області. На кожному з цих шляхів S є безперервною функцією, що змінюється від S0 до 0. Виберемо значення S1, 0