Розробка програми фільтраціі шуму за допомогою сплайнів
Методи первинної обробки даних - згладжування та характеристика сплайнів. Загальна характеристика об'єктно-орієнтованої мови Java. Принципи побудови графічного інтерфейсу. Розробка алгоритму програми та інтерфейсу користувача програмного продукту.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | украинский |
Дата добавления | 10.10.2013 |
Размер файла | 3,3 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Основні характеристики NetBeans IDE:
· Робоча область середовища IDE повністю налаштовується - існує можливість користувацької настройки дій, що виконуються з допомогою панелі, призначення "гарячих" клавіш і т.д.
· IDE має в своєму складі розширений багатомовний редактор для різноманітних мов програмування - Java, C/C++, Ruby, Groovy, PHP, JavaScript, CSS, XML, HTML, RHTML, JSP, документацію Javadoc. Існує можливість розширення функцій редактору з метою підтримки любої іншої мови.
· Редактор NetBeans робить відступи строк, перевіряє відповідність скобок і слів, підсвічує синтаксис початкового коду.
· Відбувається перевірка помилок під час введення, відображення варіантів для автозакінчення коду і фрагментів документації по вимагаємій мові програмування.
· Редактор може генерувати і вставляти в початковий код стандартні фрагменти коду на Java чи інших мовах.
· Браузер класів дозволяє переглядати ієрархію і структуру любого класу Java - відображаються інтерфейси, базові класи, похідні класи і члени класів.
· Існує можливість переміщення любої вкладки редактора у межах робочого середовища IDE і за її межі, створюючи незалежне вікно, яке можна перемістити на другий екран.
· Можливість групування зв'язаних проектів - створюючи групи проектів, можна швидко відкривати і закривати декілька згрупованих проектів одночасно.
· Розширені можливості для виконання контекстно-залежного пошуку по всьому середовищі IDE, довідковим матеріалам і всім відкритим проектам і файлам.
· Існує можливість створення проектів у вільному форматі чи починати роботу з проектом із шаблону. В комплекті з середовищем IDE поставляються шаблони і приклади проектів для додатків Java SE, мобільних, веб-додатків і додатків рівня підприємства, додатків JavaFX, підключаємих модулів NetBeans, додатків Groovy, PHP, C/C++, Ruby і Ruby on Rails.
· NetBeans IDE є платформою для побудови десктоп додатків з функціональним користувацьким інтерфейсом, так як представляє з себе фреймворк до Java бібліотек Swing.
· NetBeans має вбудовану підтримку CVS, Mercurial і Subversion. Для перегляду змін використовується редактор з кольоровими позначеннями.
Можливості програмування в NetBeans:
· Розробка Java десктоп додатків з професійними графічними інтерфейсами користувача. Використовується візуальний редактор - Swing GUI Builder. Робота здійснюється шляхом перетягування елементів графічного інтерфейсу із палітри на полотно. Попереднє позиціювання елементів можна здійснювати з допомогою вказівника миші. Панель властивостей і інспектор компонентів надають можливість тонкого налаштування кожного компонента інтерфейсу.
· Створення веб-додатків і корпоративних додатків у відповідності з стандартами. Середовище NetBeans надає повну піддтримку Java EE 6. Дозволяє розробляти веб-сторінки, сервлети, веб-сервіси, Enterprise Java Beans (EJB), проекти Java EE з використанням JavaServer Faces 2.0 (Facelets), Spring, Struts і Hibernate.
· Програмування на PHP, підтримка всіх супутніх мов програмування, технологій і веб-стандартів. Можливість створювати проекти PHP на основі платформи Zend чи Symfony. Редактор PHP динамічно інтегрований з функціями редагування HTML, JavaScript і CSS. Проекти PHP можуть бути розвернуті з середовища NetBeans на локальному чи видаленому сервері при взаємодії через FTP чи SFTP.
· Можливість створення, тестування, відладки і впровадження приложений, що функціонують на мобільних телефонах, кишенькових комп'ютерах, телеприставках і вбудованих системах. Visual Mobile Designer (VMD) створює всю необхідну модульну інфраструктуру проекту і забезпечує швидку розробку графічних інтерфейсів шляхом перетягування на робочу область компонентів - екран очікування, екран входу в систему, оглядач файлів, середовище складання повідомлень SMS і екран заставки. Можливість створення користувацького інтерфейсу на основ SVG.
· Використання JavaFX Composer для візуального структурування додатків JavaFX з графічним інтерфейсом, аналогічно конструктору GUI Swing для Java десктоп додатків.
· Можливість розробки професійних додатків на мовах C, C++ для різноманітних платформ - Windows, Linux, Mac і Solaris. Підтримуються всі широко використовувані компілятори - GNU, Cygwin і MinGW. Існує можливість установки вимагаємого компілятора, визначень препроцесора, параметрів часу компіляції і т.д.
· Розширені можливості по роботі з базами даних - вбудований клієнт до баз даних - MySQL, Postgres, Oracle і інших, редактор запитів SQL, можливість редагувати таблиці баз даних напряму через редактор таблиць.
· Інтеграція з серверами додатків і контейнерами сервлетів - автоматичне розгортання додатків, керування сервером - запуск, зупинка, перезапуск.
· Багатомовний користувацький інтерфейс з підтримкою російської мови.
· Розширення функціональності з допомогою підключаємих модулів, гнучка система керуваня компонентами, модулями, оновлення і завантаження модулів через інтернет.
Плюси NetBeans IDE:
· Кроссплатформенність
· Малий об'єм
· Простота у використанні
· Авто-закінчення тексту в деяких випадках
· Підтримка CVS
· Корисні функції
· Повністю налаштовуємий інтерфейс
· Для оновлення не вимагається скачувати всю програму заново, достатньо лише прийняти оновлення, коли NetBeans попросить вас це зробити
Мінусы:
· Відсутність інтегрованої підтримки SVN
· Відсутність вбудованої інтерактивної системи довідки по тій мови, для якої ця IDE призначена
· Трохи більше використання пам'яті в виду використання Java
· В деяких випадках авто-завершення тексту пропонує зовсім не те що необхідно.
Розділ 2. Розробка алгоритму програми та інтерфейсу користувача програмного продукту
згладжування сплайн програма інтерфейс
2.1 Вибір структури побудови програми
Була обрана така структура додатку: користувач обирає текстовий файл з даними, які необхідно згладжувати, потім з'являється інформаційне вікно, у якому показано ім'я обраного файлу та кількість даних у ньому. Після натиснення на кнопку "Показати графік" відображається графік кривої з вхідними даними і вікно вибору методу згладжування - методом центра трикутника, уточненим методом чи за допомогою сплайну третього порядку. Після вибору метода згладжування з'являється графік з двома кривими - вхідні дані та згладжені дані.
З вікна вибору метода є доступ до горизонтального меню:
1. Файл
а) Змінити колір фону
б) Вихід
2. Довідка
а) Переглянути довідку
б) Про програму
Оскільки в додатку реалізовано три алгоритми згладжування, то всі проміжні розрахунки зберігати в різних папках, які створюються під час виконання програми без відому користувача.
Так як мова є об'єктно-орієнтованою, то кожне вікно та метод згладжування розглядаємо як об'єкт і реалізуємо за допомогою класів.
2.2 Проектування та створення додатку
2.2.1 Класи та їх призначення
На першому етапі розробки програми необхідно виділити основні класи:
1. Splain - містить метод public static void main(String[] args), в якому розпочинається робота програми. Окрім того тут створюється екземпляри кожного класу.
2. StartFrame - реалізує процес створення стартового вікна
3. OpenFrame - реалізує процес створення вікна з кнопкою для вибору файлу
4. DataFile - реалізує процес створення інформаційного вікна з відображенням ім'ям обраного користувачем файлу та кількість даних у файлі
5. Graphic - реалізує процес створення вікна з відображенням графіку кривої вхідних даних
6. Graphic1 - реалізує процес створення вікна з відображенням графіку кривої вхідних даних та згладжених даних
7. Method - реалізує процес створення вікна вибору методу згладжування і виводить ім'я файлу, куди збереглись згладжені дані для подальшої роботи з ними
8. Help - реалізує процес створення вікна для відображення інформаційних даних для пункту меню "Довідка"
9. Triangle_Method - у цьому класі відбуваються всі необхідні операції для отримання згладжених даних за методом заміни трьох послідовних точок центром тяжіння трикутника з вершинами в цих точках
10. Update_Method - у цьому класі відбуваються всі необхідні операції для реалізації методу згладжування даних більш вищої точності
11. Spline - у цьому класі відбуваються всі необхідні операції для реалізації згладжування за допомогою інтерполяційного сплайну третього порядку.
2.2.2 Діаграма класів
На рис. 2.1. наведена діаграма класів.
2.2.3 Графічне описання алгоритмів згладжування, використаних у програмі
На рис. 2.2. наведена блок-схема алгоритмів методу центру тяжіння трикутників та методу підвищеної точності, реалізація якої описана в ДОДАТКУ А у методі run().
Рисунок 2.2. Блок-схема алгоритмів методу центру тяжіння трикутників та методу підвищеної точності
На рис. 2.3 - 2.5 наведені блок-схеми методів Create(), Sort() та Length() для методів центру тяжіння трикутників і підвищеної точності.
Рисунок 2.3. Блок-схема методу Create()
Рисунок 2.4. Блок-схема методу Sort()
Рисунок 2.5. Блок-схема методу Length()
На рис. 2.6 - 2.7 представлені блок-схеми методів Doopr() та New() для методу центру тяжіння трикутників. На рис. 2.8 - 2.9 представлені аналогічні блок-схеми для методу підвищеної точності.
Рисунок 2.6. Блок-схема методу Doopr() для методу центру тяжіння трикутників
Рисунок 2.7. Блок-схема методу New() для методу центру тяжіння трикутників
Рисунок 2.8. Блок-схема методу New() для методу підвищеної точності
Рисунок 2.9. Блок-схема методу Doopr() для методу підвищеної точності
Рисунок 2.10. Блок-схема методу Solve() для алгоритму побудови сплайну
Рисунок 2.12. Блок-схема методу InitializationВ() |
||
Рисунок 2.11. Блок-схема методу InitializationA() |
2.3 Особливості програмної реалізації програми фільтрації шуму за допомогою сплайнів
2.3.1 Актуальність проблеми
В теперішній час у значно більшій мірі, ніж скажімо 30 чи 50 років тому спостерігається проникнення ідей та методів теорії апроксимації в самі різноманітні області природних наук. Успішно використовуються досягнення теорії апроксимації у прикладних задачах. Значну роль в цьому зіграли досягнення у області обчислювальної техніки, які дають можливість розробляти і впроваджувати у виробництво потужне програмне забезпечення. Цьому сприяє і розвиток наукомістких, високоточних технологій і досягнуті в останні роки успіхи в рішенні екстремальних задач теорії приближення.
В багатьох випадках знайти асимптотично оптимальне рішення кожної з поставлених задач значно легше ніж оптимальне. У реальних же умовах асимптотичні методи приводять практично до тих результатів, що і оптимальні. Багато вчених сучасності переконані, що при подальшому вдосконаленні технології у сторону високоточного виробництва, саме асимптотичним методам буде віддаватися пріоритет. Це пояснюється і тим, що асимптотичні методи значно більше конструктивні і простіші у обчислювальній реалізації, ніж точні методи вирішення (якщо такі взагалі маються).
У роботі задіяне згладжування - метод первинної обробки даних - даних по тій причині, що для побудови сплайну інформація, яка поступає, повинна бути попередньо згладжена. Реалізовано алгоритм для сплайну третього порядку, тому що сплайни мінімального дефекту є найбільш популярними як в математиці, так і в її додатках. При цьому практичні потреби більше ніж на 90% задовольняються сплайнами другого і третього порядку.
Сплайни - порівняно молодий апарат теорії приближення. Їх широке використання стало можливим при появі і розвитку обчислювальної техніки. В цих умовах у повній мірі проявились їх достоїнства. Незабаром сфера їх використання охопила, практично, всі області, де застосовувались обчислювальні методи - теорія апроксимації, чисельні методи рішення диференціальних та інтегральних рівнянь, теорія керування, математична статистика і багато інших.
2.3.2 Детальний опис особливостей реалізації програмного продукту
Для згладжування даних використовуються класи Triangle_Method і Update_Method. Екземпляри цих класів створюються у класі Splain, тому що цей клас містить метод main, з якого і починається запуск всієї програми.
public static void main(String[] args) throws IOException {
Splain s = new Splain();
sf = new StartFrame(s);
sf.setVisible(true);
}
У цьому методі створюється екземпляр поточного класу Splain, який потім слугує параметром конструктору типу package_protected для всіх класів, що ініціюють створення вікна. Окрім того, у методі main створюється також екземпляр класу StartFrame, який робить видимим вікно-заставку.
Після створення екземплярів класів Triangle_Method і Update_Method викликається метод run() з цих класів, результат виконання якого присвоюється змінній nameFileReturn, що використовується в подальшому для відображення імені файлу збереження згладжених даних.
public String tr_m() {
tm = new Triangle_Method(this);
String nameFileReturn = tm.run();
g = new Graphic1(this, title);
g.setVisible(true);
return nameFileReturn;
}
public String up_m() {
Update_Method up = new Update_Method(this);
String nameFileReturn = up.run();
g = new Graphic1(this, title);
g.setVisible(true);
return nameFileReturn;
}
Завершальним етапом в наведених методах є відображення графіку вхідних і отриманих даних.
Безпосередньо методи public String tr_m() {…} та public String up_m() {…} викликаються у класі Method при щиглику на радіокнопку.
private void rbTriangleActionPerformed(java.awt.event.ActionEvent evt) {
spl.title = "Згладжування методом трикутника";
triangleFile.setText(spl.tr_m());
spl.nonShowGr1();
}
private void rbUpdateActionPerformed(java.awt.event.ActionEvent evt) {
spl.title = "Згладжування уточненим методом";
updateFile.setText(spl.up_m());
spl.nonShowGr1();
}
Зупинимось на більш детальному розгляді реалізації класів Triangle_Method і Update_Method.
Дані для розрахунку зчитуються з текстового файлу, вказаного користувачем.
public void Create() { int jx = -1; int jy = -1; for (i = 0; i < spl.coord.size(); i++) { if ((i % 2) == 0) { jx++; x[jx] = spl.coord.get(i); } else { jy++; y[jy] = spl.coord.get(i); } }} |
Щойно зчитані дані зберігаються у динамічному дійсному масиві coord, а потім сортуються по дійсним масивам x[n], y[n], де n - кількість строк у вихідному текстовому файлі. Надалі всі операції (сортування масиву, дооприділення даних, довжина кривих та розрахунок згладжених даних) виконуються із сформованими масивами.
Всі проміжні дані записуються у файли у методі Print().
public void Print(String name, int r, double[] a, double[] b) {
f = new java.io.File(System.getProperty("user.dir") + System.getProperty("file.separator") + "TriangleMethod");
f.mkdir();
NumberFormat nf = NumberFormat.getInstance();
try {
out = new PrintWriter(new BufferedWriter(new FileWriter(f + System.getProperty("file.separator") + name)));
for (j = 0; j < r; j++) {
out.print(nf.format(a[j]));
out.print(";");
out.println(nf.format(b[j]));
}
out.flush();
} catch (IOException ex) {
ex.getMessage();
}
}
Параметр name - ім'я файлу, в який записуються проміжні розрахунки, r - умова закінчення циклу, a і b - масиви для запису.
Для зручності користувача у перших трьох строках методу створюється папка в поточному каталозі з ім'ям виконуваного класу. Так як однією з вимог до програми була кроссплатформеність, то роздільник каталогів задається системно (System.getProperty("file.separator")). Також використовується форматований запис даних.
Тепер, коли дані згладжені, можна побудувати сплайн. У програмному продукті реалізовано два варіанти побудови сплайну - на основі згладжених і безпосередньо використовуючи вхідні дані.
По алгоритму побудови сплайну (рис. 2.10) необхідно знайти матрицю А, обернену до неї матрицю, матрицю-добуток вхідних значень функції на константу 6, добуток останної розрахованої матриці на обернену матрицю. Для виконання всіх цих операцій використовується бібліотека JAMA, а саме методи класу Matrix. Проміжні дані, такі як добуток матриці на обернену, доданки у формулі розрахунку сплайна, значення сплайна у заданих точках, всі обчислені матриці також записуються у файл в папку поточного каталога.
Крім того, користувач має змогу задавати необхідну кількість проміжних значень на кожному інтервалі.
String input = JOptionPane.showInputDialog("Скільки проміжних значень на кожному інтервалі Ви хочете взяти для обчислення сплайну?");
l = Integer.parseInt(input);
Після виконання всіх перетворень на екран виводить графік сплайну з графіком вхідної кривої для порівняння.
2.3.3 Опис інтерфейсу користувача
Після запуску програми з'являється заставка (рис. 2.13).
У наступному вікні користувач обирає текстовий файл з початковими даними (рис. 2.14 - 2.15)
Далі відображається вікно з інформацією про обраний файл - його назвою та кількістю даних у файлі (рис. 2.16).
Рисунок 2.13. - Заставка додатку
Рисунок 2.14. - Вікно для активізації діалогу вибору файлу
Рисунок 2.15. - Вікно вибору файлу
Рисунок 2.16. - Інформаційне вікно з даними про файл
Натиснувши на кнопку "Показати графік" з'являється вікно з графіком кривої, побудованої на основі даних з текстового файлу (рис. 2.17), а також головне вікно програми (рис. 2.18 - 2.20).
Рисунок 2.17. - Графік вхідних даних
Рисунок 2.18. - Головне вікно програми
Рисунок 2.19. - Головне вікно програми: пункт меню Довідка > Про програму
Рисунок 2.20. - Головне вікно програми: пункт меню Файл > Змінити колір фону
У головному вікні додатку є чотири радіокнопки, кожна з яких реалізує певний вид алгоритму згладжування. На рис. 2.21 - 2.26 представлено результат їх вибору.
Рисунок 2.21. - Графік згладжених даних за методом трикутника
Рисунок 2.22. - Графік згладжених даних за уточненим методом
Рисунок 2.23. - Вікно запиту на кількість проміжних значень при виборі кнопки "за допомогою сплайна"
Рисунок 2.24 - Графік згладжених даних за допомогою сплайна
Рисунок 2.25. - Вікно запиту на вибір файлу для побуди сплайну при виборі кнопки "за допомогою сплайна використовуючи згладжені дані"
Рисунок 2.26. - Графік згладжених даних за допомогою сплайна на основі згладжених даних
Якщо дані згладжувати всіма запропонованими способами, то після роботи додатку головне вікно буде мати вигляд показаний на рис. 2.27.
Рисунок 2.27. - Головне вікно програми після вибору всіх алгоритмів згладжування
Висновки
В результаті виконання дипломного проекту була розглянуті методи згладжування експерементальнтих даних, обґрунтовано використання методу згладжування - сплайном. Розроблена блок-схема і алгоритм програмної реалізації методу згладжування сплайнами. Програмний продукт написаний на мові Java SE, використані бібліотеки JFreeChart та JAMA. Також виконано опробування програми і показано роботоздатність.
У розділі 1 були детально розглянуті методи первинної обробки інформації - згладжування експериментальних даних та сплайн третього порядку, проведений детальний аналіз необхідних для написання програм, бібліотек, порівняно існуючі інтегровані середовища для розробки додатків на мові Java.
У розділі 2 було виконано розробку блок-схем задіяних методів згладжування, алгоритм реалізації програмного продукту, а також інтерфейсу користувача. В процесі проектування додатку було сгенеровно діаграму класів UML.
Програма буде максимально корисна користувачам-дослідникам, аспірантам, магістрам та усім, хто працює з емпіричною інформацією.
Список літератури
1. Хорстманн К.С., Корнелл Г. Java 2. Библиотека профессионала, том I. Основы, 7-е изд.: Пер. с англ. - М.: Издательский дом "Вильямс", 2007. - 896 с.
2. Java Code Conventions - Oracle, September 12, 1997. - 24 p.
3. Эккель Б. Философия Java. Библиотека программиста. 4-е изд. - СПб.: Питер, 2009. - 640 с.
4. Фаулер М. Рефакторинг: улучшение существующего кода. - Пер. с англ. - СПб.: Символ-Плюс, 2003. - 432 с.
5. Ноутон П., Шилдт Г. JAVA 2 - "БХВ-Петербург", 2001. - 1102 с.
6. Макаров В.Л., Хлобыстов В.В. Сплайн-аппроксимация функций: Учеб. пособие для студентов вузов. - М.: Высш.шк., 1983 - 80 с.
7. Василенко В.А. Сплайн-функции: теория, алгоритмы, программы. - Новосибирск: Наука, 1983, 215 с.
8. Малоземов В.Н., Певный А.Б. Полиномиальные сплайны: Учеб. пособие. - Л.: Из-во Ленингр. ун-та, 1986, 120 с.
9. Де Бор К. Практическое руководство по сплайнам: Пер. с англ. - М.: Радио и связь, 1985. 304 с.
10. Завьялов Ю.С., Квасов Б.И., Мирошниченко В.Л. Методы сплайн-функций. - М.: Наука. Главная редакция физико-математической литературы, 1980, 350 с.
11. Лигун А.А., Шумейко А.А. Асимптотические методы восстановления кривых: Киев, 1997. - 358 с.
12. http://www.jfree.org
13. http://math.nist.gov/javanumerics/jama/
14. Borland® JBuilder™ Developer's Guide
15. Жмайлов Б.Б. Преимущества и недостатки разработки Java-программ без использования IDE-средств. Журнал "Вестник компьютерных и информационных технологий" №6, 2006г.
16. http://en.wikipedia.org/wiki/Comparison_of_integrated_development_environments
17. Шилдт Г., Холмс Дж. Искусство программирования на Java - 2006, 336 с.
18. Гудрич М.Т., Тамассия Р. Структуры данных и алгоритмы в Java. - Мн.: Новое знание, 2003. 671 с.
19. Бердо Р.С., Козуб П.А. Система фильтрации шума с помощью гауссовых кривих / Р.С. Бердо, П.А. Козуб // Зб. наук. праць Х міжнародної конференції ДВНЗ "НГУ". - Дніпропетровськ, 2013. - №1. - С. 58-60.
Додаток А
Лістинг програми
StartFrame.java
package splain;
/**
* StartFrame
*
* @version 1.1 30 May 2013
* @author Rimma Berdo
*/
public class StartFrame extends javax.swing.JFrame {
Splain spl;
/**
* Creates new form StartFrame
*/
public StartFrame(Splain spl) {
initComponents();
spl.frameDisplayCenter(getWidth(), getHeight(), this);
setIconImage(new javax.swing.ImageIcon("src/graphics/graph.png").getImage());
this.spl = spl;
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jLabel2 = new javax.swing.JLabel();
jLabel1 = new javax.swing.JLabel();
setTitle("Згладжування даних за допомогою сплайна");
setBackground(new java.awt.Color(255, 255, 255));
setForeground(java.awt.Color.white);
addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
formMouseClicked(evt);
}
});
jPanel1.setBackground(new java.awt.Color(0, 204, 255));
jLabel2.setText("<html><style>\n .stroke {\n font: bold 2em Monotype Corsiva;\n text-shadow: red 0 0 2px;\n }\n</style>\n<p class=\"stroke\"><I><FONT color=red size=7>ВІТАЄМО</FONT></I></p>\n</html>");
jLabel1.setIcon(new javax.swing.ImageIcon("src/graphics/global2.png"));
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(241, 241, 241)
.addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 187, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(250, Short.MAX_VALUE))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(16, 16, 16)
.addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 489, Short.MAX_VALUE))
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
pack();
}// </editor-fold>
private void formMouseClicked(java.awt.event.MouseEvent evt) {
spl.showOpen();
}
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JPanel jPanel1;
}
OpenFrame.java
package splain;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
/**
* StartFrame
*
* @version 1.1 30 May 2013
* @author Rimma Berdo
*/
public class OpenFrame extends javax.swing.JFrame {
JFileChooser fileChooser = new JFileChooser(new File(System.getProperty("user.dir")));
String fileName;
Splain spl;
ArrayList<Double> coord = new ArrayList<>();
/**
* Creates new form OpenFrame
*/
public OpenFrame(Splain spl) {
initComponents();
spl.frameDisplayCenter(getWidth(), getHeight(), this);
setIconImage(new ImageIcon("src/graphics/graph.png").getImage());
spl.nonShowStartFrame();
coord = spl.coord;
this.spl = spl;
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jButton1 = new javax.swing.JButton();
jLabel3 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("Згладжування даних за допомогою сплайна: Відкриття файлу");
setForeground(java.awt.Color.white);
setName("JFrame");
jPanel1.setBackground(new java.awt.Color(153, 255, 153));
jLabel1.setIcon(new ImageIcon("src/graphics/icoInofo.png"));
jButton1.setFont(new java.awt.Font("Cambria Math", 0, 18)); // NOI18N
jButton1.setText("Відкрити файл");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jLabel3.setFont(new java.awt.Font("Cambria", 0, 18)); // NOI18N
jLabel3.setText("<html>при активізації цієї кнопки в подальшому слід обрати текстовий файл з даними</html>");
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap(83, Short.MAX_VALUE)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
.addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 171, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(251, 251, 251))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 82, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 457, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(57, 57, 57))))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(170, 170, 170)
.addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(113, 113, 113)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 84, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(20, 20, 20)
.addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(155, Short.MAX_VALUE))
);
jButton1.getAccessibleContext().setAccessibleName("OpenButton");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
pack();
}// </editor-fold>
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
int returnValue = fileChooser.showOpenDialog(null);
if (returnValue == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
fileName = selectedFile.getPath();
spl.name = selectedFile.getName();
}
try {
BufferedReader in =
new BufferedReader(new FileReader(fileName)); //openning of file
String line; //variable for keeping string of file
while ((line = in.readLine()) != null) { //while not end of file
String[] tmp = line.split(";");
coord.add(Double.parseDouble(tmp[0])); //reading in massiv coord
coord.add(Double.parseDouble(tmp[1]));
}
} catch (IOException ex) {
ex.getLocalizedMessage();
JOptionPane.showMessageDialog(null, "I/O Error!");
} catch (NullPointerException e) {
JOptionPane.showMessageDialog(null, "File not found!");
}
if (fileName != null) {
spl.showDataFile();
}
this.setVisible(false);
}
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel3;
private javax.swing.JPanel jPanel1;
}
DataFile.java
package splain;
import javax.swing.ImageIcon;
/**
* DataFile
*
* @version 1.1 30 May 2013
* @author Rimma Berdo
*/
public class DataFile extends javax.swing.JFrame {
/**
* Creates new form DataFile
*/
Splain spl;
public DataFile(Splain spl) {
initComponents();
spl.frameDisplayCenter(getWidth(), getHeight(), this);
setIconImage(new ImageIcon("src/graphics/graph.png").getImage());
this.spl = spl;
TF_name.setText(spl.name);
TF_kl.setText(Integer.toString((spl.coord.size()) / 2));
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jButton1 = new javax.swing.JButton();
jLabel2 = new javax.swing.JLabel();
TF_kl = new javax.swing.JTextField();
jLabel1 = new javax.swing.JLabel();
TF_name = new javax.swing.JTextField();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("Згладжування даних за допомогою сплайна: Відкрили файл");
jPanel1.setBackground(new java.awt.Color(153, 255, 153));
jPanel1.setPreferredSize(new java.awt.Dimension(682, 565));
jButton1.setFont(new java.awt.Font("Cambria", 0, 18)); // NOI18N
jButton1.setText("Показати графік");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jLabel2.setFont(new java.awt.Font("Cambria", 0, 18)); // NOI18N
jLabel2.setText("Кількість даних:");
TF_kl.setFont(new java.awt.Font("Cambria", 0, 18)); // NOI18N
TF_kl.setDisabledTextColor(new java.awt.Color(51, 0, 102));
TF_kl.setEnabled(false);
jLabel1.setFont(new java.awt.Font("Cambria", 0, 18)); // NOI18N
jLabel1.setText("Відкритий масив:");
TF_name.setFont(new java.awt.Font("Cambria", 0, 18)); // NOI18N
TF_name.setDisabledTextColor(new java.awt.Color(51, 0, 102));
TF_name.setEnabled(false);
TF_name.setName("");
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(195, 195, 195)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(TF_name)
.addComponent(TF_kl, javax.swing.GroupLayout.PREFERRED_SIZE, 264, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(60, 60, 60)
.addComponent(jLabel1))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(66, 66, 66)
.addComponent(jLabel2))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(49, 49, 49)
.addComponent(jButton1)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 46, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(223, Short.MAX_VALUE))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(108, 108, 108)
.addComponent(jLabel1)
.addGap(18, 18, 18)
.addComponent(TF_name, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(TF_kl, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(51, 51, 51)
.addComponent(jButton1)
.addContainerGap(228, Short.MAX_VALUE))
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
pack();
}// </editor-fold>
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
this.setVisible(false);
spl.showGr1();
spl.meth();
}
private javax.swing.JTextField TF_kl;
private javax.swing.JTextField TF_name;
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JPanel jPanel1;
}
Help.java
package splain;
import javax.swing.ImageIcon;
/**
* Help
*
* @version 1.1 30 May 2013
* @author Rimma Berdo
*/
public class Help extends javax.swing.JFrame {
Splain spl;
/**
* Creates new form Help
*/
public Help(Splain spl) {
initComponents();
setIconImage(new ImageIcon("src/graphics/graph.png").getImage());
setBounds(800, 200, 626, 290);
this.spl = spl;
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
jSeparator1 = new javax.swing.JSeparator();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
jButton1 = new javax.swing.JButton();
jLabel5 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
jLabel1.setFont(new java.awt.Font("Arial", 3, 24)); // NOI18N
jLabel1.setText("Фільтрація шуму за допомогою сплайнів");
jLabel2.setFont(new java.awt.Font("Cambria", 0, 18)); // NOI18N
jLabel2.setText("Версія 1.1");
jLabel3.setFont(new java.awt.Font("Cambria", 0, 18)); // NOI18N
jLabel3.setText("Розроблено в травні 2013 року");
jLabel4.setFont(new java.awt.Font("Cambria", 0, 18)); // NOI18N
jLabel4.setText("Власником ліцензії на цей продукт є ДВНЗ\"НГУ\"");
jButton1.setFont(new java.awt.Font("Cambria", 0, 18)); // NOI18N
jButton1.setText("OK");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jLabel5.setPreferredSize(new java.awt.Dimension(55, 55));
jLabel5.setIcon(new ImageIcon("src/graphics/graph.png"));
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(28, 28, 28)
.addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jLabel1))
.addGroup(layout.createSequentialGroup()
.addGap(31, 31, 31)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel3)
.addComponent(jLabel2)
.addComponent(jLabel4)))
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 595, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(21, Short.MAX_VALUE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
.addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 94, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(56, 56, 56))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(20, 20, 20)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel1))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jLabel3)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jLabel4)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jButton1)
.addContainerGap(18, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
this.setVisible(false);
}
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JSeparator jSeparator1;
}
Graphic.java
package splain;
import javax.swing.ImageIcon;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
/**
* Graphic
*
* @version 1.1 30 May 2013
* @author Rimma Berdo
*/
public class Graphic extends javax.swing.JFrame {
Splain spl;
public Graphic(Splain spl) {
initComponents();
setIconImage(new ImageIcon("src/graphics/graph.png").getImage());
this.spl = spl;
//create 1 row of data
XYSeries series = new XYSeries("Ряд1 1");
//add points on the graphic
for (int i = 0; i < spl.n; i++) {
series.add(spl.x[i], spl.y[i]);
}
//зразу ж додаємо ряд в набір даниx
XYSeriesCollection data = new XYSeriesCollection(series);
//create diagram
final JFreeChart chart = ChartFactory.createXYLineChart(
"Крива вхідних даних",
"X",
"Y",
data,
PlotOrientation.VERTICAL,
true,
true,
false);
XYPlot xyplot = (XYPlot) chart.getPlot();
xyplot.setDomainPannable(true);
xyplot.setRangePannable(true);
XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer) xyplot.getRenderer();
xylineandshaperenderer.setBaseShapesVisible(true);
//create panel for graphic
ChartPanel chartPanel = new ChartPanel(chart);
//додаємо панель на створений нами фрейм
this.setContentPane(chartPanel);
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
setTitle("Графік вхідних даних");
setPreferredSize(new java.awt.Dimension(682, 565));
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 400, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 300, Short.MAX_VALUE)
);
pack();
}// </editor-fold>
}
Graphic1.java
package splain;
import javax.swing.ImageIcon;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
/**
* Graphic
*
* @version 1.1 30 May 2013
* @author Rimma Berdo
*/
public class Graphic extends javax.swing.JFrame {
Splain spl;
public Graphic(Splain spl) {
initComponents();
setIconImage(new ImageIcon("src/graphics/graph.png").getImage());
this.spl = spl;
//create 1 row of data
XYSeries series = new XYSeries("Ряд1 1");
//add points on the graphic
for (int i = 0; i < spl.n; i++) {
series.add(spl.x[i], spl.y[i]);
}
//зразу ж додаємо ряд в набір даниx
XYSeriesCollection data = new XYSeriesCollection(series);
//create diagram
final JFreeChart chart = ChartFactory.createXYLineChart(
"Крива вхідних даних",
"X",
"Y",
data,
PlotOrientation.VERTICAL,
true,
true,
false);
XYPlot xyplot = (XYPlot) chart.getPlot();
xyplot.setDomainPannable(true);
xyplot.setRangePannable(true);
XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer) xyplot.getRenderer();
xylineandshaperenderer.setBaseShapesVisible(true);
//create panel for graphic
ChartPanel chartPanel = new ChartPanel(chart);
//додаємо панель на створений нами фрейм
this.setContentPane(chartPanel);
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
setTitle("Графік вхідних даних");
setPreferredSize(new java.awt.Dimension(682, 565));
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 400, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 300, Short.MAX_VALUE)
);
pack();
}// </editor-fold>
}
Triangle_Method.java
package splain;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.NumberFormat;
import java.util.Locale;
/**
* Triangle_Method
*
* @version 1.1 30 May 2013
* @author Rimma Berdo
*/
public class Triangle_Method {
Splain spl;
public Triangle_Method(Splain spl) {
n = (spl.coord.size()) / 2;
spl.n = n;
m = n + 2;
x = new double[n];
y = new double[n];
xx = new double[m];
yy = new double[m];
x1 = new double[n];
y1 = new double[n];
spl.x = x;
spl.y = y;
spl.x1 = x1;
spl.y1 = y1;
this.spl = spl;
}
/** input masivs */
private double[] x, y;
/** index of cycle */
private int i, j;
/** quantity of elements masivs, m is masivs xx and yy */
private int n, m;
/** masivs of doopredeleniya */
private double[] xx, yy;
/** output masivs */
private double[] x1, y1;
private String nameFile;
private PrintWriter out;
private java.io.File f;
/**
* Dividing of data
*/
public void Create() {
int jx = -1;
int jy = -1;
for (i = 0; i < spl.coord.size(); i++) {
if ((i % 2) == 0) {
jx++;
x[jx] = spl.coord.get(i);
} else {
jy++;
y[jy] = spl.coord.get(i);
}
}
}
/**
* sort
*/
public void Sort() {
for (i = 1; i < n; i++) {
for (j = n - 1; j >= i; j--) {
if (x[j - 1] > x[j]) {
double t = x[j - 1];
x[j - 1] = x[j];
x[j] = t;
double ty = y[j - 1];
y[j - 1] = y[j];
y[j] = ty;
}
}
}
nameFile = "Sorted data_Tr.txt";
Print(nameFile, n, x, y);
}
/**
* doopredelenie
*/
public void Doopr() {
xx[0] = (4 * x[0] + x[1] - 2 * x[2]) / 3;
yy[0] = (4 * y[0] + y[1] - 2 * y[2]) / 3;
xx[m - 1] = (4 * x[n - 1] + x[n - 2] - 2 * x[n - 3]) / 3;
yy[m - 1] = (4 * y[n - 1] + y[n - 2] - 2 * y[n - 3]) / 3;
for (i = 1; i < n + 1; i++) {
xx[i] = x[i - 1];
yy[i] = y[i - 1];
}
nameFile = "Doopredelenie data_Tr.txt";
Print(nameFile, n + 2, xx, yy);
}
/**
* output masivs
*/
public String New() {
for (i = 1; i < n + 1; i++) {
x1[i - 1] = (xx[i - 1] + xx[i] + xx[i + 1]) / 3;
y1[i - 1] = (yy[i - 1] + yy[i] + yy[i + 1]) / 3;
}
nameFile = "New data_Tr.txt";
String nameFileReturn = f + System.getProperty("file.separator") + nameFile;
Print(nameFile, n, x1, y1);
return nameFileReturn;
}
/**
* solve of length of curves
*/
public double[] Length() {
double[] dl = new double[2];
double ll, ll1;
double L = 0, L1 = 0;
NumberFormat nf = NumberFormat.getInstance();
try {
out = new PrintWriter(new BufferedWriter(new FileWriter(f + System.getProperty("file.separator") + "Length of curves_Tr.txt")));
for (i = 0; i < n - 1; i++) {
ll = Math.sqrt(Math.pow((x[i] - x[i + 1]), 2)
+ Math.pow((y[i] - y[i + 1]), 2));
ll1 = Math.sqrt(Math.pow((x1[i] - x1[i + 1]), 2)
+ Math.pow((y1[i] - y1[i + 1]), 2));
out.print(nf.format(ll));
out.print('\t');
out.print('\t');
out.println(nf.format(ll1));
L += ll;
L1 += ll1;
}
} catch (IOException ex) {
ex.getMessage();
}
dl[0] = L;
dl[1] = L1;
out.print("Summary length of curves:");
out.print('\t');
out.print("L = ");
out.print(nf.format(L));
out.print('\t');
out.print("L1 = ");
out.print(nf.format(L1));
out.flush();
return dl;
}
public void run0() {
Create();
Sort();
}
public String run() {
Create();
Sort();
Doopr();
String ss = New();
double[] dl2 = Length();
while (dl2[0] < dl2[1]) {
for (i = 0; i < n; i++) {
x[i] = x1[i];
y[i] = y1[i];
}
Doopr();
New();
dl2 = Length();
}
return ss;
}
/**
* print all masivs
*/
public void Print(String name, int r, double[] a, double[] b) {
f = new java.io.File(System.getProperty("user.dir") + System.getProperty("file.separator") + "TriangleMethod");
f.mkdir();
Locale loc = new Locale("en", "US");
NumberFormat nf = NumberFormat.getInstance(loc);
try {
out = new PrintWriter(new BufferedWriter(new FileWriter(f + System.getProperty("file.separator") + name)));
for (j = 0; j < r; j++) {
out.print(nf.format(a[j]));
out.print(";");
out.println(nf.format(b[j]));
}
out.flush();
} catch (IOException ex) {
ex.getMessage();
}
}
}
Update_Method.java
package splain;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.NumberFormat;
import java.util.Locale;
/**
* Update_Method
*
* @version 1.1 30 May 2013
* @author Rimma Berdo
*/
public class Update_Method {
Splain spl;
public Update_Method(Splain spl) {
this.spl = spl;
n = (spl.coord.size()) / 2;
spl.n = n;
m = n + 4;
x = new double[n];
y = new double[n];
xx = new double[m];
yy = new double[m];
x1 = new double[n];
y1 = new double[n];
spl.x = x;
spl.y = y;
spl.x1 = x1;
spl.y1 = y1;
}
/** input masivs */
private double[] x, y;
/** index of cycle */
private int i, j;
/** quantity of elements masivs, m is masivs xx and yy */
private int n, m;
/** masivs of doopredeleniya */
private double[] xx, yy;
/** output masivs */
private double[] x1, y1;
private PrintWriter out;
private String nameFile;
private java.io.File f;
/**
* Dividing of data
*/
public void Create() {
int jx = -1;
int jy = -1;
for (i = 0; i < spl.coord.size(); i++) {
if ((i % 2) == 0) {
jx++;
x[jx] = spl.coord.get(i);
} else {
jy++;
y[jy] = spl.coord.get(i);
}
}
}
/**
* sort
*/
public void Sort() {
for (i = 1; i < n; i++) {
for (j = n - 1; j >= i; j--) {
if (x[j - 1] > x[j]) {
double t = x[j - 1];
x[j - 1] = x[j];
x[j] = t;
double ty = y[j - 1];
y[j - 1] = y[j];
y[j] = ty;
}
}
}
nameFile = "Sorted data__Up.txt";
Print(nameFile, n, x, y);
}
/**
* doopredelenie
*/
public void Doopr() {
xx[1] = (126 * x[0] - 56 * x[2] - 42 * x[3] + 42 * x[4]) / 70;
xx[0] = (105 * x[0] - 14 * x[1] - 63 * x[2] - 42 * x[3] + 49 * x[4]) / 35;
yy[1] = (126 * y[0] - 56 * y[2] - 42 * y[3] + 42 * y[4]) / 70;
yy[0] = (105 * y[0] - 14 * y[1] - 63 * y[2] - 42 * y[3] + 49 * y[4]) / 35;
xx[m - 2] = (126 * x[n - 1] - 56 * x[n - 3] - 42 * x[n - 4]
+ 42 * x[n - 5]) / 70;
xx[m - 1] = (105 * x[n - 1] - 14 * x[n - 2] - 63 * x[n - 3]
- 42 * x[n - 4] + 49 * x[n - 5]) / 35;
yy[m - 2] = (126 * y[n - 1] - 56 * y[n - 3] - 42 * y[n - 4]
+ 42 * y[n - 5]) / 70;
yy[m - 1] = (105 * y[n - 1] - 14 * y[n - 2] - 63 * y[n - 3]
- 42 * y[n - 4] + 49 * y[n - 5]) / 35;
for (i = 2; i < m - 2; i++) {
xx[i] = x[i - 2];
yy[i] = y[i - 2];
}
nameFile = "Doopredelenie data_Up.txt";
Print(nameFile, n + 4, xx, yy);
}
/**
* output masivs
*/
public String New() {
for (i = 0; i < n; i++) {
x1[i] = xx[i + 2] - (3 * (xx[i + 4] - 4 * xx[i + 3] + 6 * xx[i + 2]
- 4 * xx[i + 1] + xx[i]) / 35);
y1[i] = yy[i + 2] - (3 * (yy[i + 4] - 4 * yy[i + 3] + 6 * yy[i + 2]
- 4 * yy[i + 1] + yy[i]) / 35);
}
nameFile = "New data_Up.txt";
String nameFileReturn = f + System.getProperty("file.separator") + nameFile;
Print(nameFile, n, x1, y1);
return nameFileReturn;
}
/**
* solve of length of curves
*/
public double[] Length() {
double[] dl = new double[2];
double ll, ll1;
double L = 0, L1 = 0;
NumberFormat nf = NumberFormat.getInstance();
try {
out = new PrintWriter(new BufferedWriter(new FileWriter(f + System.getProperty("file.separator") + "Length of curves_Up.txt")));
for (i = 0; i < n - 1; i++) {
ll = Math.sqrt(Math.pow((x[i] - x[i + 1]), 2)
+ Math.pow((y[i] - y[i + 1]), 2));
ll1 = Math.sqrt(Math.pow((x1[i] - x1[i + 1]), 2)
+ Math.pow((y1[i] - y1[i + 1]), 2));
out.print(nf.format(ll));
out.print('\t');
out.print('\t');
out.println(nf.format(ll1));
L += ll;
L1 += ll1;
}
} catch (IOException ex) {
ex.getMessage();
}
dl[0] = L;
dl[1] = L1;
out.print("Summary length of curves:");
out.print('\t');
out.print("L = ");
out.print(nf.format(L));
out.print('\t');
out.print("L1 = ");
out.print(nf.format(L1));
out.flush();
return dl;
}
public String run() {
Create();
Sort();
Doopr();
String ss = New();
double[] dl2 = Length();
while (dl2[0] < dl2[1]) {
for (i = 0; i < n; i++) {
x[i] = x1[i];
y[i] = y1[i];
}
Doopr();
New();
dl2 = Length();
}
return ss;
}
/**
* print all masivs
*/
public void Print(String name, int r, double[] a, double[] b) {
f = new java.io.File(System.getProperty("user.dir") + System.getProperty("file.separator") + "UpdateMethod");
f.mkdir();
Locale loc = new Locale("en", "US");
NumberFormat nf = NumberFormat.getInstance(loc);
try {
out = new PrintWriter(new BufferedWriter(new FileWriter(f + System.getProperty("file.separator") + name)));
for (j = 0; j < r; j++) {
out.print(nf.format(a[j]));
out.print(";\t\t");
out.println(nf.format(b[j]));
}
out.flush();
} catch (IOException ex) {
ex.getMessage();
}
}
}
Spline.java
Подобные документы
Розробка програми для моделювання роботи алгоритму Дейкстри мовою C# з використанням об’єктно-орієнтованих принципів програмування. Алгоритм побудови робочого поля. Програмування графічного інтерфейсу користувача. Тестування програмного забезпечення.
курсовая работа [991,4 K], добавлен 06.08.2013Загальна характеристика методів проектування та документації додатків. Розробка інтерфейсу програми для медичного діагностичного центру. Вибір архітектури. Описання логічної структури програми. Розробка структури бази даних проекту, полів таблиць.
курсовая работа [2,0 M], добавлен 21.08.2015Розробка програми для управління навчальним процесом студентської групи вищого навчального закладу. Об’єктно-орієнтоване проектування об’єктів групи. Створення мови програмування Java. Побудова графічного інтерфейсу. Робота з невеликими базами даних.
курсовая работа [935,3 K], добавлен 21.12.2013Аналіз технічного забезпечення, вибір інструментального програмного забезпечення та середовища розробки програм. Створення класів для реалізації необхідних функцій для роботи програмного засобу. Розробка інтерфейсу для користувача та лістинг програми.
курсовая работа [343,9 K], добавлен 24.08.2012Розробка програми для автоматизованого розрахунку продажів у крамниці спорттоварів. Розробка концептуальної та логічної моделей бази даних. Автоматизація обробки інформації. Ядро програмного прикладного забезпечення. Розробка візуального інтерфейсу.
курсовая работа [2,3 M], добавлен 26.12.2014Проектування інтерфейсу програми. Вимоги до продукту. Вхідні дані на розробку автоматизованої системи. Вибір середовища програмування. Розробка структури бази даних. Функціональна та логічна структура програми. Розробка структури таблиць бази даних.
курсовая работа [43,1 K], добавлен 30.06.2015Створення програми для роботи з веб-камерою з автоматичним визначенням встановленої камери на комп'ютері. Характеристика апаратної конфігурації програми. Опис мови і середовища програмування. Розробка алгоритму, інструкції для програміста та користувача.
курсовая работа [1,2 M], добавлен 26.07.2013Оцифровування карти за допомогою програмного продукту ArcGis. Порівняння методів інтерполяції за допомогою програмних продуктів Surfer та ArcGis. Згладжування отриманих сіткових даних за допомогою сплайнів і фільтрації. Застосування сіткових чисел.
курсовая работа [2,1 M], добавлен 31.01.2014Створення програми для виконання найпростіших функцій календаря за допомогою Borland DELPHI 2007. Аналіз процесу обробки інформації і побудова функціональних діаграм. Розробка інтерфейсу користувача, форм вводу-виводу інформації, основних алгоритмів.
курсовая работа [1,3 M], добавлен 01.06.2013Розробка алгоритму по виявленню і локалізації особи на зображенні у візуальному середовищі Delphi. Розробка програми по виділенню областей кольору шкіри особи, крапок, ліній і яскравості зображення. Опис структури програми і інтерфейсу користувача.
курсовая работа [3,9 M], добавлен 07.01.2014