Розробка алгоритму виконання завдання
Для розв’язання поставленої задачі будемо проглядати по черзі кожен трикутник і дивитись, чи він не перетинається з іншим трикутником. Якщо перетинається, то змінюємо колір обох трикутників. Щоб визначити, чи перетинаються трикутники треба перевірити, на перетин кожну сторону трикутника з кожною стороною іншого трикутника. Якщо хоча б одна сторона першого трикутника перетинається з хоча б одною стороною другого трикутника, то фігури перетинаються.
Отже, задача зводиться до визначення, чи перетинаються два відрізка. Визначити це можна наступним чином.
Складемо рівняння прямих обох відрізків у вигляді ax + by +c. Таким чином, ми отримаємо коефіцієнти двох прямих для рівнянь:
a1*x + b1*y + c1 для одного відрізка і a2*x + b2*y + c2 – для іншого.
Далі підставляємо координати кінців другого відрізка в рівняння для прямої першого і координати кінців першого в рівняння прямої другого відрізка і визначаємо значення виразу рівняння. Якщо для обох кінців кожного відрізка отримали величини різні за знаком, то відрізки перетинаються, в протилежному випадку – ні.
Визначити коефіцієнти a, b і c рівняння прямої можна наступним чином. Нехай, в нас є координати двох точок прямої (в нашому випадку це координати кінців відрізка, сторони фігури) (x1, y1) і (x2, y2).
Тоді коефіцієнти визначаються так:
a = y2 – y1,
b = x1 – x2,
c = x2*y1 – x1*y2.
Тобто, нехай в нас є два відрізка AB і CD. Координати кінців відрізків наступні: A(x1, y1), B(x2, y2), C(x3, y3) і D(x4, y4).
Для визначення, чи вони перетинаються, складаємо рівняння прямих:
a1 = y2 – y1, a2 = y4 – y3,
b1 = x1 – x2, b2 = x3 – x4,
c1 = x2y1 – x1y2, c2 = x4y2 – x3y4.
Далі визначаємо значення цих виразів при підстановці точок іншого відрізка:
r1 = a1x3 + b1y3 + c1,
r2 = a1x4 + b1y4 + c1,
r3 = a2x1 + b2y1 + c2,
r4 = a2x2 + b2y2 + c2.
Тепер, якщо величини r1 і r2 протилежні за знаком, то це означає, що вершини C і D лежать по різні сторони прямої AB, а значить відрізок CD перетинає пряму, на якій лежить AB. Аналогічно, якщо r3 і r4 протилежні за знаком, то відрізок AB перетинає пряму CD, а отже, відрізки перетинаються.
Рівнобедрений трикутник – це трикутник, у якого хоча б дві сторони (два ребра) рівні. Знайдемо довжини трьох сторін трикутника і порівняємо їх між собою. Якщо відомі координати кінців відрізка (сторони), то довжину визначимо так:
,
Площу трикутників знайдемо за ф. Герона:
де
р-півпериметр:
, і a, b, c – сторони трикутника
де (x1, y1) і (x2, y2) – координати кінців відрізка.
Таким чином, отримуємо наступний алгоритм:
Зчитати координати вершин трикутників.
Порівняємо довжини сторін трикутників. Якщо хоча б дві рівні – трикутник рівнобедрений. Змінюємо його колір.
Візьмемо один трикутник, та почнемо порівнювати його сумарну площу з усіма іншими. І якщо ця сума більша за попередню, і ці два трикутники перетинаються, замінемо значення найбільшої сумарної площі. Так потрібно розглянути усі трикутники.
У двох трикутників, які лишили значення сумарної площі незмінним, змінимо значення кольору.
