Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсова програмування.rtf
Скачиваний:
7
Добавлен:
07.07.2019
Размер:
701.09 Кб
Скачать

Розробка алгоритму виконання завдання

Для розв’язання поставленої задачі будемо проглядати по черзі кожен трикутник і дивитись, чи він не перетинається з іншим трикутником. Якщо перетинається, то змінюємо колір обох трикутників. Щоб визначити, чи перетинаються трикутники треба перевірити, на перетин кожну сторону трикутника з кожною стороною іншого трикутника. Якщо хоча б одна сторона першого трикутника перетинається з хоча б одною стороною другого трикутника, то фігури перетинаються.

Отже, задача зводиться до визначення, чи перетинаються два відрізка. Визначити це можна наступним чином.

Складемо рівняння прямих обох відрізків у вигляді 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) – координати кінців відрізка.

Таким чином, отримуємо наступний алгоритм:

Зчитати координати вершин трикутників.

Порівняємо довжини сторін трикутників. Якщо хоча б дві рівні – трикутник рівнобедрений. Змінюємо його колір.

Візьмемо один трикутник, та почнемо порівнювати його сумарну площу з усіма іншими. І якщо ця сума більша за попередню, і ці два трикутники перетинаються, замінемо значення найбільшої сумарної площі. Так потрібно розглянути усі трикутники.

У двох трикутників, які лишили значення сумарної площі незмінним, змінимо значення кольору.