Будь ласка, використовуйте цей ідентифікатор, щоб цитувати або посилатися на цей матеріал: https://er.chdtu.edu.ua/handle/ChSTU/6400
Назва: Автоматизована система виміру кутової відстані
Автори: Зубко, Ігор Анатолійович
Кошельник, Антон Вікторович
Дата публікації: чер-2025
Короткий огляд (реферат): У кваліфікаційній роботі розроблено автоматизовану систему для вимірювання кутової відстані, яка поєднує сучасні сенсорні технології та програмне забезпечення, створене на платформі C#. Актуальність теми обумовлена потребою у високоточних, швидких та надійних методах вимірювання кутів у таких галузях, як робототехніка, геодезія, астрономія та автоматизовані системи управління. У роботі проведено аналіз існуючих методів вимірювання кутів, визначено функціональні вимоги до системи, спроектовано користувацький інтерфейс та реалізовано алгоритми обчислення кутової відстані методами триангуляції та фазової різниці. Окрема увага приділена обробці помилок, перевірці вхідних даних та збереженню результатів вимірювань у зручному форматі. Здійснено тестування програмного забезпечення з метою перевірки його функціональності та відповідності технічному завданню. Результати роботи засвідчують ефективність і доцільність впровадження розробленої системи в практичні вимірювальні процеси.
URI (Уніфікований ідентифікатор ресурсу): https://er.chdtu.edu.ua/handle/ChSTU/6400
Розташовується у зібраннях:174 Автоматизація, комп'ютерно-інтегровані технології та робототехніка (Автоматизація та комп'ютерно-інтегровані системи та компоненти)

Файли цього матеріалу:
Файл Опис РозмірФормат 
Б_174_2025_Кошельник.pdf
  Restricted Access
760.28 kBAdobe PDFПереглянути/Відкрити    Запит копії


Усі матеріали в архіві електронних ресурсів захищено авторським правом, усі права збережено.

Extracted text
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ 
ЧЕРКАСЬКИЙ ДЕРЖАВНИЙ ТЕХНОЛОГІЧНИЙ УНІВЕРСИТЕТ 
ФАКУЛЬТЕТ ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ І СИСТЕМ 
КАФЕДРА РОБОТОТЕХНІКИ ТА СПЕЦІАЛІЗОВАНИХ КОМП’ЮТЕРНИХ 
СИСТЕМ 
Пояснювальна записка 
до кваліфікаційної роботи 
освітнього ступеня «бакалавр» 
на тему: Автоматизована система виміру кутової відстані 
 
 
 
 
 
Виконав: здобувач вищої освіти 2 курсу, 
групи АКІТС-2109 
 спеціальності 174 Автоматизація 
та комп’ютерно-інтегровані 
технології та робототехніка 
 Антон КОШЕЛЬНИК 
 (ім’я та ПРІЗВИЩЕ) 
Керівник Ігор ЗУБКО 
 (ім’я та ПРІЗВИЩЕ) 
Рецензент  
 (ім’я та ПРІЗВИЩЕ) 
 
 
 
Черкаси 2025 року 
 
2 
ЗМІСТ 
ВСТУП ................................................................................................................................... 3 
РОЗДІЛ 1. АНАЛІЗ ВИМОГ І ПРОЕКТУВАННЯ СИСТЕМИ ...................................... 5 
1.1 Опис предметної області ............................................................................................ 5 
1.2 Визначення основних функціональних вимог ....................................................... 15 
1.3 Інтерфейс користувача ............................................................................................. 18 
РОЗДІЛ 2. РОЗРОБКА ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ ........................................ 22 
2.1 Моделювання і алгоритм вимірювання кутової відстані ...................................... 22 
2.2 Розробка основних модулів програми .................................................................... 25 
2.3 Розробка інтерфейсу користувача на C# ................................................................ 29 
2.4 Обробка помилок та перевірка введених даних .................................................... 31 
РОЗДІЛ 3. ТЕСТУВАННЯ І ДОКУМЕНТАЦІЯ ............................................................ 37 
3.1 Тестування функціональності програми ................................................................ 37 
3.2 Оптимізація та вдосконалення ................................................................................. 44 
3.3 Створення документації ........................................................................................... 48 
ВИСНОВКИ ........................................................................................................................ 56 
ПЕРЕЛІК ПОСИЛАНЬ ...................................................................................................... 58 
ДОДАТОК ........................................................................................................................... 62 
 
 
3 
ВСТУП 
 
Вимірювання кутових відстаней є ключовим елементом у багатьох галузях 
науки та техніки, зокрема в астрономії, геодезії, робототехніці та автоматизованих 
системах управління. Сучасні технології дозволяють досягати високої точності 
вимірювань завдяки використанню лазерних дальномірів, інфрачервоних сенсорів та 
електронних тахеометрів. Однак існують певні прогалини в інтеграції цих технологій 
у єдині автоматизовані системи, що обмежує їх ефективне застосування в реальних 
умовах. Провідними фірмами у цій галузі є Leica Geosystems, Trimble та Riegl, а серед 
вітчизняних розробників можна відзначити компанії «ТехноСервіс» та «ГеоСкан». 
У світі спостерігається тенденція до інтеграції вимірювальних систем з 
інформаційними технологіями, що дозволяє автоматизувати процеси збору, обробки 
та аналізу даних. Використання штучного інтелекту та машинного навчання в 
автоматизованих системах вимірювання кутових відстаней дозволяє підвищити 
точність та швидкість обробки даних, а також зменшити вплив людського фактора. 
Актуальність теми обумовлена необхідністю розвитку автоматизованих систем 
вимірювання кутових відстаней, які забезпечують високу точність та ефективність у 
різних сферах діяльності. Розробка таких систем сприятиме вдосконаленню 
технологічних процесів, підвищенню безпеки та зниженню витрат у галузях, де 
точність вимірювань є критично важливою [1]. 
Метою роботи є розробка автоматизованої системи вимірювання кутових 
відстаней, яка забезпечує високу точність та ефективність вимірювань. Для 
досягнення цієї мети необхідно вирішити такі завдання: 
1. Аналіз існуючих методів та засобів вимірювання кутових відстаней. 
2. Розробка алгоритму обробки та аналізу вимірювальних даних. 
3. Створення програмного забезпечення для автоматизації процесу 
вимірювання. 
4 
4. Розробка технічного забезпечення для реалізації системи. 
Об'єкт дослідження - процес вимірювання кутових відстаней в автоматизованих 
системах. 
Предмет дослідження - методи та засоби автоматизації вимірювання кутових 
відстаней. 
Методи дослідження - методи математичного моделювання, алгоритмізації, 
програмування та тестування. 
Інформаційна база роботи - наукові статті, монографії, технічна документація 
виробників вимірювальних систем, програмне забезпечення для обробки та аналізу 
даних. 
 
 
5 
РОЗДІЛ 1. АНАЛІЗ ВИМОГ І ПРОЕКТУВАННЯ СИСТЕМИ 
1.1 Опис предметної області 
Автоматизована система виміру кутової відстані — це комплекс технічних 
засобів, який включає датчики, обчислювальні модулі та програмне забезпечення для 
автоматичного визначення кутів між об’єктами або лініями. Основною метою цих 
систем є забезпечення високої точності, надійності та швидкості вимірювань, при 
цьому значно знижуючи вплив людського фактора. Такі системи використовуються в 
багатьох сферах, де необхідна висока точність вимірювань, зокрема в робототехніці, 
геодезії, навігації та наукових дослідженнях. 
Автоматизовані системи виміру кутової відстані використовують різні типи 
датчиків, такі як ультразвукові, лазерні та оптичні, а також можуть бути інтегровані з 
різними обчислювальними модулями для обробки даних. Системи можуть 
застосовувати методи триангуляції, фазових різниць сигналів або оптичні методи для 
точного визначення кутових значень. Кожен з методів має свої переваги та недоліки, 
в залежності від специфіки використання. 
Основним завданням цих систем є автоматизація процесу вимірювання, що 
дозволяє скоротити час на проведення вимірювань і підвищити їх точність. Оскільки 
такі системи зазвичай працюють у реальному часі, вони є важливим елементом для 
точних вимірювань і в багатьох випадках застосовуються в автоматизованих 
процесах, де мінімізація помилок є критично важливою. 
Основні компоненти таких систем включають датчики для вимірювання 
відстаней та кутів, обчислювальні модулі для обробки отриманих даних, а також 
програмне забезпечення для обробки інформації та надання кінцевих результатів. 
Завдяки розвитку технологій, таких як мікроелектроніка, ці системи стають більш 
компактними та енергоефективними, що розширює можливості їх використання у 
портативних пристроях. 
6 
Системи автоматизованого вимірювання кутових відстаней є важливим 
інструментом для сучасних технологій, оскільки забезпечують точність і швидкість, 
що є необхідними для наукових, інженерних і технічних завдань [2]. 
Автоматизована система виміру кутової відстані є складною технічною 
системою, яка дозволяє точно визначати кути між об’єктами або лініями без 
втручання людини. Вона включає в себе різноманітні технічні засоби, такі як датчики, 
обчислювальні модулі, програмне забезпечення та спеціалізовані алгоритми для 
обробки і аналізу даних. Основною метою таких систем є забезпечення високої 
точності вимірювань при мінімізації помилок, зокрема через вплив людського 
фактору, а також забезпечення швидкості і надійності роботи в реальних умовах [3]. 
Автоматизовані системи виміру кутової відстані є важливими у багатьох 
сферах, де точність вимірювань є критично важливою, таких як робототехніка, 
навігація, геодезія, картографія та наукові дослідження. Застосування таких систем 
дозволяє знизити витрати часу на проведення вимірювань і підвищити точність 
вимірювань, що особливо важливо в умовах високих вимог до результатів, наприклад, 
у сфері автоматизації, де швидкість та точність є ключовими [4]. 
Автоматизована система виміру кутової відстані складається з кількох основних 
компонентів, що забезпечують її функціональність: 
1. Датчики — це основний елемент, який вимірює кутові параметри між 
об'єктами. Існують різні типи датчиків: 
− Ультразвукові датчики - вони вимірюють час, який потрібен звуковій 
хвилі для проходження між датчиком і об'єктом, і на основі цього розраховують 
відстань, а також можуть застосовуватися для визначення кута. 
− Лазерні дальноміри - лазерні промені використовуються для точного 
вимірювання відстаней, а за допомогою триангуляції також визначають кути. 
− Оптичні системи – використовуються камери та оптичні енкодери, які 
зчитують положення об’єктів у полі зору та визначають їх кути. 
7 
− Гіроскопи та акселерометри - вимірюють орієнтацію об'єкта та його 
кутові переміщення, часто використовуються в портативних пристроях, таких як 
смартфони чи дрони. 
2. Обчислювальні модулі — це процесори чи мікроконтролери, які 
обробляють сигнали від датчиків, виконують необхідні математичні розрахунки та 
передають результати. 
3. Програмне забезпечення — спеціальні алгоритми, які обробляють 
отримані дані та визначають кутові значення. Це може бути програмне забезпечення 
для аналізу даних, візуалізації або для виконання точних розрахунків [5]. 
Автоматизовані системи виміру кутової відстані можуть використовувати різні 
методи вимірювання кутів. Зазвичай це методи, які базуються на геометричних 
принципах, таких як триангуляція або вимірювання фазових різниць: 
1. Триангуляція - один з найбільш поширених методів вимірювання кутів. 
Для цього вимірюється відстань до об’єкта з двох або більше точок, а на основі цих 
вимірювань та відомої відстані між точками визначається кут. Наприклад, у 
робототехніці ультразвукові датчики можуть бути розташовані на різних кінцях 
робота для визначення кутового положення об’єкта. 
2. Фазова різниця - у системах, що використовують ультразвукові чи 
радіохвильові датчики, вимірюється різниця фаз сигналів, що надходять до різних 
датчиків. Це дає змогу розрахувати кут на основі фазових зрушень між сигналами. 
3. Оптичні методи - камери або оптичні енкодери фіксують положення 
об’єкта на зображенні або у полі зору, а спеціальні алгоритми визначають кут 
відносно певних фіксованих точок або центра. Наприклад, в системах на основі 
смартфонів використовують камеру і гіроскоп для послідовних вимірювань кутових 
значень і оцінки відстані до об’єкта [6]. 
Сучасні автоматизовані системи виміру кутової відстані активно 
використовують такі технології: 
8 
1. Ультразвукові системи – вони зазвичай використовують декілька 
датчиків для досягнення високої точності вимірювань, зокрема для визначення кутів 
на невеликій відстані, до 200 мм з точністю до ±0,1°. Такі системи широко 
застосовуються в робототехніці, де необхідно точно визначати кутові параметри для 
руху робота або маніпуляцій. 
2. Лазерні системи – Лазерні дальноміри дозволяють виконувати 
вимірювання на більших відстанях з високою точністю. Вони часто використовуються 
в промисловості та геодезії для точних вимірювань відстаней і кутів. 
3. Оптичні системи – Вони застосовуються для визначення кутових 
параметрів об’єктів, розташованих на великій відстані або в умовах, де ультразвукові 
або лазерні датчики не можуть бути ефективними. Наприклад, в астрономії або 
наукових дослідженнях використовуються оптичні системи для вимірювання 
відстаней між зорями або іншими небесними тілами. 
4. Гіроскопи та акселерометри – Вони використовуються для визначення 
орієнтації і кутових переміщень об’єкта, що дуже важливо в мобільних або 
портативних пристроях, таких як смартфони чи дрони [7]. 
Автоматизовані системи виміру кутової відстані є важливими інструментами 
для багатьох сучасних технологій. Вони забезпечують точність і швидкість 
вимірювань, що необхідно для ефективного функціонування таких галузей, як 
робототехніка, геодезія, картографія, астрономія та інші. Використання таких систем 
дозволяє значно зменшити помилки, зумовлені людським фактором, а також 
підвищити ефективність автоматизованих процесів. Незважаючи на складність 
технологій, їхнє застосування стає все більш поширеним завдяки розвитку 
мікроелектроніки, що дозволяє створювати компактні і енергоефективні рішення для 
різних галузей [8]. 
У табл. 1.1 наведено порівняння технологій для виміру кутової відстані. 
 
9 
Таблиця 1.1 – Порівняння технологій для виміру кутової відстані [9] 
Технологія Точніст Діапазон Застосуванн Переваги Недоліки 
ь я 
Ультразвукові ±0,1° До 300 Робототехні Низька Обмежени
датчики (до 200 мм ка, навігація вартість, й 
мм) простота діапазон, 
чутливість 
до шуму 
Лазерні дальноміри Дуже До 100 м Геодезія, Висока Висока 
висока промисловіс точність, вартість, 
ть великий потреба в 
діапазон калібрува
нні 
Оптичні системи До 1 Залежить Астрономія, Висока Складніст
секунди від наукові точність, ь обробки, 
камери дослідженн візуалізація залежніст
я ь від 
освітлення 
Гіроскопи/акселером Залежи Портатив Смартфони, Компактніс Менша 
етри ть від ні портативні ть, точність, 
пристро системи доступність залежніст
ю ь від 
орієнтації 
 
Для точного керування рухом роботів, наприклад, позиціювання роботизованих 
рук або навігація мобільних роботів. Ультразвукові датчики допомагають визначати 
кутове положення об’єктів для захоплення чи уникнення перешкод. 
10 
У безпілотних автомобілях і дронах для визначення орієнтації та позиції 
відносно навколишнього середовища, наприклад, для уникнення зіткнень. 
 Для вимірювання кутів між орієнтирами та створення точних карт, особливо в 
умовах, де потрібна автоматизація. 
Для вимірювання кутових відстаней між зорями чи іншими небесними тілами, 
наприклад, у телескопах з автоматичними системами наведення. 
Для контролю якості та точного позиціювання деталей на виробництві, 
наприклад, у верстатобудуванні. 
У фізичних експериментах, де потрібна висока точність кутових вимірювань, 
наприклад, у калібруванні приладів [10]. 
Переваги та виклики 
• Переваги:  
− Сучасні системи можуть вимірювати кути з точністю до секунд дуги, що 
важливо для наукових і промислових застосувань. 
− Автоматизація дозволяє проводити вимірювання швидко і безперервно, 
що критично для реального часу, наприклад, у робототехніці. 
−  Зменшення людського фактору забезпечує стабільність результатів, 
особливо в умовах, де помилки недопустимі. 
• Недоліки:  
−  Системи потребують регулярного калібрування для підтримки точності, 
що може бути трудомістким. 
−  Інтерференції, такі як шум, перешкоди чи зміна температури, можуть 
впливати на точність вимірювань. 
− Високоточні системи, особливо з лазерними чи оптичними датчиками, 
можуть бути дорогими, що обмежує їхнє використання в малих підприємствах [11]. 
На рис. 1.1 наведено схематичне зображення. 
11 
 
Рисунок 1.1 – Переваги та недоліки [12]  
 
 Один із конкретних прикладів — автоматизована система для виміру кутової 
характеристики радіометрів, розроблена в лабораторії INTA (El Arenosillo, Mazagón, 
Huelva, Іспанія) і введена в експлуатацію у вересні 2007 року. Ця система: 
• Вимірює кутові відстані в діапазоні ±90° від вертикалі. 
• Має роздільну здатність 1/60 градуса (0,0167°) завдяки механічній 
передачі та сервомотору. 
• Забезпечує точність калібрування з похибкою менше 0,01%, 
підтверджену лазерним інтерферометром. 
12 
• Дозволяє програмоване крокування (0,1°, 1°, 2° тощо) та використовує 
систему збору даних Agilent™ 34970A з точністю 6½ цифр. 
• Працює в темній камері для мінімізації шумів, з'єднання забезпечуються 
екранованими проводами для імунітету до перешкод. 
• Була успішно протестована в 2007 році під час міжнародної кампанії, де 
калібрувались 22 радіометричні прилади. 
Ця система є прикладом, як автоматизація може покращити точність і 
ефективність у специфічних наукових застосуваннях, таких як вимірювання 
сонячного випромінювання [13]. 
Кутова відстань — це кут між двома лініями зору від спостерігача до об’єктів, і 
її вимірювання є важливим у багатьох наукових та інженерних сферах. 
Автоматизовані системи для цього призначені для автоматичного вимірювання таких 
кутів, що дозволяє досягти високої точності та ефективності. Наприклад, у радіометрії 
є система, яка калібрує прилади, вимірюючи кути з роздільною здатністю 1/60 
градуса. У астрономії такі системи інтегровані в телескопи для аналізу позицій 
небесних тіл, а в робототехніці вони допомагають контролювати орієнтацію роботів. 
У астрономії, автоматизовані системи інтегровані в сучасні телескопи, такі як 
ті, що використовуються в обсерваторіях, для виміру кутових відстаней між зорями 
чи галактиками. Наприклад, цифрові камери та програмне забезпечення дозволяють 
автоматично аналізувати зображення неба.  
У робототехніці, автоматизовані системи контролюють орієнтацію 
роботизованих рук, використовуючи сенсори для виміру кутів між різними частинами 
механізму.  
У навігації, сучасні системи, такі як GPS, автоматично обчислюють кутові 
відстані для визначення позицій, хоча це часто є частиною ширших обчислень.  
13 
У метрології та контролі якості, прецизійні інструменти, такі як оптичні 
поділкові головки, можуть бути частиною автоматизованих систем, що вимірюють 
кути з точністю до 1 секунди дуги [14]. 
У таблиці 1.2 наведена характеристика прикладів автоматизованих систем [15]. 
Таблиця 1.2 – Порівняльна таблиця прикладів автоматизованих систем 
Галузь Приклад Діапазон Точність/Роздільна Застосування 
системи вимірювань здатність 
Радіометрія Система ±90° <0,01%, 1/60° Калібрування 
INTA для приладів для 
радіометрів сонячного 
випромінювання 
Астрономія Телескопи з Залежить Висока, до дугових Вимір позицій та 
цифровими від об’єкта секунд розмірів 
камерами небесних тіл 
Робототехніка Системи з Залежить ±0,1° Контроль 
енкодерами від орієнтації 
та механізму роботизованих 
гіроскопами рук 
Метрологія Оптичні До 360° До 1 секунди дуги Контроль якості 
поділкові деталей 
головки 
 
Автоматизована система виміру кутової відстані є комплексною технологічною 
системою, яка дозволяє точно визначати кути між об'єктами або лініями без 
необхідності втручання людини. Такі системи складаються з різних компонентів, 
таких як датчики, обчислювальні модулі, програмне забезпечення та спеціалізовані 
алгоритми для обробки і аналізу даних. Їхня основна мета — забезпечити високу 
14 
точність вимірювань і знизити помилки, які можуть виникати через людський фактор, 
а також підвищити швидкість та надійність процесів у реальних умовах [16]. 
Автоматизовані системи виміру кутової відстані використовують різні типи 
датчиків, включаючи ультразвукові, лазерні та оптичні. Ультразвукові датчики 
вимірюють час, за який звукова хвиля проходить між датчиком і об'єктом, а на основі 
цього розраховується відстань і визначаються кути. Лазерні системи використовують 
лазерні промені для точних вимірювань відстаней, а також для обчислення кутів через 
триангуляцію. Оптичні системи використовують камери та енкодери для визначення 
положення об'єктів у полі зору і розрахунку їх кутових значень [17]. 
Такі системи мають великий потенціал для використання в різних сферах, таких 
як робототехніка, геодезія, картографія, астрономія та наукові дослідження. Вони 
дозволяють автоматизувати процес вимірювань, що підвищує їх точність і швидкість, 
а також знижує витрати часу. У робототехніці, наприклад, ультразвукові датчики 
використовуються для точного позиціювання роботів і маніпуляцій з об'єктами. У 
геодезії та промисловості лазерні системи дозволяють проводити точні вимірювання 
на великих відстанях, що важливо для створення карт або вимірювання параметрів 
будівель. 
Основними методами вимірювання є триангуляція, фазові різниці сигналів і 
оптичні методи. Триангуляція дозволяє визначити кути на основі виміряних відстаней 
між різними точками. Фазові різниці сигналів використовуються в системах з 
ультразвуковими або радіохвильовими датчиками, де різниця фаз сигналів дає змогу 
розрахувати кут. Оптичні методи засновані на використанні камер або оптичних 
енкодерів для фіксації положення об'єктів, що дозволяє визначати кути між ними [18]. 
Розвиток таких технологій, зокрема мікроелектроніки, дозволяє створювати 
компактні та енергоефективні системи, що можуть бути інтегровані в портативні 
пристрої, такі як смартфони. Це відкриває нові можливості для застосування таких 
15 
систем в побутових та професійних умовах, що раніше було неможливо через великі 
розміри та високу вартість обладнання [19]. 
Незважаючи на численні переваги, такі системи мають і свої виклики. Одним із 
них є необхідність регулярного калібрування для підтримки високої точності 
вимірювань. Крім того, на точність вимірювань можуть впливати зовнішні чинники, 
такі як шум або температурні зміни, що може вимагати додаткових налаштувань. 
Також високоточні системи, зокрема лазерні або оптичні, можуть бути дорогими, що 
обмежує їх використання в малих підприємствах або для недорогих проектів [20].  
У цілому, автоматизовані системи виміру кутової відстані є важливим 
інструментом для сучасних технологій. Вони забезпечують точність, швидкість та 
надійність вимірювань, що є критично важливим для таких галузей, як робототехніка, 
геодезія та наукові дослідження. Завдяки розвитку нових технологій, таких як 
мікроелектроніка та штучний інтелект, можливості цих систем розширюються, що 
дозволяє використовувати їх у нових, більш складних умовах. 
 
1.2 Визначення основних функціональних вимог 
Основні функціональні вимоги програми на C# Windows Forms передбачають 
розробку програми з інтуїтивно зрозумілим інтерфейсом, що дозволяє користувачам 
легко взаємодіяти з додатком. Програма повинна включати форму для введення та 
обробки даних, з можливістю їх збереження та подальшого аналізу. Необхідно 
забезпечити можливість введення даних через текстові поля, списки, комбо-бокси, а 
також кнопки для виконання різних операцій. Програма повинна виконувати 
обчислення або трансформації введених даних та надавати результат користувачу. 
Отже, вимоги до розроблюваної програми наступні (рис.1.2). 
16 
 
Рисунок 1.2 – Вимоги до програми 
17 
Окрім того, важливо, щоб програма могла обробляти дані без перезавантаження 
сторінки або вікна. Для цього слід застосувати механізми асинхронної обробки даних. 
Крім того, важливо здійснити валідацію введених даних, щоб забезпечити їх 
коректність, перевіряючи наявність необхідної інформації, формат введення 
(наприклад, числа або дати) і запобігти помилкам користувача. 
Програма повинна мати можливість зберігати дані на локальному диску, а також 
надавати функцію зчитування та збереження даних у різних форматах, наприклад, 
CSV або текстовому файлі. Це дозволить користувачам зберігати результати або 
імпортувати їх у програму для подальшої обробки. 
Ще одним важливим аспектом є робота з графічним інтерфейсом. Програма 
повинна мати можливість динамічно змінювати вміст вікон і елементів інтерфейсу в 
залежності від дій користувача. Наприклад, після натискання кнопки чи введення 
даних повинні змінюватися текстові значення або з'являтися нові елементи. 
Не менш важливою є інтеграція з іншими програмами або сервісами. Програма 
повинна мати можливість підключатися до баз даних або зовнішніх ресурсів через API 
для збору даних чи виконання певних операцій. Це дозволить забезпечити взаємодію 
програми з іншими системами та автоматизацію процесів. 
Також необхідно передбачити функціональність для пошуку та фільтрації 
даних. Користувачі повинні мати можливість знаходити потрібну інформацію серед 
великої кількості записів, за різними критеріями, що забезпечить зручність у роботі з 
програмою. 
Виведення результатів програми повинно бути зручним і зрозумілим. Це 
можуть бути таблиці, графіки або текстові повідомлення, що надають користувачеві 
необхідну інформацію. Програма повинна також підтримувати експорт даних у різні 
формати, що дозволить користувачеві зберігати або передавати результати. 
Необхідно також забезпечити сповіщення про помилки або завершення 
операцій. Якщо програма зустрічає помилку в процесі виконання операцій, вона 
18 
повинна показувати повідомлення з детальним описом помилки, а також пропонувати 
варіанти вирішення проблеми. Користувач має отримувати чітку інформацію про 
успішне виконання операцій або про необхідність виправлення помилок. 
З метою збереження безпеки даних та доступу до них, програма повинна мати 
механізми аутентифікації користувачів. Це дозволить забезпечити безпечний доступ 
до програмних функцій і зберігання чутливих даних. 
Нарешті, програма повинна бути оптимізована для ефективного виконання 
операцій при роботі з великими обсягами даних. Важливо врахувати можливість 
роботи програми в багатозадачному середовищі для забезпечення стабільної роботи 
без значних затримок. 
  
1.3 Інтерфейс користувача 
Інтерфейс користувача (UI) є важливою частиною будь-якої програми, оскільки 
він визначає, як користувач взаємодіє з програмою, наскільки інтуїтивно зрозумілим 
та зручним буде її використання. Він забезпечує зв'язок між програмою та її 
користувачем, дозволяючи користувачеві вводити дані, отримувати результати і 
виконувати необхідні дії. У програмуванні для Windows Forms на платформі C# 
інтерфейс користувача розробляється за допомогою спеціальних елементів керування, 
таких як текстові поля, кнопки, списки, таблиці та інші. 
Windows Forms надає набір стандартних елементів керування для створення 
інтерфейсу користувача. Ці елементи включають текстові поля, кнопки, меню, списки 
та таблиці. Кожен елемент має свою мету, і вони розташовуються в основному вікні 
програми, яке називається формою. Використовуючи ці елементи, можна створити 
програму, з якою користувач може взаємодіяти, вводячи дані, вибираючи параметри 
та отримуючи результати. 
Основне завдання інтерфейсу користувача — забезпечити максимальну 
зручність і ефективність для користувача. І це досягається через простоту та 
19 
зрозумілість. Кожен елемент інтерфейсу має бути розташований логічно і зрозуміло. 
Це означає, що користувач повинен без труднощів орієнтуватися в програмі, 
знаходити необхідні функції та зрозуміти, як їх використовувати. Важливо уникати 
надмірного навантаження на користувача великою кількістю елементів. Складні 
схеми, незрозумілі позначення або перенавантаження інтерфейсу можуть відвернути 
увагу користувача і ускладнити роботу з програмою. 
Щоб зробити інтерфейс зручним і зрозумілим, рекомендується використовувати 
стандартні елементи керування, з якими користувачі вже знайомі. Це кнопки, текстові 
поля, списки, радіо-кнопки, чекбокси та інші елементи, які часто зустрічаються в 
інших програмах. Ці елементи прості в освоєнні, і користувачі не потребують 
додаткових інструкцій для того, щоб зрозуміти, як ними користуватися. Наприклад, 
кнопки повинні бути великими і видимими, а текст на кнопках та в полях введення 
чітко вказувати на функціональність, яку вони виконують. 
Крім того, інтерфейс повинен бути естетично приємним. Це важливо, оскільки 
користувач буде працювати з програмою тривалий час, і візуальний аспект має 
значення. Колірна палітра і шрифти повинні бути вибрані таким чином, щоб текст був 
чітким і зручним для читання, а сам інтерфейс не викликав відчуття перевантаження. 
Для фону краще вибирати нейтральні кольори, а для кнопок та інших важливих 
елементів — яскраві контрастні кольори, що привертають увагу. Проте важливо, щоб 
ці кольори не були занадто яскравими або кричущими, що може відволікати 
користувача. 
Розташування елементів на формі має бути організовано так, щоб користувач 
міг швидко знайти потрібні функції. Програма повинна бути спроектована таким 
чином, щоб всі елементи були логічно розподілені по екрану. Використання меню або 
панелей інструментів допомагає організувати функціональність програми і полегшує 
навігацію. Це дозволяє користувачеві швидко знайти необхідний інструмент або 
опцію. 
20 
Крім того, важливо, щоб усі елементи інтерфейсу були чітко позначені. Кнопки 
повинні мати зрозумілі написи, які вказують, що саме відбудеться після натискання 
цієї кнопки. Вся інформація повинна подаватися таким чином, щоб користувач міг 
зрозуміти її без зайвих пояснень. Це включає в себе не лише текст на елементах 
управління, а й те, як програма надає повідомлення про помилки, попередження або 
інші важливі факти. 
Інтерфейс також повинен підтримувати функціональність пошуку та фільтрації 
даних. Це корисно, якщо програма обробляє великі обсяги інформації, і користувачеві 
необхідно швидко знайти певну інформацію. Пошук і фільтрація дозволяють 
спростити взаємодію з програмою та зекономити час. 
Адаптивність інтерфейсу також є важливим аспектом. Програма повинна 
змінювати своє відображення в залежності від розміру вікна або екрану. Якщо 
користувач змінює розмір вікна, всі елементи інтерфейсу мають автоматично 
коригувати своє розташування та розміри так, щоб виглядати добре на різних 
пристроях. Це робить програму більш гнучкою і зручною для користувача, який може 
працювати з нею на різних екранах і пристроях. 
Крім того, програма повинна підтримувати можливість зміни мови інтерфейсу. 
Це особливо важливо, якщо програма призначена для використання в різних країнах 
або для різних мовних груп. Користувач зможе вибрати мову інтерфейсу, що 
дозволить забезпечити зручний доступ до програми для людей з різним мовним 
фоном. 
Таким чином, інтерфейс програми, що розробляється має дотримуватися 
наступних вимог (рис.1.3). 
21 
 
Рисунок 1.3 – Вимоги до інтерфейсу користувача 
 
Розробка інтерфейсу користувача в C# Windows Forms повинна враховувати всі 
ці аспекти, щоб зробити програму зручною та ефективною для користувачів. 
Важливо, щоб інтерфейс був простим, зрозумілим і естетично приємним, а також 
адаптувався до різних умов використання. 
  
22 
РОЗДІЛ 2. РОЗРОБКА ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ 
2.1 Моделювання і алгоритм вимірювання кутової відстані 
 Моделювання та алгоритм вимірювання кутової відстані є важливими 
елементами в розробці автоматизованих систем для визначення кута між двома 
точками чи об'єктами. Це завдання може бути вирішене за допомогою різних фізичних 
принципів і методів, таких як триангуляція, фазова різниця, оптичні методи, 
ультразвукові та лазерні датчики. 
Моделювання вимірювання кутової відстані передбачає застосування різних 
фізичних принципів і методів для визначення кута між двома об'єктами, наприклад, 
між двома точками на земній поверхні або між об'єктами в просторі. Моделі 
вимірювання можуть включати математичні розрахунки, базуючись на даних, 
отриманих за допомогою різних сенсорів або інструментів вимірювання, таких як 
гіроскопи, ультразвукові та лазерні датчики. 
Основними етапами моделювання є визначення точок для вимірювання кута, 
збір даних через відповідні датчики, а також математичне моделювання, яке обробляє 
отримані дані для обчислення кута. Отриманий кут потім перетворюється в зручний 
формат для подальшого використання або відображення. 
Алгоритм вимірювання кутової відстані зазвичай включає кілька ключових 
кроків, які дозволяють точно обчислити кут між об'єктами або точками. Спочатку 
визначаються вхідні дані, такі як відстань між точками та вибір методу вимірювання. 
Після цього вибирається відповідний метод для обчислення кута, наприклад, 
триангуляція чи фазова різниця, а дані обробляються для знаходження кута. 
Розрахований кут потім виводиться на екран або використовується для подальших 
обчислень, наприклад, для навігації чи позиціювання. 
В рамках роботи використовуються два методи для обчислення (рис. 2.1). 
23 
 
Рисунок 2.1 – Порівняння методів  
 
1. Триангуляція 
Для визначення кута між двома точками часто використовують метод 
триангуляції. Основна формула для обчислення кута в трикутнику: 
��2 + ��2 − ��2
cos(��) =  
2����
де �� та �� – відстань від спостерігача до точок, 
�� – відстань між точками спостереження. 
Для обчислення кута: 
��2 + ��2 − ��2
�� = cos−1( ) 
2����
 Приклад: Якщо �� = 10 см, �� = 12 см, і с = 5 cм, то: 
102 + 122 − 52 219
cos(��) = = = 0,91 
2 ∗ 10 ∗ 12 240
�� = cos−1(0,91) = 0.419  радіан 
 Переводимо в градуси: 
24 
180
�� = 0,419 ∗ = 24° 
��
 2. Фазова різниця 
Метод фазової різниці використовується для вимірювання кута між точками за 
допомогою хвильових сигналів (наприклад, ультразвукових чи радіохвильових). 
Формула для обчислення кута на основі фазової різниці виглядає так: 
2��(��1 − ��2)
∆�� =  
��
 де ∆�� – фазова різниця між точками; 
��1 і ��2 – відстані від кожної точки до джерела хвилі; 
�� – довжина хвилі. 
Приклад. 
Нехай маємо два вимірювання: 
d1 = 3 м; 
d2 = 2.5 м; 
�� = 0.5 м. 
Розв’язок 
Визначаємо різницю відстаней: 
d1 − d2 = 3 − 2.5 = 0.5 м 
Підставляємо значення у формулу для фазової різниці: 
2��(0,5)
∆�� = = 2�� 
0,5
Оскільки 2�� — це повний цикл (360°), ми отримуємо, що фазова різниця між 
точками дорівнює 2�� радіан, або 360°. 
Моделювання та алгоритм вимірювання кутової відстані є ключовими 
аспектами в розробці автоматизованих систем, які використовуються для визначення 
кута між об'єктами або точками. Різні фізичні принципи та методи, такі як 
25 
триангуляція та фазова різниця, дозволяють точно визначати кутові відстані в 
залежності від умов вимірювання та доступних сенсорів. 
Моделювання кутової відстані передбачає використання математичних 
розрахунків для обробки даних, отриманих з датчиків, таких як гіроскопи, 
ультразвукові та лазерні датчики. Алгоритм вимірювання складається з кількох 
етапів, починаючи з визначення точок для вимірювання та збору даних, і завершуючи 
математичним моделюванням для обчислення кута. Розрахований кут потім може 
бути використаний для подальших обчислень або відображення на екрані. 
У рамках роботи розглядаються два методи для обчислення кута. Перший метод 
— це триангуляція, яка використовує відстані між точками і базову відстань для 
обчислення кута на основі формули косинуса. Другий метод — фазова різниця, який 
ґрунтується на вимірюванні різниці фаз між хвильовими сигналами, що приходять з 
різних точок. 
Оцінка цих методів показує, що триангуляція є зручним для застосування у 
простих задачах, де можна легко визначити відстані, в той час як метод фазової різниці 
є більш складним, але корисним у випадках, коли потрібна висока точність та 
застосовуються хвильові сигнали. Обидва методи мають свої переваги в залежності 
від конкретних умов використання і забезпечують точність обчислень, що робить їх 
корисними інструментами для різних галузей, від геодезії до навігації та 
позиціювання. 
 
2.2 Розробка основних модулів програми 
Програма розроблена для обчислення кута між двома точками з використанням 
двох методів: триангуляції та фазової різниці. Вона складається з кількох основних 
модулів, кожен з яких виконує конкретні завдання, щоб забезпечити правильну 
роботу додатка та зручність для користувача. 
На рис. 2.2 наведено структуру модулів програми. 
26 
 
Рисунок 2.2 – Структура модулів програми 
 
При завантаженні форми програма ініціалізує усі необхідні елементи керування, 
які відображаються на екрані. Це текстові поля для вводу даних (відстані між точками, 
базова відстань, довжина хвилі), комбобокс для вибору методу вимірювання 
(триангуляція або фазова різниця), а також кнопка для запуску обчислень. Окрім 
цього, на формі є етикетка для відображення результату обчислення кута. Всі ці 
елементи повинні бути доступними для взаємодії користувача. 
Крім того, у комбобокс додаються доступні методи вимірювання: 
"Триангуляція" та "Фазова різниця". Це дозволяє користувачеві вибрати бажаний 
метод для подальшого обчислення кута. За замовчуванням обраний метод — 
триангуляція, але користувач може змінити його в будь-який момент. 
Коли користувач натискає кнопку для виконання обчислення, програма 
перевіряє, чи всі поля заповнені. Якщо хоча б одне поле не заповнене (наприклад, не 
введено значення для відстаней чи довжини хвилі), програма виводить повідомлення 
про помилку, що інформує користувача про необхідність заповнити всі поля. Це 
допомагає уникнути помилок введення та забезпечує правильну роботу програми. 
27 
Якщо всі поля заповнені, програма зчитує значення, введені користувачем. Вона 
отримує відстань між двома точками (distance1, distance2), базову відстань 
(baseDistance) та довжину хвилі (wavelength), якщо вибрано метод фазової різниці. 
Також програма зчитує вибір методу вимірювання з комбобоксу, щоб визначити, який 
алгоритм обчислення кута буде застосовано. 
Далі програма виконує обчислення кута залежно від обраного методу: 
1. Метод триангуляції: 
Кут обчислюється за допомогою класичної формули косинуса кута. Вона 
ґрунтується на відстанях між точками та базовій відстані, і використовується формула 
косинуса для обчислення кута між двома точками на основі цих відстаней. 
Формула виглядає так: 
��2 + ��2 − ��2
cos(��) =  
2����
 де �� та �� – відстань від спостерігача до точок, 
�� – відстань між точками спостереження. 
З цієї формули виводимо формулу для обчислення кута: 
��2 + ��2 − ��2
�� = cos−1( ) 
2����
2. Метод фазової різниці: 
Для обчислення кута використовується різниця фаз між хвильовими сигналами. 
Цей метод застосовується, коли є можливість виміряти фазову різницю між двома 
хвильовими сигналами, що приходять з різних точок. Кут обчислюється на основі 
різниці відстаней між точками і довжини хвилі. 
Формула для фазової різниці виглядає так: 
2��(��1 − ��2)
∆�� =  
��
 де ∆�� – фазова різниця між точками; 
��1 і ��2 – відстані від кожної точки до джерела хвилі; 
28 
�� – довжина хвилі. 
Після обчислення кута програма перетворює результат з радіан в градуси та 
виводить його на етикетку у форматі з двома знаками після коми. 
Після того, як кут обчислено, програма відображає результат на етикетці на 
формі. Значення кута виводиться в градусах, що є найбільш зручним форматом для 
користувача. Це забезпечує зрозумілий та точний результат, який можна використати 
для подальшого аналізу або прийняття рішень. 
Крім того, що програма виводить результат на екран, вона також зберігає 
результати в CSV файл. Це дозволяє зберігати дані для подальшого використання або 
аналізу. Програма перевіряє, чи існує файл з результатами. Якщо файл не існує, він 
створюється з заголовками, що описують дані. Кожен новий результат додається до 
файлу, що дозволяє користувачеві мати повний список вимірювань за певний період. 
Програма також має вбудовану обробку помилок. Якщо при введенні даних 
виникає помилка (наприклад, введено нечислові значення або пропущено важливе 
поле), програма виводить повідомлення про помилку, яке допомагає користувачеві 
зрозуміти, що саме було введено неправильно. Це дозволяє користувачеві виправити 
помилку та спробувати знову, запобігаючи таким чином некоректному обчисленню. 
Програма поєднує в собі обчислювальні алгоритми для визначення кута за 
допомогою триангуляції та фазової різниці, а також надає користувачеві зручний 
інтерфейс для введення даних та отримання результатів. Вона має просту логіку, яка 
дає точні обчислення, зберігає результати в CSV файлі для подальшого використання 
і забезпечує коректну обробку помилок, що робить її ефективним інструментом для 
виконання вимірювань та аналізу. 
Програма, яка обчислює кут між двома точками за допомогою методів 
триангуляції та фазової різниці, реалізує ефективні алгоритми для виконання точних 
обчислень. Вона має зручний і логічно побудований інтерфейс, що дозволяє 
користувачам вводити необхідні дані і отримувати результати без зайвих труднощів. 
29 
Програма перевіряє введені дані на наявність помилок, що забезпечує коректність 
обчислень та знижує ймовірність введення некоректних значень. 
За допомогою комбобоксу користувач може вибрати метод розрахунку кута, а 
програма самостійно визначає, який алгоритм використовувати. Це дозволяє легко 
адаптувати програму до різних умов вимірювань. Програма підтримує не тільки 
обчислення кута, але й збереження результатів у CSV файл для подальшого 
використання, що дозволяє зберігати дані для аналізу і зручного доступу в 
майбутньому. 
Крім того, вбудована система обробки помилок забезпечує стабільність роботи 
програми навіть при введенні некоректних даних, що дозволяє користувачеві 
оперативно отримувати корисну інформацію для виправлення помилок. 
Програма поєднує точні обчислення з зручністю використання та збереженням 
результатів, що робить її ефективним інструментом для виконання вимірювань та 
аналізу в різних сферах. 
 
2.3 Розробка інтерфейсу користувача на C# 
Інтерфейс користувача, представлений на зображенні (рис.2.3), створений для 
забезпечення зручності використання програми, яка дозволяє розраховувати кут між 
точками за допомогою різних методів. Основне вікно програми має заголовок, який 
чітко вказує на призначення програми — це «Розрахунок кута». Такий заголовок 
дозволяє користувачеві одразу зрозуміти, яку задачу вирішує програма. 
30 
 
Рисунок 2.3 – Інтерфейс програми 
 
Користувач має можливість ввести необхідні дані для обчислення кута, 
використовуючи текстові поля. Є поля для введення відстаней від точки А і точки Б 
до об'єкта, а також для введення відстані між цими точками. Ці поля дозволяють 
зібрати всі необхідні дані, щоб виконати обчислення кута. Якщо користувач обирає 
метод, який потребує додаткової інформації, то є також поле для введення довжини 
хвилі. Це поле стає актуальним, коли користувач вибирає метод «Фазова різниця». 
Інтерфейс також включає комбобокс, де користувач може вибрати метод 
розрахунку — за замовчуванням це «Триангуляція», але програма передбачає 
можливість додавання інших методів у майбутньому. Комбобокс дозволяє швидко і 
зручно змінювати метод розрахунку, що підвищує гнучкість програми. 
Натискання на кнопку «Порахувати» запускає процес розрахунку. Після того, 
як користувач введе всі дані і вибере метод, програма обчислює кут і виводить 
результат на екран. Для цього в інтерфейсі передбачено місце, яке на даному етапі 
позначене як «label4». Це може бути мітка, на якій буде виведено результат 
розрахунку, або повідомлення про помилку, якщо введено некоректні дані. 
31 
Інтерфейс користувача програми розроблений з акцентом на зручність та 
простоту використання, що дозволяє користувачеві швидко освоїти основні функції 
програми без додаткових складнощів. Чітко визначений заголовок "Розрахунок кута" 
одразу вказує на призначення програми, що сприяє зручному взаємодії з нею. 
Користувач має можливість вводити необхідні дані для обчислення кута через 
інтуїтивно зрозумілі текстові поля, що дозволяє легко зібрати всі необхідні параметри 
для розрахунків. Крім того, наявність комбобоксу для вибору методу розрахунку 
додає гнучкості в роботі з програмою, що також передбачає можливість додавання 
нових методів у майбутньому. 
Натискання кнопки "Порахувати" запускає процес розрахунку, а результат 
виводиться на екран у зручному для користувача форматі. Інтерфейс розроблений так, 
щоб бути зрозумілим та доступним для нових користувачів, дозволяючи швидко 
зрозуміти основні функції програми без надмірних деталей. Простота та логічне 
розташування елементів сприяють зручності в роботі з програмою, роблячи її 
ефективною та легкою у використанні. 
 
2.4 Обробка помилок та перевірка введених даних 
У розділі описується обробка помилок і перевірка введених даних здійснюються 
на кількох етапах, щоб забезпечити правильність обчислень і запобігти введенню 
некоректних або нечислових значень. 
Коли користувач натискає кнопку для виконання розрахунку, програма 
перевіряє, чи заповнені всі необхідні поля. Це зроблено за допомогою перевірки, чи є 
хоча б одне з полів порожнім. Якщо одне з полів не заповнене, програма виводить 
повідомлення про помилку через MessageBox.Show, повідомляючи користувача, що 
потрібно заповнити всі поля: 
if(string.IsNullOrEmpty(txtDistance1.Text)|| 
string.IsNullOrEmpty(txtDistance2.Text) || 
32 
    string.IsNullOrEmpty(txtBaseDistance.Text)|| 
string.IsNullOrEmpty(txtWavelength.Text) || 
    cmbMethod.SelectedItem == null) 
{ 
    MessageBox.Show("Будь ласка, заповніть всі поля.", "Помилка вводу", 
MessageBoxButtons.OK, MessageBoxIcon.Error); 
    return; 
} 
Це означає, що якщо хоча б одне поле не містить значення або користувач не 
вибрав метод з комбобоксу, програма не продовжить виконання і відобразить 
повідомлення про помилку. 
У випадку, якщо намагатися виконати розрахунки з якимось з порожніх полей, 
то він отримає відповідне повідомлення (рис.2.4). 
 
Рисунок 2.4 – Помилка вводу  
 
33 
Крім перевірки на порожні поля, потрібно переконатися, що користувач вводить 
тільки числові значення. Для цього в програмі використовується метод IsNumeric, 
який перевіряє, чи можна перетворити введений рядок у тип double. Це важливо, 
оскільки програма повинна працювати тільки з числовими значеннями. 
Метод IsNumeric виглядає наступним чином: 
private bool IsNumeric(string value) 
{ 
    double result; 
    return double.TryParse(value, out result); 
} 
Цей метод намагається перетворити введений рядок на число. Якщо це вдається, 
метод повертає true, якщо ні — false. Таким чином, цей метод перевіряє, чи введене 
значення є числом, і виключає введення букв чи інших неприпустимих символів. 
У разі, якщо користувач вводить некоректні значення, програма виводить ще 
одне повідомлення про помилку: 
if (!IsNumeric(txtDistance1.Text) || !IsNumeric(txtDistance2.Text) || 
    !IsNumeric(txtBaseDistance.Text) || !IsNumeric(txtWavelength.Text)) 
{ 
    MessageBox.Show("Введіть лише числові значення.", "Помилка вводу", 
MessageBoxButtons.OK, MessageBoxIcon.Error); 
    return; 
} 
Це перевіряє, чи всі введені значення є числами. Якщо хоча б одне значення не 
є числом, програма виводить повідомлення, що дозволяє користувачеві усунути 
помилки. 
У випадку, якщо користувач замість цифри уведе букву у якесь з полей, то 
отримаємо відповідне повідомлення (рис. 2.5). 
34 
 
Рисунок 2.5 – Помилка вводу, має бути число 
 
У коді також використовується блок try-catch, щоб обробити непередбачувані 
помилки під час виконання програми. У разі, якщо якась помилка виникне під час 
виконання обчислень або інших операцій, програма не завершиться аварійно, а виведе 
повідомлення про помилку: 
try 
{ 
    // Перевірка та обчислення 
} 
catch (Exception ex) 
{ 
    MessageBox.Show("Помилка вводу: " + ex.Message); 
} 
Це дозволяє обробити не тільки помилки, пов'язані з некоректним введенням, 
але й інші проблеми, які можуть виникнути під час виконання програми. Наприклад, 
35 
якщо програма стикається з проблемами під час збереження файлу або під час 
обчислень, вона не закриється неочікувано, а повідомить користувача про наявну 
проблему. 
Отже: 
- програма спочатку перевіряє, чи заповнені всі необхідні поля для введення 
даних, щоб уникнути помилок; 
- програма гарантує, що введені значення є числами (типу double), що дозволяє 
уникнути введення букв або інших неприпустимих символів; 
- блок try-catch допомагає зберегти стабільність програми, навіть якщо 
виникнуть непередбачувані помилки, і вивести користувачеві корисне повідомлення. 
У розділі реалізовано ефективну обробку помилок та перевірку введених даних 
на кількох етапах, що дозволяє забезпечити правильність обчислень і запобігти 
введенню некоректних або нечислових значень. Програма на першому етапі 
перевіряє, чи заповнені всі необхідні поля. Якщо хоча б одне поле порожнє або 
користувач не вибрав метод вимірювання, програма не продовжить виконання і 
виведе повідомлення про помилку, попереджаючи користувача про необхідність 
заповнення всіх полів. Це дозволяє уникнути некоректного запуску обчислень. 
Крім того, програма перевіряє, чи введені значення є числами. Для цього 
використовується метод IsNumeric, який намагається перетворити введений рядок на 
тип double. Якщо перетворення успішне, значення вважається коректним, і програма 
продовжує роботу. Якщо введено нечислове значення, програма виводить 
повідомлення про помилку, що дозволяє користувачеві виправити введені дані. 
Завдяки використанню блоку try-catch, програма здатна обробляти 
непередбачувані помилки під час виконання, наприклад, помилки обчислень або 
збереження даних. Це дозволяє уникнути аварійного завершення програми та надає 
користувачеві корисне повідомлення про виниклі проблеми. 
36 
Таким чином, програма реалізує надійну перевірку введених даних, що гарантує 
правильність виконання обчислень, а також забезпечує стабільність і зручність для 
користувачів за допомогою відповідної обробки помилок. 
 
 
 
 
  
37 
РОЗДІЛ 3. ТЕСТУВАННЯ І ДОКУМЕНТАЦІЯ 
3.1 Тестування функціональності програми 
Тестування функціональності програми є важливим етапом в розробці 
програмного забезпечення, оскільки воно дозволяє перевірити, чи відповідає 
фактична поведінка програми тим вимогам, які були визначені на етапі проектування. 
Метою функціонального тестування є підтвердження того, що кожна функція 
програми працює згідно з визначеними характеристиками, а також перевірка того, як 
система взаємодіє з іншими компонентами та користувачами. 
Основною метою функціонального тестування є перевірка того, чи відповідає 
програмне забезпечення всім заявленим вимогам, які були вказані на етапі планування 
або проектування системи. Це дозволяє виявити помилки та недоліки в реалізації 
функцій і переконатися, що програма працює стабільно і правильно в умовах 
реального використання. 
Завдання тестування включають: 
• Перевірку коректності виконання кожної функції програми. Важливо, 
щоб кожна функція, яка була прописана у вимогах, виконувалась так, як задумано. Це 
включає в себе перевірку правильності результатів обчислень, коректності роботи 
інтерфейсів, а також правильність реакцій на введення даних. 
• Виявлення помилок та дефектів у функціональності. Під час тестування 
важливо виявляти будь-які помилки, що можуть призвести до некоректного 
виконання програми, таких як логічні помилки в алгоритмах або неправильна обробка 
вхідних даних. 
• Підтвердження відповідності програмного забезпечення вимогам 
замовника. Функціональне тестування також перевіряє, чи виконуються всі 
запитувані функції та можливості, а також чи відповідає програма вимогам до її 
роботи, що були визначені під час створення технічного завдання. 
2. Методи функціонального тестування 
38 
Для забезпечення належної якості програмного продукту використовуються 
різні методи функціонального тестування, серед яких найбільш поширені: 
• Модульне тестування - це перевірка окремих функцій або методів 
програми. Кожен модуль тестується окремо, щоб переконатися в тому, що він працює 
правильно в ізольованих умовах, без взаємодії з іншими частинами програми. 
• Інтеграційне тестування  -  після того як окремі модулі були 
протестовані, перевіряється їх взаємодія один з одним. Інтеграційне тестування 
забезпечує перевірку того, чи коректно функціонують комунікації між різними 
частинами системи та чи зберігається правильність даних при їх передачі. 
• Системне тестування - це перевірка всієї програми в цілому, де 
тестуються всі компоненти системи як єдине ціле. Системне тестування охоплює різні 
аспекти роботи програми, включаючи її взаємодію з операційною системою, базами 
даних і іншими зовнішніми системами. 
• Приймальне тестування. Мета цього тестування — переконатися, що 
програма відповідає вимогам кінцевого користувача. Приймальне тестування 
зазвичай виконується з точки зору кінцевого користувача програми, і полягає у 
перевірці, чи задовольняє система потреби і вимоги користувачів. 
3. Процес тестування 
Процес функціонального тестування складається з кількох етапів, кожен з яких 
важливий для досягнення високої якості програмного продукту: 
1. Аналіз вимог. На цьому етапі тестувальники вивчають документацію, яка 
містить вимоги до функціональності програми, щоб зрозуміти, які конкретно функції 
повинна виконувати система. Аналіз вимог допомагає сформулювати точні критерії 
для тестування. 
2. Розробка тестових випадків. На основі вимог розробляються тестові 
випадки, що описують, як саме будуть перевірятися функції програми. Кожен 
тестовий випадок має визначений набір вхідних даних, очікуваних результатів і 
39 
критеріїв успішності. Тестові випадки можуть включати як стандартні сценарії 
використання програми, так і екстремальні ситуації, наприклад, некоректне введення 
даних. 
3. Виконання тестування. Після підготовки тестових випадків, 
тестувальники виконують тести. Програма запускається з різними вхідними даними, 
і порівнюються фактичні результати з очікуваними. Під час тестування важливо 
звертати увагу на всі деталі, щоб виявити навіть найменші недоліки у функціонуванні 
програми. 
4. Аналіз результатів. Після виконання тестування проводиться аналіз 
отриманих результатів. Якщо фактичні результати тестування не збігаються з 
очікуваними, це може свідчити про наявність помилок у програмі. Тестувальники 
повинні зафіксувати дефекти і передати їх розробникам для виправлення. 
5. Звітність. Після тестування складається звіт, який містить інформацію про 
проведене тестування, виявлені дефекти та рекомендації щодо подальших дій. Звіт є 
важливим документом для команди розробників та замовника, оскільки він допомагає 
оцінити якість програмного продукту [21]. 
Розглянемо приклад функціонального тестування програми для обчислення 
кута між двома точками на площині. Для цього тесту вхідними даними є координати 
точок A та B, а очікуваним результатом є обчислений кут між ними. 
1. Тестування введення координат для точки А: 
• Вхідні дані: Введення координат точки А (наприклад, x = 5, y = 3). 
• Очікуваний результат: Точка А повинна бути коректно відображена в 
текстовому полі, і програма повинна дозволити ввести координати для точки B. 
2. Тестування введення координат для точки B: 
• Вхідні дані: Введення координат точки B (наприклад, x = 7, y = 4). 
• Очікуваний результат: Точка B повинна бути коректно відображена в 
текстовому полі, і програма має коректно розраховувати відстань між точками та кут. 
40 
На рис. 3.1 наведено результат тестування. 
 
Рисунок 3.1 – Результат тестування  
 
3. Тестування вибору методу розрахунку: 
• Вхідні дані: Вибір методу "Триангуляція" з випадаючого списку. 
• Очікуваний результат: Після вибору методу, програма повинна коректно 
відобразити можливість виконати розрахунок кута за цим методом, якщо введені 
точки та інші параметри. 
Результат наведено на рис. 3.2. 
 
41 
 
Рисунок 3.2 – Результат тестування  
 
 Те саме повторимо і для методу фазової різниці (рис. 3.3). 
 
Рисунок 3.3 – Тестування методу фазової різниці  
 
42 
4. Тестування введення відстані між точками: 
• Вхідні дані: Введення відстані між точками, якщо це передбачено 
розрахунком (наприклад, 2 см). 
• Очікуваний результат: Програма повинна коректно обробити введену 
відстань і застосувати її для коректного обчислення кута. 
5. Тестування розрахунку кута після введення всіх даних: 
• Вхідні дані: Введення координат для точок, вибір методу і введення 
довжини хвилі. 
• Очікуваний результат: Кнопка "Порахувати" має виконати розрахунок 
кута на основі введених даних, і результат має з'явитися в полі label4. 
6.  Тестування на порожні поля: 
• Вхідні дані: Залишити одне або кілька полів порожніми і натискати 
"Порахувати". 
• Очікуваний результат: Програма повинна коректно реагувати на 
відсутність введених даних, можливо, відображати повідомлення про помилку чи 
попередження. 
7. Тестування коректності результату розрахунку кута: 
• Вхідні дані: Введення точок та відстані, вибір методу. 
• Очікуваний результат: Програма має обчислити кут і вивести правильний 
результат, згідно з математичними обчисленнями. 
Автоматизація тестування дозволяє значно скоротити час і ресурси, що 
витрачаються на перевірку функціональності програм. Інструменти автоматизації 
можуть використовуватися для регулярного запуску тестів, перевірки результатів і 
фіксації дефектів без участі тестувальників. 
Серед популярних інструментів для автоматизації тестування можна виділити: 
• Selenium — для автоматизації тестування веб-додатків. 
• JUnit — для модульного тестування Java-додатків. 
43 
• TestNG — для паралельного виконання тестів та більш гнучкого 
налаштування тестових середовищ. 
• Postman — для тестування API [22]. 
Використання автоматизованих інструментів значно підвищує ефективність 
тестування, дозволяючи регулярно перевіряти функціональність програми при зміні її 
версій або додаванні нових функцій. 
Функціональне тестування є критично важливою частиною процесу розробки 
програмного забезпечення. Воно дозволяє забезпечити відповідність програми 
вимогам та покращити якість кінцевого продукту. Тестування також дозволяє виявити 
помилки та дефекти на ранніх етапах розробки, що значно знижує витрати на 
виправлення помилок у майбутньому. 
Інструменти автоматизації тестування дозволяють підвищити ефективність 
процесу тестування, знижуючи час та витрати, а також забезпечуючи більшу точність 
та стабільність результатів. 
Функціональне тестування є важливим етапом у процесі розробки програмного 
забезпечення, оскільки воно дозволяє перевірити, чи відповідає програма вимогам, 
визначеним на етапі проектування. Це тестування забезпечує коректність виконання 
функцій, виявлення помилок та дефектів, а також підтверджує відповідність 
програмного забезпечення вимогам замовника. 
Методи функціонального тестування, зокрема модульне, інтеграційне, системне 
та приймальне тестування, дозволяють детально перевірити як окремі частини 
програми, так і всю систему в цілому. Процес тестування включає аналіз вимог, 
розробку тестових випадків, виконання тестів, аналіз результатів і звітність, що дає 
змогу виявити можливі помилки на ранніх етапах розробки [23]. 
Важливим аспектом є автоматизація тестування, яка дозволяє значно скоротити 
час на перевірку функціональності, підвищити точність результатів і забезпечити 
стабільність при зміні версій програмного забезпечення. Інструменти автоматизації, 
44 
такі як Selenium, JUnit, TestNG та Postman, ефективно підтримують процес 
тестування, дозволяючи регулювати тестові середовища і забезпечувати регулярну 
перевірку. 
Функціональне тестування дозволяє не тільки забезпечити відповідність 
програми вимогам, але й виявити дефекти на ранніх етапах розробки, що знижує 
витрати на виправлення помилок у майбутньому. Це критично важливо для 
підвищення якості кінцевого продукту та забезпечення його ефективної роботи в 
реальних умовах використання. 
 
3.2 Оптимізація та вдосконалення 
Оптимізація та вдосконалення автоматизованої системи виміру кутової відстані 
є важливими етапами в її розвитку, спрямованими на підвищення ефективності, 
точності та зручності використання. Ці процеси включають удосконалення алгоритмів 
обробки даних, інтеграцію нових технологій та адаптацію системи до змінюваних 
умов експлуатації. 
Одним із основних напрямків вдосконалення є оптимізація алгоритмів обробки 
вимірювальних даних. Це може включати покращення точності обчислень шляхом 
використання більш точних математичних моделей та методів обчислення для 
зменшення похибок вимірювань. Зменшення часу обробки даних є важливим 
аспектом, особливо коли система працює в реальному часі, тому оптимізація 
алгоритмів для швидшої обробки великих обсягів даних є важливим кроком. 
Інтеграція методів фільтрації для зменшення впливу випадкових помилок та шумів у 
вимірюваннях також є необхідною. 
Інтеграція нових технологій може значно підвищити ефективність системи. 
Використання штучного інтелекту та машинного навчання може бути застосовано для 
автоматичного виявлення аномалій у вимірюваннях і адаптації системи до 
змінюваних умов. Це дозволяє зменшити людську участь і підвищити точність 
45 
обчислень. Інтеграція з іншими автоматизованими системами забезпечить обмін 
даними та координацію дій між різними системами. Розробка мобільних додатків для 
віддаленого доступу і моніторингу роботи системи дозволить користувачам зручніше 
працювати з програмою. 
Система повинна бути гнучкою та адаптивною до змінюваних умов 
експлуатації. Забезпечення стабільної роботи системи в різних умовах, таких як зміни 
температури, вологості та освітленості, є важливим аспектом її надійності. Модульна 
архітектура дає можливість легко додавати нові функції та масштабувати систему 
відповідно до потреб. Також важливо впровадити заходи для захисту даних від 
несанкціонованого доступу і забезпечити їх цілісність, що зробить систему безпечною 
і надійною. 
Після впровадження змін необхідно провести ретельне тестування та валідацію 
системи. Це включає перевірку коректності виконання всіх функцій системи, оцінку 
здатності працювати під високими навантаженнями і перевірку взаємодії з іншими 
програмними та апаратними засобами. 
Після впровадження вдосконалень потрібно провести оцінку їх ефективності. 
Це включає аналіз показників продуктивності, таких як швидкість обробки даних і 
точність вимірювань. Збір відгуків користувачів дозволяє виявити проблеми і 
можливості для подальшого вдосконалення. Порівняння з попередніми версіями 
допоможе оцінити покращення в порівнянні з попередніми версіями системи. 
Впровадження цих заходів дозволить значно підвищити ефективність та 
надійність автоматизованої системи виміру кутової відстані, забезпечуючи її 
відповідність сучасним вимогам і стандартам [24]. 
Оптимізація та вдосконалення програмного коду є важливим етапом для 
покращення ефективності, швидкості та зручності використання автоматизованої 
системи виміру кутової відстані. Враховуючи існуючий код, є кілька аспектів, які 
можна покращити, щоб підвищити ефективність та точність системи. 
46 
Одним із напрямків є оптимізація обчислень і скорочення часу обробки. 
Враховуючи, що система використовує методи обчислення кута на основі 
триангуляції та фазової різниці, можна оптимізувати ці алгоритми для зменшення 
часу обробки. Наприклад, можна використовувати більш ефективні математичні 
функції або спрощувати деякі етапи обчислень, де це можливо. 
Ще одним важливим аспектом є покращення обробки помилок та валідації 
введених даних. Зараз в коді є перевірка на числові значення, але можна додати 
додаткові перевірки для кожного з введених параметрів. Наприклад, слід перевіряти 
діапазони значень для кожного параметра, щоб уникнути введення від’ємних значень 
для відстаней або занадто малих значень для довжини хвилі. 
Для забезпечення більшої гнучкості системи можна додати можливість вибору 
нових методів обчислення кута. Це дозволить користувачам адаптувати систему під 
специфіку задачі і обирати методи в залежності від точності вимірювань або інших 
критеріїв. 
Оптимізація роботи з файлами є ще одним важливим напрямом. Можна 
реалізувати асинхронне записування даних у CSV файл, щоб не блокувати інтерфейс 
користувача під час збереження результатів. Це дозволить підвищити продуктивність 
системи, особливо при роботі з великими обсягами даних. Крім того, можна додати 
функціональність відкриття файлу безпосередньо після його збереження, що зробить 
роботу з результатами більш зручною. Також варто додати можливість вибору шляху 
збереження файлів. 
Інтерфейс користувача можна вдосконалити, додавши більше візуальних 
підказок для спрощення використання програми. Наприклад, можна додати 
індикатори, які б показували коректність введених даних, або візуальні елементи, які 
полегшать користування, такі як динамічні підказки під час введення даних. 
Для покращення підтримуваності коду, можна розділити функціональність на 
менші модулі, що дозволить краще організувати код і зробити його більш зрозумілим 
47 
для майбутніх розробників. Наприклад, функції обчислення кута можна винести в 
окремі класи або сервіси. 
Також варто реалізувати систему логування для виявлення проблем у роботі 
програми. Це дозволить зберігати інформацію про помилки та проблеми з виконанням 
і допоможе при їх виправленні в майбутньому. 
Ці вдосконалення зроблять програму більш ефективною, зручною та надійною, 
підвищуючи її продуктивність і зручність для користувачів. 
Оптимізація та вдосконалення автоматизованої системи виміру кутової відстані 
є критичними етапами для досягнення високої точності, ефективності та зручності 
використання. Удосконалення алгоритмів обробки даних, інтеграція нових технологій 
та адаптація до змінюваних умов експлуатації сприяють поліпшенню роботи системи. 
Підвищення точності обчислень через використання нових математичних моделей та 
скорочення часу обробки даних дозволяє системі працювати ефективно навіть при 
великих обсягах вимірювань. 
Інтеграція сучасних технологій, таких як штучний інтелект та машинне 
навчання, дозволяє системі автоматично виявляти аномалії та адаптуватися до 
змінних умов, що знижує людську участь і покращує точність. Крім того, важливим 
аспектом є гнучкість системи, яка дозволяє додавати нові методи обчислення та 
інтегрувати систему з іншими автоматизованими рішеннями. 
Оптимізація програмного коду, покращення обробки помилок та валідації 
введених даних підвищує надійність системи, робить її більш стійкою до помилок 
користувачів та забезпечує правильність обчислень. Додавання можливості вибору 
нових методів обчислення кута і вдосконалення роботи з файлами (асинхронне 
збереження даних, можливість вибору шляху збереження файлів) робить програму 
більш зручною і продуктивною. 
Крім того, вдосконалення інтерфейсу користувача та підтримка системи за 
допомогою логування дозволяють підвищити зручність і стабільність роботи 
48 
програми, роблячи її більш доступною для користувачів та легшою для майбутнього 
обслуговування. 
Загалом, ці вдосконалення сприятимуть значному підвищенню ефективності та 
надійності автоматизованої системи виміру кутової відстані, забезпечуючи її 
відповідність сучасним вимогам і стандартам, а також покращуючи досвід 
користувачів. 
 
3.3 Створення документації 
Документація є важливим елементом будь-якої автоматизованої системи, 
оскільки вона забезпечує користувачів та розробників необхідною інформацією для 
ефективного використання та підтримки системи. У випадку автоматизованої системи 
виміру кутової відстані, документація повинна охоплювати технічні, користувацькі та 
супутні аспекти системи. 
Технічна документація включає опис архітектури системи, її компонентів, 
алгоритмів обробки даних та взаємодії між модулями. Вона містить схеми 
архітектури, які демонструють взаємозв'язки між компонентами, а також детальний 
опис алгоритмів, що використовуються для обробки даних. Документація повинна 
включати також опис інтерфейсів, що вказує на вхідні та вихідні дані, формати файлів 
та протоколи обміну інформацією між модулями. Окрім цього, важливо включити 
інструкції з налаштування, які покроково пояснюють, як правильно встановити та 
налаштувати програмне забезпечення та апаратні засоби. 
Користувацька документація призначена для кінцевих користувачів системи. 
Вона включає керівництво користувача, яке пояснює, як запускати програму, вводити 
дані, інтерпретувати результати та використовувати додаткові функції. Крім того, 
необхідно навести приклади використання, де будуть конкретні сценарії з вхідними 
даними та очікуваними результатами, щоб користувачі могли краще зрозуміти, як 
працює система. Для зручності користувачів важливо також надати розділ допомоги, 
49 
в якому будуть відповіді на поширені запитання та рекомендації щодо усунення 
типових проблем. 
Супутня документація охоплює додаткові матеріали, корисні для користувачів 
та розробників. Вона включає технічні умови, що описують вимоги до апаратного та 
програмного забезпечення, необхідного для роботи системи. Також важливо створити 
плани тестування, що описують методи та сценарії тестування для перевірки 
функціональності та надійності системи, а також звіти про тестування, які містять 
результати проведених тестів, виявлені дефекти та рекомендації щодо їх усунення. 
Журнали змін також повинні бути частиною супутньої документації, оскільки вони 
містять історію змін у програмному забезпеченні, включаючи виправлення помилок 
та оновлення функціональності. 
Документація повинна бути оформлена відповідно до стандартів, що 
забезпечують її зручність для сприйняття та використання. Важливо використовувати 
стилі для структурування тексту, застосовувати заголовки, підзаголовки, списки та 
інші елементи форматування для зручності читання. Вставка графічних об'єктів, таких 
як схеми, діаграми та знімки екрана, допоможе краще пояснити описані процеси та 
інтерфейси. Використання таблиць для представлення структурованої інформації, 
наприклад, параметрів налаштувань або результатів тестування, дозволить 
користувачам швидше знайти необхідну інформацію. Перевірка орфографії та 
граматики документації є важливою для уникнення непорозумінь. Також варто 
створити зміст та індексацію для швидкого доступу до важливої інформації. 
Використання цих методів дозволяє створити документацію, яка буде корисною 
та зручною для користувачів і розробників, сприяючи ефективному використанню та 
підтримці автоматизованої системи виміру кутової відстані. 
Документація для програми має бути структурованою і включати в себе такі 
основні компоненти: опис функціональності, пояснення коду, коментарі до функцій 
та методів, а також інструкції для налаштування і використання [25].  
50 
У класі Form1 визначено всі основні функції програми. Це форма, яка містить 
основні елементи інтерфейсу, такі як кнопки, текстові поля та комбіновані списки. 
Опис кожного методу в класі дає змогу зрозуміти, яку задачу він вирішує, і як 
користувач взаємодіє з програмою. 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
        InitializeComponent(); 
    } 
Документація: 
• Клас Form1 відповідає за ініціалізацію форми програми та взаємодію з 
користувачем. 
• В конструкторі Form1() викликається метод InitializeComponent(), який 
відповідає за ініціалізацію компонентів інтерфейсу користувача. 
2. Метод IsNumeric 
Цей метод відповідає за перевірку, чи є введене значення числовим. 
csharp 
Копіювати 
private bool IsNumeric(string value) 
{ 
    double result; 
    return double.TryParse(value, out result); 
} 
Документація: 
• Метод IsNumeric перевіряє, чи є передане значення числом. 
51 
• Використовує метод TryParse, який намагається конвертувати рядок в 
числове значення. 
• Якщо конвертація успішна, метод повертає true, в іншому випадку — 
false. 
3. Обробка події button1_Click 
Цей метод викликається при натисканні на кнопку. Він перевіряє введення 
даних, виконує розрахунки та відображає результат. 
private void button1_Click(object sender, EventArgs e) 
{ 
    try 
    { 
        if (string.IsNullOrEmpty(txtDistance1.Text) || 
string.IsNullOrEmpty(txtDistance2.Text) || 
            string.IsNullOrEmpty(txtBaseDistance.Text) || 
string.IsNullOrEmpty(txtWavelength.Text) || 
            cmbMethod.SelectedItem == null) 
        { 
            MessageBox.Show("Будь ласка, заповніть всі поля.", "Помилка 
вводу", MessageBoxButtons.OK, MessageBoxIcon.Error); 
            return; 
        } 
 
        if (!IsNumeric(txtDistance1.Text) || !IsNumeric(txtDistance2.Text) || 
            !IsNumeric(txtBaseDistance.Text) || !IsNumeric(txtWavelength.Text)) 
        { 
            MessageBox.Show("Введіть лише числові значення.", "Помилка 
вводу", MessageBoxButtons.OK, MessageBoxIcon.Error); 
52 
            return; 
        } 
 
        double distance1 = Convert.ToDouble(txtDistance1.Text);  
        double distance2 = Convert.ToDouble(txtDistance2.Text);  
        double baseDistance = Convert.ToDouble(txtBaseDistance.Text);  
        double wavelength = Convert.ToDouble(txtWavelength.Text); 
 
        string selectedMethod = cmbMethod.SelectedItem.ToString(); 
 
        double angle = 0; 
 
        if (selectedMethod == "Триангуляція") 
        { 
            angle = CalculateAngle(distance1, distance2, baseDistance); 
        } 
        else if (selectedMethod == "Фазова різниця") 
        { 
            angle = CalculatePhaseDifferenceAngle(distance1, distance2, 
baseDistance, wavelength); 
        } 
 
        lblResult.Text = "Кут: " + angle.ToString("F2") + "°"; 
        SaveResultToCSV(distance1, distance2, baseDistance, angle); 
    } 
    catch (Exception ex) 
    { 
53 
        MessageBox.Show("Помилка вводу: " + ex.Message); 
    } 
} 
Документація: 
• Метод button1_Click обробляє подію натискання на кнопку. 
• Спочатку перевіряється, чи всі поля введення заповнені. Якщо ні, 
виводиться повідомлення про помилку. 
• Далі перевіряється, чи введені значення є числовими за допомогою 
методу IsNumeric. 
• Потім здійснюються розрахунки кута в залежності від обраного методу: 
"Триангуляція" або "Фазова різниця". 
• Результат виводиться на екран, і збереження результатів здійснюється в 
CSV файл. 
4. Метод SaveResultToCSV 
Цей метод відповідає за збереження результатів обчислень у CSV файл. 
private void SaveResultToCSV(double distance1, double distance2, double 
baseDistance, double angle) 
{ 
    string filePath = Path.Combine(Application.StartupPath, 
"measurement_results.csv"); 
 
    string data = $"{distance1},{distance2},{baseDistance},{angle}\n"; 
 
    if (!File.Exists(filePath)) 
    { 
        File.WriteAllText(filePath, "Distance1,Distance2,BaseDistance,Angle\n"); 
    } 
54 
} 
Документація: 
• Метод SaveResultToCSV відповідає за запис результатів вимірювань у 
CSV файл. 
• Файл створюється, якщо його ще не існує, і в нього записуються нові дані. 
• Шлях до файлу обчислюється відносно папки, де розташована програма. 
5. Алгоритм обчислення кута за допомогою триангуляції та фазової різниці 
Методи CalculateAngle і CalculatePhaseDifferenceAngle відповідають за 
обчислення кута в залежності від вибраного методу. 
private double CalculateAngle(double distance1, double distance2, double 
baseDistance) 
{ 
    double angleRad = Math.Acos((Math.Pow(distance1, 2) + Math.Pow(distance2, 
2) - Math.Pow(baseDistance, 2)) / (2 * distance1 * distance2)); 
    double angleDeg = angleRad * (180 / Math.PI); 
    return angleDeg; 
} 
 
private double CalculatePhaseDifferenceAngle(double distance1, double distance2, 
double baseDistance, double wavelength) 
{ 
    double deltaPhi = (2 * Math.PI * Math.Abs(distance1 - distance2)) / wavelength; 
    double angleRad = Math.Asin(deltaPhi / (2 * Math.PI)); 
    double angleDeg = angleRad * (180 / Math.PI); 
    return angleDeg; 
} 
Документація: 
55 
• Метод CalculateAngle використовує формулу косинуса для обчислення 
кута між двома відстанями. 
• Метод CalculatePhaseDifferenceAngle обчислює кут на основі різниці фаз 
між двома відстанями за допомогою довжини хвилі. 
Описана документація реалізує автоматизовану систему для обчислення кутової 
відстані між двома точками з використанням різних методів (триангуляція та фазова 
різниця). Вся логіка програми описана через функції, що забезпечують перевірку 
вводу, обчислення кута, збереження результатів та виведення їх на екран. Створення 
документації для кожного методу та класу допоможе іншим розробникам або 
користувачам краще зрозуміти, як працює програма, та ефективно використовувати її 
функціональність. 
 
 
 
 
  
56 
ВИСНОВКИ 
У дипломній роботі було розглянуто комплексний процес розробки 
автоматизованої системи виміру кутової відстані. На всіх етапах роботи приділялася 
увага важливим аспектам, таким як аналіз вимог, проектування системи, розробка 
програмного забезпечення, тестування, оптимізація та створення документації. 
Спочатку було здійснено ретельний аналіз вимог до системи, що дозволило 
чітко визначити функціональні характеристики, яких необхідно досягти. Це стало 
основою для проектування та подальшої розробки. Після цього було розроблено 
програмне забезпечення, яке включає математичні моделі для обчислення кута між 
точками за допомогою двох основних методів: триангуляції та фазової різниці. У 
процесі розробки були створені всі необхідні модулі програми, а також забезпечено 
інтерфейс користувача, який відповідає вимогам зручності та доступності. 
Одним із важливих етапів стало впровадження системи обробки помилок і 
перевірки введених даних. Це дозволило забезпечити стабільну роботу програми, 
зменшити ймовірність некоректних результатів і підвищити надійність системи. 
Важливою частиною роботи була перевірка функціональності програми, що включала 
тестування кожної функції та перевірку взаємодії між компонентами програми. 
Результати тестування підтвердили, що система працює відповідно до вимог і 
стабільно виконує свої функції. 
У процесі вдосконалення системи були виявлені можливості для оптимізації 
алгоритмів обчислень та зменшення часу обробки даних. Це дозволило значно 
підвищити ефективність системи, особливо при роботі в реальному часі. 
Вдосконалення не обмежувалося лише алгоритмічною частиною, а також включало 
оптимізацію взаємодії користувача з програмою, поліпшення інтерфейсу та додавання 
функцій, що підвищують зручність роботи. 
Документація стала важливою частиною роботи, оскільки вона не тільки описує 
всі функції програми, але й допомагає користувачам розуміти її можливості, методи 
57 
використання та алгоритми. Це сприяє кращому засвоєнню програмного продукту та 
полегшує підтримку і адаптацію програми в майбутньому. 
Загалом, розробка автоматизованої системи виміру кутової відстані виявилась 
успішною. Програма демонструє високу точність обчислень і зручність використання 
завдяки продуманій архітектурі та оптимізації алгоритмів. Всі етапи роботи були 
завершені згідно з планом, а результати тестування та документації підтвердили 
стабільність і надійність системи, що робить її готовою для використання в реальних 
умовах. 
  
58 
ПЕРЕЛІК ПОСИЛАНЬ 
1. Y. Zhu and X. Zhu, "CACam: Consecutive Angular Measurements with 
Camera on Smartphone for Distance Estimation," 2022 IEEE 28th International Conference 
on Parallel and Distributed Systems (ICPADS), Nanjing, China, 2023, pp. 73-80, doi: 
10.1109/ICPADS56603.2022.00018 (дата звернення: 25.04.2025).  
2. D. Marioli, E. Sardini and A. Taroni, "Ultrasonic distance measurement for 
linear and angular position control," in IEEE Transactions on Instrumentation and 
Measurement, vol. 37, no. 4, pp. 578-581, Dec. 1988, doi: 10.1109/19.9817  
3. Wu, Y., Li, X., Liu, F., & Xia, G. (2019). An On-Orbit Dynamic Calibration 
Method for an MHD Micro-Angular Vibration Sensor Using a Laser Interferometer. Sensors 
(Basel, Switzerland), 19(19), 4291. https://doi.org/10.3390/s19194291 (дата звернення: 
25.04.2025). 
4. Liu, F., Su, Z., Zhao, H., Li, Q., & Li, C. (2019). Attitude Measurement for 
High-Spinning Projectile with a Hollow MEMS IMU Consisting of Multiple Accelerometers 
and Gyros. Sensors (Basel, Switzerland), 19(8), 1799. https://doi.org/10.3390/s19081799 
(дата звернення: 25.04.2025). 
5. Gießler, M., Werth, J., Waltersberger, B., & Karamanidis, K. (2024). A 
wearable sensor and framework for accurate remote monitoring of human 
motion. Communications Engineering, 3, 20. https://doi.org/10.1038/s44172-024-00168-6 
(дата звернення: 25.04.2025). 
6. Lu, W., Xue, J., Pu, W., Chen, H., Wang, K., & Jia, R. (2024). A Calculation 
Method of Bearing Balls Rotational Vectors Based on Binocular Vision Three-Dimensional 
Coordinates Measurement. Sensors (Basel, Switzerland), 24(19), 6499. 
https://doi.org/10.3390/s24196499 (дата звернення: 25.04.2025). 
7. Yamada, A., Furue, H., & Gu, J. G. (2022). Angular Tuning Properties of Low 
Threshold Mechanoreceptors in Isolated Rat Whisker Hair Follicles. eNeuro, 9(6), 
59 
ENEURO.0175-22.2022. https://doi.org/10.1523/ENEURO.0175-22.2022 (дата 
звернення: 25.04.2025). 
8. Mi, J., Li, J., Zhang, X., Feng, K., Hu, C., Wei, X., & Yuan, X. (2020). Roll 
Angular Rate Measurement for High Spinning Projectiles Based on Redundant Gyroscope 
System. Micromachines, 11(10), 940. https://doi.org/10.3390/mi11100940 
9. Marquez, J. M., Bohórquez, M. Á., Garcia, J. M., & Nieto, F. J. (2010). A new 
automatic system for angular measurement and calibration in radiometric 
instruments. Sensors (Basel, Switzerland), 10(4), 3703–3717. 
https://doi.org/10.3390/s100403703 (дата звернення: 25.04.2025). 
10. Go, D., Freimuth, F., Hanke, J. P., Xue, F., Gomonay, O., Lee, K. J., Blügel, 
S., Haney, P. M., Lee, H. W., & Mokrousov, Y. (2020). Theory of Current-Induced Angular 
Momentum Transfer Dynamics in Spin-Orbit Coupled Systems. Physical review 
research, 2(3), 10.1103/physrevresearch.2.033401. 
https://doi.org/10.1103/physrevresearch.2.033401 (дата звернення: 25.04.2025). 
11. Xing, L., Tu, X., Qian, W., Chen, Z., & Yang, Q. (2019). Performance 
Enhancement Method for Angular Rate Measurement Based on Redundant MEMS IMUs. 
Micromachines, 10(8), 514. https://doi.org/10.3390/mi10080514 
12. Deng, D., Zhao, H., Ni, J., Li, Y., & Qiu, C. W. (2021). A phase-to-intensity 
strategy of angular velocity measurement based on photonic orbital angular momentum. 
Nanophotonics (Berlin, Germany), 11(4), 865–872. https://doi.org/10.1515/nanoph-2021-
0461 (дата звернення: 25.04.2025). 
13. He, C., Luo, J., Xu, Z., Wang, Z., Zhao, Z., Wu, Z., & Jiao, Z. (2024). 
Rectangular Improvement Method for Plan View Pattern of Plates During the Angular 
Rolling Process. Materials (Basel, Switzerland), 17(23), 5964. 
https://doi.org/10.3390/ma17235964 (дата звернення: 25.04.2025). 
14. Park, S. C., Bang, H. S., & Seong, W. J. (2020). Effects of Material Properties 
on Angular Distortion in Wire Arc Additive Manufacturing: Experimental and 
60 
Computational Analyses. Materials (Basel, Switzerland), 13(6), 1399. 
https://doi.org/10.3390/ma13061399 (дата звернення: 25.04.2025). 
15. Xu, W., Chen, Y. W., Nagatomo, K., Liu, Y., Zhou, J., Dard, M., & Shen, I. Y. 
(2024). Development of an Angular Stiffness Sensor to Measure Dental Implant Stability In 
Vitro. Sensors (Basel, Switzerland), 24(21), 6959. https://doi.org/10.3390/s24216959 (дата 
звернення: 25.04.2025). 
16. Yang, S., Xu, Y., Xu, Y., Ma, T., Wang, H., Hou, J., Liu, D., & Shen, H. (2022). 
A Novel Method for Detecting the Two-Degrees-of-Freedom Angular Displacement of a 
Spherical Pair, Based on a Capacitive Sensor. Sensors (Basel, Switzerland), 22(9), 3437. 
https://doi.org/10.3390/s22093437 (дата звернення: 25.04.2025). 
17. Xu, F., Qiao, D., Xia, C., Song, X., Zheng, W., He, Y., & Fan, Q. (2022). 
Reconfigurable Angular Resolution Design Method in a Separate-Axis Lissajous Scanning 
MEMS LiDAR System. Micromachines, 13(3), 353. https://doi.org/10.3390/mi13030353 
(дата звернення: 25.04.2025). 
18. Jing, Z., Li, J., Zhang, X., Feng, K., & Zheng, T. (2019). A Novel Rotation 
Scheme for MEMS IMU Error Mitigation Based on a Missile-Borne Rotation Semi-
Strapdown Inertial Navigation System. Sensors (Basel, Switzerland), 19(7), 1683. 
https://doi.org/10.3390/s19071683 (дата звернення: 25.04.2025). 
19. Zhang, J., Li, J., Zhang, X., Che, X., Huang, Y., & Feng, K. (2018). Analysis 
and Compensation of Modulation Angular Rate Error Based on Missile-Borne Rotation 
Semi-Strapdown Inertial Navigation System. Sensors (Basel, Switzerland), 18(5), 1430. 
https://doi.org/10.3390/s18051430 (дата звернення: 25.04.2025). 
20. Zhang, C., Li, J., Yuan, X., Zhang, X., Wei, X., Feng, K., Hu, C., Zhang, D., & 
Jiao, Y. (2022). Optimal Rotational Angular Velocity Determination Method Based on 
Compound Rotary Semi-Strapdown Inertial Navigation System. Sensors (Basel, 
Switzerland), 22(12), 4583. https://doi.org/10.3390/s22124583 (дата звернення: 
25.04.2025). 
61 
21. Детальний аналіз функціонального тестування. URL: 
https://testmatick.com/uk/detalnyj-analiz-funkczionalnogo-te/ (дата звернення: 
25.04.2025). 
22. Підготовка звіту про тестування сайту. URL: 
https://pns.hneu.edu.ua/pluginfile.php/888133/mod_resource/content/1/%D0%9B%D0%B
0%D0%B1%D0%BE%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%BD%D0%B
0%20%D1%80%D0%BE%D0%B1%D0%BE%D1%82%D0%B0%203%20%D0%9F%D
1%96%D0%B4%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D0%BA%D0%B0%2
0%D0%B7%D0%B2%D1%96%D1%82%D1%83%20%D0%BF%D1%80%D0%BE%20
%D1%82%D0%B5%D1%81%D1%82%D1%83%D0%B2%D0%B0%D0%BD%D0%BD
%D1%8F%20%D1%81%D0%B0%D0%B9%D1%82%D1%83.pdf (дата звернення: 
25.04.2025). 
23. Що таке функціональне тестування? Типи, приклади, контрольний список 
і впровадження. URL: https://www.zaptest.com/uk/%D1%89%D0%BE-
%D1%82%D0%B0%D0%BA%D0%B5-
%D1%84%D1%83%D0%BD%D0%BA%D1%86%D1%96%D0%BE%D0%BD%D0%B0
%D0%BB%D1%8C%D0%BD%D0%B5-
%D1%82%D0%B5%D1%81%D1%82%D1%83%D0%B2%D0%B0%D0%BD%D0%BD
%D1%8F-%D1%82%D0%B8%D0%BF (дата звернення: 25.04.2025). 
24. Вдосконалення та оптимізація процесів при обробці PCBA. URL: 
https://uk.unixplore-pcba.com/news-show-17343.html (дата звернення: 25.04.2025). 
25. Основні етапи створення документа. URL: 
https://stud.com.ua/43390/informatika/osnovni_etapi_stvorennya_dokumenta (дата 
звернення: 25.04.2025). 
  
62 
ДОДАТОК 
using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.IO; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.Windows.Forms.DataVisualization.Charting; 
 
namespace WindowsFormsApp13 
{ 
    public partial class Form1 : Form 
    { 
        public Form1() 
        { 
            InitializeComponent(); 
  
        } 
        // Метод для перевірки, чи є введене значення числом 
        private bool IsNumeric(string value) 
        { 
            double result; 
            return double.TryParse(value, out result); 
        } 
        private void button1_Click(object sender, EventArgs e) 
        { 
            try 
            { 
                // Перевірка, чи всі поля заповнені 
                if (string.IsNullOrEmpty(txtDistance1.Text) || 
string.IsNullOrEmpty(txtDistance2.Text) || 
                    string.IsNullOrEmpty(txtBaseDistance.Text) || 
string.IsNullOrEmpty(txtWavelength.Text) || 
                    cmbMethod.SelectedItem == null) 
                { 
                    MessageBox.Show("Будь ласка, заповніть всі поля.", "Помилка вводу", 
MessageBoxButtons.OK, MessageBoxIcon.Error); 
                    return; 
                } 
                // Перевірка, чи введені значення є числовими 
                if (!IsNumeric(txtDistance1.Text) || !IsNumeric(txtDistance2.Text) || 
                    !IsNumeric(txtBaseDistance.Text) || !IsNumeric(txtWavelength.Text)) 
                { 
                    MessageBox.Show("Введіть лише числові значення.", "Помилка вводу", 
MessageBoxButtons.OK, MessageBoxIcon.Error); 
                    return; 
                } 
                double distance1 = Convert.ToDouble(txtDistance1.Text); // Відстань від 
першої точки до об'єкта 
                double distance2 = Convert.ToDouble(txtDistance2.Text); // Відстань від 
другої точки до об'єкта 
                double baseDistance = Convert.ToDouble(txtBaseDistance.Text); // Відстань 
між точками спостереження 
63 
                double wavelength = Convert.ToDouble(txtWavelength.Text); // Довжина хвилі, 
яку вводить користувач 
 
                string selectedMethod = cmbMethod.SelectedItem.ToString(); // Вибір методу 
вимірювання 
 
                double angle = 0; 
 
                // Вибір методу обчислення кута 
                if (selectedMethod == "Триангуляція") 
                { 
                    angle = CalculateAngle(distance1, distance2, baseDistance); 
                } 
                else if (selectedMethod == "Фазова різниця") 
                { 
                    // Метод фазової різниці (простіше для прикладу) 
                    angle = CalculatePhaseDifferenceAngle(distance1, distance2, 
baseDistance, wavelength); 
                } 
 
                // Виведення результату 
                lblResult.Text = "Кут: " + angle.ToString("F2") + "°"; 
                 // Збереження результату в CSV файл 
                SaveResultToCSV(distance1, distance2, baseDistance, angle); 
            } 
            catch (Exception ex) 
            { 
                MessageBox.Show("Помилка вводу: " + ex.Message); 
            } 
        } 
        
 
        private void Form1_Load(object sender, EventArgs e) 
        { 
            // Ініціалізація значень за замовчуванням 
           
            // Додавання методів у ComboBox 
            cmbMethod.Items.Add("Триангуляція"); 
            cmbMethod.Items.Add("Фазова різниця"); 
            cmbMethod.SelectedIndex = 0; // Встановлюємо метод за замовчуванням 
         } 
      
        private void SaveResultToCSV(double distance1, double distance2, double 
baseDistance, double angle) 
        { 
            // Отримуємо шлях до папки, де знаходиться виконуваний файл 
            string filePath = Path.Combine(Application.StartupPath, 
"measurement_results.csv"); 
 
            // Дані для запису 
            string data = $"{distance1},{distance2},{baseDistance},{angle}\n"; 
 
            // Перевірка, чи існує файл 
            if (!File.Exists(filePath)) 
            { 
                // Якщо файл не існує, створюємо новий з заголовками 
                File.WriteAllText(filePath, "Distance1,Distance2,BaseDistance,Angle\n"); 
            } 
        } 
 
64 
        private double CalculateAngle(double distance1, double distance2, double 
baseDistance) 
        { 
            double angleRad = Math.Acos((Math.Pow(distance1, 2) + Math.Pow(distance2, 2) - 
Math.Pow(baseDistance, 2)) / 
                                       (2 * distance1 * distance2)); 
            double angleDeg = angleRad * (180 / Math.PI); 
            return angleDeg; 
        } 
 
        // Алгоритм для обчислення кута за допомогою фазової різниці 
        private double CalculatePhaseDifferenceAngle(double distance1, double distance2, 
double baseDistance, double wavelength) 
        { 
            // Обчислюємо різницю фаз 
            double deltaPhi = (2 * Math.PI * Math.Abs(distance1 - distance2)) / wavelength; 
 
            // Обчислюємо кут на основі фазової різниці 
            double angleRad = Math.Asin(deltaPhi / (2 * Math.PI)); 
 
            // Перетворення радіан в градуси 
            double angleDeg = angleRad * (180 / Math.PI); 
            return angleDeg; 
        } 
 
        private void txtDistance1_TextChanged(object sender, EventArgs e) 
        { 
 
        } 
    } 
}