ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з...

46
Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 1 Міністерство освіти і науки України Національний технічний університет України «Київський політехнічний інститут» ІНФОРМАТИКА МЕТОДИЧНІ ВКАЗІВКИ до курсової роботи для студентів напряму підготовки 6.050502 Інженерна механіка Електронне видання Київ – 2016

Upload: others

Post on 03-Mar-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 1

Міністерство освіти і науки України

Національний технічний університет України

«Київський політехнічний інститут»

ІНФОРМАТИКА

МЕТОДИЧНІ ВКАЗІВКИ до курсової роботи

для студентів напряму підготовки 6.050502 Інженерна механіка

Електронне видання

Київ – 2016

Page 2: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 2

Методичні вказівки до курсової роботи з дисципліни «Інформатика» для студентів

напряму підготовки 6.050502 Інженерна механіка: / Укладачі: Пасічник В.А.,

Лашина Ю.В., Сімута Р.Р. – К.: Електронне видання, 2016. – с.

Укладачі: Пасічник Віталій Анатолійович, док. техн. наук, проф.

Лашина Юлія Вікторівна, канд. техн. наук, доц.

Сімута Роман Русланович, канд. техн. наук, ст. викл

Рецензент:

Відповідальний редактор:

Page 3: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 3

Зміст Мета і задачі курсової роботи ...................................................................................................... 4

Вимоги до оформлення звіту з курсової роботи ........................................................................ 5

Приклад виконання практичної частини курсової роботи ........................................................ 6

1. Постановка задачі .................................................................................................................. 6

2. Аналіз задачі .......................................................................................................................... 8

3. Розробка алгоритму вирішення задачі ................................................................................ 8

4. Розроблення структури, інтерфейсу та кодування програми ........................................... 9

4.1. Загальна структура додатку ........................................................................................... 9

4.2. Проектування головного вікна програми ................................................................... 12

4.3. Організація введення початкових даних та обчислення розрахункових параметрів

............................................................................................................................................... 17

4.4. Виведення результатів розрахунків ............................................................................ 22

4.5. Запис результатів розрахунків в файл ........................................................................ 29

4.6. Виведення графіків функцій, що описують механізм .............................................. 31

4.7. Виведення інформації про программу ....................................................................... 33

4.8. Виведення інформації про автора ............................................................................... 33

4.9. Виведення спрощеної параметричної графічної моделі механізму ........................ 34

4.10 Виведення повної параметричної графічної моделі механізму .............................. 37

4.11 Анімація графічної моделі механізму ....................................................................... 39

Додаток А. Опис методів класу graphicPrimitives бібліотеки grPrimitives .................... 40

Рекомендована література .......................................................................................................... 46

Page 4: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 4

Мета і задачі курсової роботи

Курсова робота з інформатики - підсумкова самостійна робота студента, яка

завершує вивчення дисципліни "Інформатика" і призначена для отримання практичних

навичок розробки програмного забезпечення для вирішення задач інженерної механіки.

Метою пропонованої курсової роботи є створення програмної системи для

розрахунку і моделювання плоского механізму. Програмна система реалізується в

середовищі Microsoft Visual C#. Для досягнення поставленої мети необхідно:

1) Проаналізувати відомості про механізм (відповідно до індивідуального варіанту

завдання), які включають:

a. Креслення і спрощену схему з параметрами;

b. Розрахункові залежності, які визначають взаємозв'язок параметрів

механізму;

c. Розрахункові залежності, які визначають функціонування механізму

(функції положення і передаточного відношення).

2) Виявити основні (визначають роботу механізму) і допоміжні (слугують

конструктивному оформленню) параметри механізму та можливі діапазони їхньої зміни;

3) Розробити клас, який описуватиме механізм. При розробці класу необхідно:

a. Реалізувати метод обчислення розрахункових параметрів механізму;

b. Реалізувати метод перевірки співвідношень параметрів механізму;

c. Реалізувати код власних функцій, які визначатимуть положення ланок

механізму та передаточне відношення;

d. Реалізувати код методів розрахунку максимальних та мінімальних

значень параметрів механізму;

e. Реалізувати метод виведення спрощеного параметричного ескізу

механізму;

f. Реалізувати метод виведення повного параметричного ескізу механізму.

4) Розробити інтерфейс програмної системи та необхідний програмний код для

реалізації наступного функціоналу:

a. введення та виведення параметрів механізму;

b. виведення таблиці положень механізму і передаточної функції, таблиці

граничних значень, запис результатів у текстовий файл;

c. виведення в графічному режимі спрощеного параметричного ескізу

механізму;

d. виведення в графічному режимі повного параметричного ескізу

механізму;

e. імітацію роботи механізму (спрощеного, повного або обох) з

можливістю регулювання швидкості і напрямку;

f. виведення графіків залежності положення залежної ланки механізму та

передаточного відношення - від положення привідної ланки при

встановлених параметрах механізму;

Page 5: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 5

g. виведення інформації про програмну систему;

h. виведення інформації про розробника системи;

Вимоги до оформлення звіту з курсової роботи

Розроблене програмне забезпечення представляється для захисту на будь-якому

електронному носії інформації.

Звіт з курсової роботи повинен бути виконаний українською мовою комп'ютерним

способом і надрукований на аркушах формату А4 (210х297 мм) з однієї сторони. Розміри

полів: лівого - 30 мм; правого, верхнього і нижнього - по 20 мм. Усі сторінки звіту повинні

бути пронумерованими у правому нижньому куті.

Обов'язковими складовими елементами звіту є:

Титульна сторінка (додаток 1).

Заповнений і підписаний бланк завдання до курсової роботи (додаток 2);

Результати розробки програмної системи (постановка задачі, алгоритми

власних функцій, розроблений програмний код; копії з екранів, що

демонструють роботу програмної системи);

Висновки.

Page 6: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 6

Приклад виконання практичної частини курсової роботи

Виконання курсової роботи будемо проводити відповідно до загальних

рекомендацій в наступній послідовності.

1) Постановка задачі

2) Аналіз задачі

3) Розробка алгоритму вирішення задачі

4) Проектування структури та інтерфейсу програми

5) Кодування

6) Налагодження і верифікація програми

7) Отримання результату і його інтерпретація

8) Передача замовнику результату роботи

9) Супровід системи

1. Постановка задачі

Розробити діалогову систему розрахунку і моделювання кривошипно-

коромислового механізму (рис. 1). Така система повинна забезпечувати введення даних

про довжини ланок механізму, розраховувати кут нахилу коромисла і передаточне

відношення при будь-якому положенні кривошипу, відображати ескіз механізму,

імітувати його роботу, виводити графіки залежності кута нахилу коромисла та

передаточного відношення від кута повороту кривошипу.

Рис. 1. Повна кінематична схема механізму

Привідним ланцюгом є кривошип 2, який обертається навколо вісі корпусу 1.

Page 7: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 7

Основними геометричними розмірами механізму є:

L - відстань між центрами обертання;

R - відстань між віссю обертання кривошипу та шипом на ньому;

L1 - довжина коромисла;

L2 - довжина шатуна.

Додатковими геометричними розмірами механізму є:

D - діаметр кривошипу;

B - відстань від основи корпусу до осей обертання кривошипу та коромисла.

Співвідношення розмірів механізму, які визначають можливість конструктивного

виконання механізму, наведені в табл.1.

Таблиця 1. Співвідношення розмірів ланок механізму

№ Назва Формула

1. Корпус L = 100..150 мм

B > D/2 мм

2. Кривошип R = 10..L-20 мм

D=2*R+10 мм

3. Коромисло L1>=R+10 мм

4. Шатун L22=(L-R)

2+L1

2 мм

Положення механізму визначається кутом обертання кривошипу (α) від якого, а

також від основних геометричних розмірів, залежить кут нахилу коромисла (φ).

Розрахункові формули наведені далі.

Функція нахилу коромисла:

cos2

,12

21arccos

sinarcsin

22

222

LRLRLk

LkL

LLkL

Lk

R

Передаточна функція:

cos2

,22

12arccos

cos

sinarctan

,)sin(1

)sin(

22

222

LRLRLk

LkL

LLkL

RL

R

L

Ru

Page 8: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 8

Спрощена кінематична схема символізує той самий механізм, у якому відповідні

ланцюги замінені ланками, що з'єднують певні вузлові точки механізму.

Рис. 2. Спрощена кінематична схема механізму

2. Аналіз задачі

Привідним ланцюгом механізму є кривошип 2, який обертається навколо вісі,

закріпленої у корпусі 1. Із кривошипом 2 та коромислом 3 з'єднаний шатун 4, який передає

рух. Таким чином при обертальному русі кривошипу 2 коромисло 3 виконує гойдальні

рухи.

У постановці задачі до курсової роботи значення діапазонів довжин вказуються

викладачем. Домовимось, що діапазон міжцентрової відстані L знаходиться в межах від

100 до 200 мм. Значення решти розмірів або розраховуються точно (D), або вводяться з

клавіатури у діапазоні, якій суттєво залежить від міжцентрової відстані L. Відмітимо, що

програмна система, яка розробляється повинна забезпечити суворий контроль уведеної

інформації, адже невірні дані унеможливлюють отримання коректного результату.

Аналіз розрахункових залежностей потрібно проводити з точки зору виникнення

небажаних ситуацій під час розрахунків. До таких ситуацій у першу чергу належить

ділення на нуль та знаходження кореня від'ємного числа. З цього боку слід забезпечити

наступне:

L1<>0, Lk<>0, L>R, L2<>0.

Після аналізу розмірів механізму стає зрозумілим, що контроль введеної інформації

унеможливлює ситуації ділення на нуль або знаходження кореня від'ємного числа, тобто

відповідні функції не потребують додаткових заходів аналізу даних.

Подальший аналіз в учбовій курсовій роботі можна не проводити, адже постановка

задачі достатньо формалізована і містить математичну модель механізму.

3. Розробка алгоритму вирішення задачі

Наявність залежностей, що визначають модель механізму, дозволяє спиратися на

класичні розгалужені і циклічні алгоритми, а також алгоритми знаходження найменшого

Page 9: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 9

та найбільшого значення. Доцільно розбити задачу на окремі функції, алгоритми яких

будуть істотно простіше.

4. Розроблення структури, інтерфейсу та кодування програми

Діалогова система повинна забезпечувати багаторазове виконання дій, тому

доцільно створити загальну оболонку системи у виді додатку Windows Forms, а для опису

властивостей та поведінки механізму створити власний клас Mechanism.

4.1. Загальна структура додатку

Заготовка проекту Windows Forms (рис. 3) містить за замовчуванням два класи:

Form1.cs – клас, що описує зовнішній вид і поведінку головного вікна програми;

Program.cs – клас, який містить точку входу в програмний додаток, тобто метод

Main. В цьому методі міститься виклик статичного методу Run классу Application, що

запускає цикл оброблення повідомлень і виводить на екран форму, новий екземпляр якої

передається йому в якості параметра.

Рис. 3. Шаблон проекту Windows Forms

Для того, щоб спроектувати структуру програмного додатку необхідно чітко

визначитись з вимогами до його роботи. Ці вимоги були сформульовані при постановці

задачі курсової роботи (див. вище). Представимо зв’язок між задачами розробки та

елементами програмного забезпечення у виді таблиці (табл.2). Імена класів, які описують

відповідні форми ви повинні створити самостійно, але необхідно, щоб вони відображали

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

перейменувати з Form1 у FormMain.

Page 10: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 10

Таблиця 2. Зв’язок між задачами розробки та елементами програмного

забезпечення

Задача Ім’я класу/форми

введення та виведення параметрів механізму FromMain

виведення таблиці положень механізму і передаточної функції,

таблиці граничних значень, запис результатів у текстовий файл

FormResults

виведення спрощеного параметричного ескізу механізму FormSchema

виведення повного параметричного ескізу механізму FormFullScheme

імітацію роботи механізму (спрощеного, повного або обох) з

можливістю регулювання швидкості і напрямку

FormKinematics

виведення графіків залежності положення залежної ланки

механізму та передаточного відношення - від положення

привідної ланки при встановлених параметрах механізму

FormCharts

виведення інформації про програмну систему FormAboutProgram

виведення інформації про розробника системи FormAboutAuthor

Розроблення інтерфейсів вказаних форм, а також кодування оброблювачів подій

будемо описувати поступово в ході розроблення програмного забезпечення.

Розглянемо елементи які повинен містити клас Mechanism, який описуватиме

властивості та функціонування механізму.

З метою створення класу необхідно обрати пункт головного меню «Проект/

Добавить класс…» (рис. 4).

Рис. 4. Додавання класу до проекту

Обираємо вид елементу «Класс», вводимо ім’я класу і підтверджуємо (рис. 5).

Page 11: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 11

Рис. 5. Додавання класу до проекту (крок 2)

Після виконання вказаних дій в проект буде додано шаблон нового класу, який

необхідно наповнити змістом (рис. 6).

Рис. 6. Шаблон класу Mechanism

Основними елементами класу, як відомо є: поля, методи, властивості,

конструктори. Полями, в даному випадку, повинні бути основні та допоміжні геометричні

параметри механізму, визначені в пункті 1 (див. лістинг 1).

Page 12: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 12

public class Mechanism { double r; //відстань між віссю обертання кривошипу та шипом на ньому double d; // діаметр кривошипу double l; // відстань між центрами обертання double l1; // довжина коромисла double l2; // довжина шатуна double b; //відстань від основи корпусу до осей обертання кривошипу та коромисла

}

Основні методи класу, які необхідно розробити, представимо у виді таблиці

(табл. 3) в залежності від задач до курсової роботи.

Таблиця 3. Зв’язок між задачами розробки та методами класу Mechanism

Задача Заголовок методу

Реалізувати метод обчислення

розрахункових параметрів механізму

public void recalculate()

Реалізувати метод перевірки

співвідношень параметрів механізму

public void checkData(<параметри>)

Реалізувати код власних функцій, які

визначатимуть положення ланок

механізму та передаточне відношення

public double Fi(int alfa) public double U(int alfa)

Реалізувати код методів розрахунку

максимальних та мінімальних значень

параметрів механізму;

private void calcMinMax()

Реалізувати метод виведення

спрощеного параметричного ескізу

механізму;

public void drawSimpleScheme(<параметри>)

Реалізувати метод виведення повного

параметричного ескізу механізму.

public void drawFullScheme(<параметри>)

4.2. Проектування головного вікна програми

Налаштування зовнішнього виду головного вікна почнемо з того, що перейменуємо

заголовок форми. Для цього необхідно в редакторі властивостей, який знаходиться, як

правило, в нижньому правому куті середовища розробки, обрати властивість форми Text

(див. рис. 7).

Додамо зображення механізму, яке подано у завдання, на форму. Для цього

необхідно виконати декілька дій:

1. додати в проект файл ресурсів (рис. 8),

2. додати в цей файл із зображенням механізму (рис. 9),

3. розмістити на формі контейнер для зображення PictureBox (рис. 10),

Лістинг 1

Page 13: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 13

4. налаштувати властивість Image компонента PictureBox обравши відповідне

зображення зі створеного файлу ресурсів (рис. 10).

Рис. 7. Зміна властивостей форми

Рис. 8. Створення файлу ресурсів

Рис. 9. Додавання файлу зображення до файлу ресурсів

Page 14: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 14

Рис. 10. Розміщення елементу PictureBox на формі і зміна його властивості Image

Для організації області введення початкових даних використаємо елемент

GroupBox, який дозволяє згрупувати певну кількість елементів під загальним заголовком,

який вказується за допомогою властивості Text (рис. 11).

Рис. 11. Розміщення елемента GroupBox

Для організації полів введення даних використаємо два елементи: Label – для

створення напису, який вказуватиме, який саме геометричний розмір необхідно ввести

(рис. 12); TextBox – поле для введення/виведення даних (рис. 13). Зверніть увагу не те, що

поля для введення/виведення даних TextBox необхідно заповнити даними за

замовчуванням (властивість Text), а також перейменувати у відповідності до їх

призначення (властивість Name) – наприклад, якщо поле призначене для введення відстані

між опорами L його можна назвати textBoxL.

Page 15: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 15

Рис. 12. Розміщення компонента Label на формі

Рис. 13. Розміщення елемента TextBox на формі та зміна його властивостей

Використовуючи елементи GroupBox, Label, TextBox як описано вище формуємо

три області в правій частині інтерфейсу: ланки механізму; вихідні дані; результат

розрахунків (рис.14).

Рис. 14. Проектування інтерфейсу головного вікна

Page 16: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 16

До даного інтерфейсу необхідно додати ще дві функціональні можливості:

підтвердження введених даних і розрахунок залежностей;

відмова від введених даних.

Для цього розташуємо на формі два елемента Button (рис. 15). Бажано одразу їх

перейменувати (властивість Name) відповідно до функцій, які вони виконуватимуть,

наприклад, ButtonApply для кнопки «Прийняти» і ButtonCancel для кнопки «Скасувати».

Рис. 15. Розміщення елемента Button на формі

Для того, щоб з головної форми можна було викликати інші форми, які реалізують

під задачі, описані в таблиці 2, необхідно створити систему меню. З цією метою

розмістимо на формі елемент MenuStrip (рис. 16) і наповнимо його пунктами меню.

Рис. 16 Створення системи меню за допомогою елемента MenuStrip

В результаті отримаємо інтерфейс головного вікна програми як показано на рис. 17.

Page 17: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 17

Рис. 17. Результат проектування інтерфейсу головного вікна програми

4.3. Організація введення початкових даних та обчислення розрахункових

параметрів

4.3.1 Розроблення класу Mechanism

Як зазначалось раніше, основні та допоміжні геометричні параметри механізму

представлені у виді полів класу Mechanism (Лістинг 1).

Для організації доступу до цих полів необхідно створити відповідні властивості.

Імена властивостей збігатимуться з іменами полів, але будуть записані великими літерами

(Лістинг 2).

public double R { set { if (value > 0) r = value;} get { return r;} } public double D { get { return d;} //доступ тільки для зчитування } public double L { set { if (value > 0) l = value;} get { return l;} } public double L1 { set { if (value > 0) l1 = value;} get { return l1;} } public double L2 { get { return l2;} //доступ тільки для зчитування } public double B { set {if (value > 0) b = value;}

Лістинг 2

Page 18: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 18

get {return b;} }

Розрахункові значення розмірів d і l2 будемо обчислювати з використанням методу

recalculate (Лістинг 3).

public void recalculate() { d = 2 * r + 10; l2 = Math.Sqrt(Math.Pow((l - r), 2) + Math.Pow(l1, 2)); }

Встановлення значень полів за замовчуванням виконаємо за допомогою методу

SetInitialData (Лістинг 4).

public void SetInitialData() { r = 40; l = 100; l1 = 70; b = 70; recalculate(); }

Як зазначалось в п.1 між геометричними параметрами механізму існують певні

залежності (табл.1) тому необхідно виконати перевірку цих співвідношень перш ніж

застосувати їх до механізму. Перевірку будемо виконувати за допомогою методу

checkData (лістинг 5). Цьому методу передаватимемо 4 вхідні параметри R, L, B, L1 –

відповідні розміри механізму, і 3 вихідні параметри отримуватимемо з методу code –

рядок, який містить назву некоректного параметру, Message – повідомлення для

користувача, value – значення параметру за замовчуванням.

public void checkData(double R, double L, double B, double L1, out string code, out string Message, out double value) { Message = ""; // повідомлення про результат перевірки value=0; // нове значення некоректного параметра (якщо такий буде знайдено) if ((L < 100) || (L > 200)) // умова перевірки { Message = "Значення L повинне бути в межах від 100 до 200!"; code = "L"; // некоректний параметр value = 100; // коректне значення } else if ((R < 10) || (R > L-40)) { Message = String.Format("Значення R повинне бути в межах від 10 до {0}!",L-40);

Лістинг 5

Лістинг 4

Лістинг 3

Page 19: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 19

code = "R"; value = 30; } else if (L1 < R + 30) { Message = String.Format("Значення L1 повинне бути не менше R + 30 = {0}!", R +30); code = "L1"; value = R + 30; } else if (B <= (2 * R + 10) / 2) { Message = String.Format("Значення B повинне бути більше (2 * R + 10) / 2 = {0:f2}!", (2 * R + 10) / 2); code = "B"; value = (2 * R + 10) / 2+5; } else //всі умови виконані значення параметрів вірні { Message = "Вихідні дані коректні!"; //встановлюємо нові значення полів класу r = R; l = L; l1 = L1; b = B; code = ""; // некоректні параметри відсутні recalculate();//переаховуємо розрахункові значення } }

4.3.2 Кодування оброблювачів подій (клас FormMain.cs)

Описані методи дозволять нам створити оброблювачі подій, які виникатимуть при

спробі користувача задати нові параметри механізму. Для цього в коді головної форми

(клас FormMain.cs або Form1.cs, якщо форму не перейменовано) необхідно створити

екземпляр класу Mechanism. Створимо поле форми MyMech і в конструктор форми додамо

оператор створення нового об’єкту (лістинг 5).

Mechanism MyMech; public FormMain() { InitializeComponent(); MyMech = new Mechanism(); }

Перш за все необхідно захистити користувача від недопустимих символів при

введенні числових даних. Для цього необхідно написати оброблювач події – вихід з поля

введення. Ця подія міститься в переліку подій елемента TextBox і має назву Leave. Для

того, щоб створити оброблювач події, необхідно в інспекторі подій двічі натиснути лівою

кнопкою миші в полі навпроти її назви (рис. 18).

Лістинг 5

Page 20: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 20

Рис. 18 Створення оброблювача події Leave елемента TextBox

Оскільки 4 текстових поля поводитимуть себе однаково при виході з них, доцільно

написати метод, який отримуватиме в якості параметрів екземпляр класу TextBox, а також

значення, яке необхідно встановити у відповідне поле у випадку введення помилкових

даних (лістинг 6). В даному методі використаний оператор оброблення виключних

ситуацій try … catch, більш докладно з особливостями його використання можна

ознайомитись в підручнику [1].

private void txtBox_Leave(TextBox txtBox, string value) { try { Convert.ToDouble(txtBox.Text); // спроба конвертувати текст в число } catch // у випадку виникнення помилки { MessageBox.Show("Введіть число!"); // виведення повідомлення txtBox.Text = value; // встановлення заданого значення txtBox.Focus(); // повернення фокусу в поле введення } }

Власне оброблювачі події Leave елементів TextBox міститимуть виклик методу

txtBox_Leave з відповідними параметрами (лістинг 7). Необхідно пам’ятати, що

створювати оброблювачі подій необхідно в інспекторі подій конкретного елементу

шляхом подвійного натискання лівої кнопки миші у відповідному полі (рис. 18).

private void textBoxL_Leave(object sender, EventArgs e) { txtBox_Leave(textBoxL, Convert.ToString(MyMech.L)); } private void textBoxR_Leave(object sender, EventArgs e) { txtBox_Leave(textBoxR, Convert.ToString(MyMech.R));

Лістинг 7

Лістинг 6

Page 21: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 21

} private void textBoxL1_Leave(object sender, EventArgs e) { txtBox_Leave(textBoxL1, Convert.ToString(MyMech.L1)); } private void textBoxB_Leave(object sender, EventArgs e) { txtBox_Leave(textBoxB, Convert.ToString(MyMech.B)); }

Підтвердження введення даних

Якщо числа введені коректно, користувач матиме можливість натиснути кнопку

«Прийняти». В цьому випадку необхідно перевірити співвідношення розмірів механізму.

В оброблювачі події Click елемента ButtonApply (якщо не перейменовували, вірогідно він

матиме ім ’я Button1) виконаємо наступні дії (лістинг 8):

1. Перетворимо текстові значення полів введення в числові.

2. Викличемо метод перевірки геометричних параметрів.

3. Якщо один з параметрів має недопустиме значення встановлюємо у відповідне

поле коректне значення і встановлюємо курсор в це поле.

4. Виведемо повідомлення користувачу.

5. Оновлюємо розрахункові параметри.

private void buttonApply_Click(object sender, EventArgs e) { // конвертуємо текстові значення полів введення в числові double L = Convert.ToDouble(textBoxL.Text); double R = Convert.ToDouble(textBoxR.Text); double L1 = Convert.ToDouble(textBoxL1.Text); double B = Convert.ToDouble(textBoxB.Text); string Message, code; double value; // змінні для отримання значень з методу // виклик методу перевірки значень MyMech.checkData(R, L, B, L1, out code, out Message, out value); MessageBox.Show(Message); // виведення повідомлення користувачу // встановлення курсору в помилкове поле і виведення допустимого значення switch (code) { case "R": textBoxR.Focus(); textBoxR.Text = Convert.ToString(value); break; case "L": textBoxL.Focus(); textBoxL.Text = Convert.ToString(value); break; case "B": textBoxB.Focus(); textBoxB.Text = Convert.ToString(value); break; case "L1": textBoxL1.Focus(); textBoxL1.Text = Convert.ToString(value); break; } //виведення розрахункових значень textBoxD.Text = Convert.ToString(MyMech.D); textBoxL2.Text = String.Format("{0:f2}", MyMech.L2); }

У випадку введення недопустимого значення параметра користувач побачить

відповідне повідомлення і йому буде запропоновано ввести інше значення (рис. 19). Якщо

всі дані введені вірно виведеться повідомлення «Вихідні дані коректні!» і будуть оновлені

розрахункові параметри.

Лістинг 8

Page 22: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 22

Рис. 19 Спроба введення недопустимого значення

Відмова від введених даних

Якщо користувач не хоче підтверджувати внесені зміни він повинен мати

можливість відмовитись від змін і повернутись до попередніх значень геометричних

параметрів механізму. В такому випадку необхідно властивостям Text полів введення

TextEdit привласнити значення полів екземпляру MyMech класу Mechanism в оброблювачі

події Click елементу ButtonCancel (лістинг 9).

private void buttonCancel_Click(object sender, EventArgs e) { textBoxR.Text = Convert.ToString(MyMech.R); textBoxL.Text = Convert.ToString(MyMech.L); textBoxL1.Text = Convert.ToString(MyMech.L1); textBoxB.Text = Convert.ToString(MyMech.B); textBoxD.Text = Convert.ToString(MyMech.D); textBoxL2.Text = String.Format("{0:f2}", MyMech.L2); }

4.4. Виведення результатів розрахунків

Задача виведення результатів розрахунків полягає в наступному:

1. Виведення таблиці значень кута положення коромисла φ та передаточної

функції u в залежності від кута положення кривошипу α при його зміні від 0° до

360° з кроком 10°.

2. Розрахунок і виведення граничних (максимальне і мінімальне) значень кута φ та

передаточної функції u.

3. Запис отриманих результатів в текстовий файл.

Розглянемо реалізацію цих трьох підзадач.

Лістинг 9

Page 23: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 23

Розрахунок кута φ та передаточної функції u

Для розрахунку значень кута φ та передаточної функції u в залежності від кута α

необхідно в класі Mechanism реалізувати дві функції (методи) Fi (alfa) та U(alfa). Приклад

реалізації наведено в Лістингу 10. Зверніть увагу на наступне: у зв’язку з тим, що в

подальшому використані методу Fi необхідно буде отримувати значення кута φ в

градусах і в радіанах, в класі Mechnism реалізовано перевантаження цього методу. Тобто

створено два методи з однаковим іменем, але з параметрами різних типів, які в результаті

повертають різні значення: кут в радіанах або кут в градусах в залежності від того, з

параметром якого типу вони викликані. Більш докладно про перевантаження методів

можна подивитись в підручнику [1].

public double Fi(double alfa)// кут передається в радіанах {

double Lk = Math.Sqrt(r * r + l * l - 2 * r * l * Math.Cos(alfa)); double fi = Math.PI - (Math.Asin(r * Math.Sin(alfa) / Lk) + Math.Acos((l1 * l1 + Lk *

Lk - l2 * l2) / (2 * l1 * Lk))); return fi; // кут в радіанах

} //перевантаження методу Fi public double Fi(int alfa)// кут передається в градусах { return Fi(alfa * Math.PI / 180) * 180 / Math.PI;//кут в градусах } public double U(int alfa) // кут передається в градусах {

double alfaR = alfa * Math.PI / 180; double Lk = Math.Sqrt(r * r + l * l - 2 * r * l * Math.Cos(alfaR)); double mu = Math.Atan(-r * Math.Sin(alfaR) / (l - r * Math.Cos(alfaR)) + Math.Acos((l2

* l2 + Lk * Lk - l1 * l1) / (2 * l2 * Lk))); double u = R * Math.Sin(alfaR - mu) / (L1 * Math.Sin(Fi(alfaR) - mu)); return u; }

Виведення таблиці значень

Всі результати розрахунків будемо виводити в новому вікні. Для цього необхідно

створити нову форму за допомогою пункту меню «Проект / Добавить форму Windows».

Нову форму бажано одразу ж перейменувати (властивість Name), наприклад, в

FormResults і змінити її заголовок (властивість Text) на «Таблиця значень функцій». Ця

форма використовуватиметься для взаємодії з користувачем при реалізації описаних вище

задач. Оскільки клас FormResults.cs повинен працювати з даними екземпляру класу

Mechanism, який було створено в головній формі (клас MainForm.cs) необхідно

реалізувати передачу посилання на об’єкт з одного класу в інший. Для цього створимо

нове поле класу FormResults.cs типу Mechanism і напишемо перевантаження конструктора

форми так як показано в Лістингу 10. В результаті виклику конструктора в змінній mech

буде міститись посилання на екземпляр класу Mechanism, тобто можна буде працювати з

його полями і викликати методи класу.

Лістинг 9

Page 24: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 24

public partial class FormResults : Form { Mechanism mech; public FormResults()//конструктор за замовчуванням { InitializeComponent(); } // перевантаження конструктора, // параметр конструктора - посилання на екземпляр класу Mechanism public FormResults(Mechanism mech) { InitializeComponent(); this.mech = mech; // привласнення полю посилання на екземпляр класу }

}

Для того щоб форму FormResults можна було викликати з головного вікна

програми у коді форми MainForm.cs необхідно виконати такі дії:

1. Створити новий екземпляр форми.

2. Показати форму користувачеві.

Ці дії повинні виконуватись у випадку, коли користувач обере пункт меню

«Розрахунки / Таблиця», тобто при виникненні події Click цього пункту меню. Створення

шаблону для оброблювача події не відрізняється від створення шаблону події Leave для

елемента TextBox (рис. 18). Приклад коду оброблювача наведено в Лістингу 10.

private void таблицяToolStripMenuItem_Click(object sender, EventArgs e) { // Створення нового екземпляру форми FormResults fmResults = new FormResults(MyMech); // Відображення форми fmResults.Show(); }

Якщо запустити програму на виконання, то при натисканні на пункт меню

«Розрахунки / Таблиця» ми повинні побачити порожню форму із заголовком «Таблиця

значень функцій».

Наступною задачею є створення інтерфейсу для виведення розрахункових значень.

Для виведення таблиці розмістимо на формі FormResults елемент DataGridView. Для того,

щоб створити і налаштувати стовпці таблиці необхідно викликати контекстне меню (права

кнопка миші) елемента DataGridView і обрати пункт «Правка столбцов» (рис. 20).

Лістинг 10

Лістинг 10

Page 25: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 25

Рис. 20 Налаштування зовнішнього виду стовпців таблиці

В даному прикладі розраховані значення будуть виводитись в 9 стовпчиків так як

показано на рис. 21.

Рис. 21 Елемент DataGridView

Оскільки при відображенні форми таблиця повинна бути одразу заповнена

розрахунковими значеннями, напишемо оброблювач для події завантаження (Load) форми

FormResults. Для розрахунку значень кута φ та передаточної функції u необхідно створити

цикл, в якому з кроком 10 змінювати значення параметра і викликати відповідні методи Fi

(alfa) та U(alfa) екземпляру mech класу Mechanism. Оскільки заповнення таблиці

відбувається в 9 стовпчиків, то параметр циклу i будемо змінювати від 0 до 120, а для

розрахунку кута α в 4-му стовпчику додаватимемо 120, а в 7-му стовпчику 240

(Лістинг 11). Для форматування виведення дробових чисел використаємо метод Format

класу String.

Page 26: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 26

private void FormResults_Load(object sender, EventArgs e) { for (int i=0; i<=120; i+=10) { dataGridView1.Rows.Add(i, String.Format("{0:f2}", mech.Fi(i)), String.Format("{0:f2}", mech.U(i)), i + 120, String.Format("{0:f2}", mech.Fi(i + 120)), String.Format("{0:f2}", mech.U(i + 120)), i + 240, String.Format("{0:f2}", mech.Fi(i + 240)), String.Format("{0:f2}", mech.U(i + 240))); } }

Розрахунок максимальних і мінімальних значень кута φ та передаточної функції u.

Розрахунок граничних значень кута φ та передаточної функції u доцільно

реалізувати в класі Mechanism. Для цього в опис класу додамо поля, які відповідатимуть

цим значенням, властивості, які відповідатимуть за доступ до цих полів, та метод

calcMinMax(), в якому реалізуємо стандартний алгоритм пошуку максимального і

мінімального значення (Лістинг 12).

public class Mechanism {

... // поля

double fiMax; double fiMin; double uMax; double uMin; ...

// властивості public double FiMax { get {return fiMax;} } public double FiMin { get {return fiMin; } } public double UMax { get {return uMax; } } public double UMin { get {return uMin; } }

// метод, що реалізує розрахунок мінімальних та максимальних значень функцій

private void calcMinMax() { //присвоєння початкових значень змінним fiMin = Fi(0); fiMax = Fi(0); uMin = U(0); uMax = U(0);

Лістинг 11

Лістинг 11

Page 27: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 27

double angleFi, angleU; //цикл зміни кута α for (int i = 0; i < 360; i++) { angleFi = Fi(i); angleU = U(i); if (angleFi < fiMin) fiMin = angleFi; if (angleFi > fiMax) fiMax = angleFi; if (angleU < uMin) uMin = angleU; if (angleU > uMax) uMax = angleU; } }

}

Виведення граничних значень функцій

Для виведення граничних значень функцій на формі FormResults розмістимо ще

один елемент DataGridView і налаштуємо його зовнішній вид так, як показано на рис. 22.

Рис. 22 Додано елемент для виведення таблиці граничних значень

Для заповнення нової таблиці даними допишемо виклик властивостей FiMin,

FiMax, UMin, UMax екземпляру mech класу Mechanism в оброблювачі події Load форми

FormResults (Лістинг 12).

private void FormResults_Load(object sender, EventArgs e)

{

...

dataGridView2.Rows.Add("Кут положення кривошипа Alfa", 0, 360); dataGridView2.Rows.Add("Кут положення коромисла Fi", String.Format("{0:f2}", mech.FiMin), String.Format("{0:f2}", mech.FiMax)); dataGridView2.Rows.Add("Передатна функція U", String.Format("{0:f2}", mech.UMin), String.Format("{0:f2}", mech.UMax)); }

Лістинг 12

Page 28: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 28

Результат кодування оброблювача події Load форми FormResults наведено на

рис. 23.

Рис. 23 Результат виведення таблиці значень кута φ та передаточної функції u

Page 29: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 29

4.5. Запис результатів розрахунків в файл

В додатку, що розробляється, необхідно забезпечити можливість запису

результатів розрахунків в текстовий файл. Рекомендований вид текстового файлу

наведений на рис. 24.

Рис. 24 Зміст текстового файлу зі збереженими результатами розрахунків

Розмістимо на формі кнопку «Зберегти дані» для виклику діалогу збереження

файлу. Для реалізації відображення вікна діалогу розмістимо на формі елемент

SaveFileDialog (рис. 25). Для створеного екземпляра цього елемента у властивості

DefaultExt встановимо значення txt для того, щоб файли, які будуть зберігатись,

отримували автоматично коректне розширення.

Рис. 25 Розміщення кнопки «Зберегти дані» та елемента «SaveFileDialog»

Після цього необхідно написати оброблювач події «Click» кнопки «Зберегти дані».

Для відображення вікна діалогу використаємо метод ShowDialog() класу SaveFileDialog.

Цей метод повертає значення типу System.Windows.Forms.DialogResult. Якщо користувач

натиснув кнопку «Зберегти» в діалоговому вікні, то результат буде DialogResult.OK, якщо

користувач натиснув кнопку «Відміна» - результат буде DialogResult.Cancel.

Page 30: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 30

Для збереження файлу використаємо метод OpenFile(), що надає потік, в який

виконується запис файлу. На основі цього потоку створимо символьний потік, оскільки в

результаті необхідно отримати текстовий файл (див. Лістинг 13).

private void btnSave_Click(object sender, EventArgs e) //збереження даних в файл { Stream f; //створюємо об'єкт "потік" //відображаємо вікно діалогу і у випадку підтвердження збереження файлу виконуємо код if (saveFileDialog1.ShowDialog()==DialogResult.OK) { //відкриваємо обраний файл на читання/запис f = saveFileDialog1.OpenFile(); if (f != null) //відкриття відбулось успішно { //створюємо символьний потік для запису текстової інформації на основі потоку f StreamWriter ft = new StreamWriter(f); //виконуємо запис необхіної інформації ft.WriteLine("Результати розрахунків:"); ft.WriteLine("{0}: min = {1}, max = {2}","Кут положення кривошипа Alfa", 0, 360); ft.WriteLine("{0}: min = {1:f2}, max = {2:f2}", "Кут положення коромисла Fi", mech.FiMin, mech.FiMax); ft.WriteLine("{0}: min = {1:f2}, max = {2:f2}", "Передатна функція U", mech.UMin, mech.UMax); ft.WriteLine(); ft.WriteLine("{0,4} {1,10} {2,10}","Alfa", "Fi", "U"); for (int i = 0; i <= 360; i += 10) { ft.WriteLine("{0,4} {1,10:f2} {2,10:f2}", i, mech.Fi(i), mech.U(i)); } ft.Close(); //закриваємо символьний потік } f.Close();//закриваємо потік f } }

Для випадку, коли користувач бажає закрити вікно без збереження даних,

розмістимо на формі ще одну кнопку «Вийти» і в оброблювачі події Click цієї кнопки

розмістимо виклик методу Close(). Остаточний вид інтерфейсу вікна «Таблиця значень

функцій» наведено на рис. 26.

Рис. 26 Вікно «Таблиця значень функцій»

Лістинг 13

Page 31: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 31

4.6. Виведення графіків функцій, що описують механізм

Графіки функцій, що описують механізм, будемо виводити в новому вікні. Для

цього необхідно створити нову форму, назвати її відповідним чином, наприклад

FormCharts, і змінити заголовок, наприклад на «Графіки». У класі FormCharts.cs,

необхідно реалізувати передачу посилання на об’єкт класу Mechanism так само, як це було

зроблено для попередньої форми (див. Лістинг 10).

Побудову графіків будемо виконувати за допомогою елемента Chart. Для

відображення графіків функцій на двох окремих вкладниках можна використати елемент

TabControl (див. рис. 27).

Рис. 27 Розміщення елементів TabControl і Chart

Налаштувати зовнішній вид графіків можна за допомогою властивості Series. В

діалоговому вікні (рис. 28), яке з’явиться при обранні цієї властивості, необхідно обрати

тип діаграми Spline. В цьому ж вікні можна задати товщину лінії (властивість

BorderWidth) та її колір (властивість Color).

Рис. 28 Налаштування зовнішнього виду графіка

Page 32: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 32

Зовнішній вид області відображення графіків можна налаштувати за допомогою

властивості ChartAreas. В діалоговому вікні, яке з’явиться для роботи з цією властивістю,

можна викликати вікно налаштування осей (див. рис. 29).

Рис. 29 Зміна зовнішнього виду області відображення графіків

Будувати графіки будемо за подією Load – завантаження форми. Зазначимо, що

властивості відображення графіків і області побудови можна змінювати і програмно.

Наприклад, мінімальне і максимальне значення по осям X та Y, а також інтервал сітки

можна змінити так, як показано в Лістингу 14. Власне побудова графіку виконується за

допомогою циклу зі зміною параметра від 0 до 360, в якому на кожному кроці додається

нова точка з координатами, які відповідають значенню кута α за віссю X і значенню

функції φ(α) або u(α) за віссю Y (див. Лістинг 14).

private void fmCharts_Load(object sender, EventArgs e) { //будуємо графік функції положення коромисла Fi //налаштовуємо вісь Х chartFi.ChartAreas[0].AxisX.Maximum = 360; chartFi.ChartAreas[0].AxisX.Minimum = 0; chartFi.ChartAreas[0].AxisX.Interval = 30; //налаштовуємо вісь Y chartFi.ChartAreas[0].AxisY.Minimum = Math.Floor(mech.FiMin); chartFi.ChartAreas[0].AxisY.Maximum = Math.Round(mech.FiMax+1); chartFi.ChartAreas[0].AxisY.Interval = 10; //власне побудова графіку for (int i = 0; i < 360; i++) { chartFi.Series[0].Points.AddXY(i, mech.Fi(i)); } //будуємо графік передатної функції U ... }

Остаточний вид вікна виведення графіків функцій показано на рис. 30.

Лістинг 14

Page 33: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 33

Рис. 30 Виведення графіків функцій φ(α) та u(α)

4.7. Виведення інформації про программу

Виведення інформації щодо механізму,

який моделюється, та основних можливостей

програми необхідно реалізувати в окремому

вікні. Для виведення тексту можна використати

елемент RichTextBox та його властивість Lines.

Необхідно пам’ятати, що текст не повинен

містити орфографічних або синтаксичних

помилок, а також повинен бути доступним

лише для читання. Орієнтовний вид вікна «Про

програму» наведено на рис. 31.

4.8. Виведення інформації про автора

Виведення інформації про автора

програми необхідно реалізувати в окремому

вікні. Для виведення тексту можна використати

елемент RichTextBox та його властивість Lines.

Необхідно пам’ятати, що текст не повинен

містити орфографічних або синтаксичних

помилок, а також повинен бути доступним лише

для читання. Орієнтовний вид вікна «Про автора»

наведено на рис. 32.

Рис. 31 Вікно «Про програму»

Рис. 32 Вікно «Про автора»

Page 34: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 34

Короткий вступ до графіки

Для виведення ліній, геометричних фігур, тексту та зображень необхідно створити

екземпляр класу Graphics, який описаний в просторі імен System.Drawing. Існують різні

способи створення цього об’єкта.

Перший спосіб полягає в тому, що посилання на об’єкт Graphics отримують з

параметру PaintEventArgs, який передається в оброблювач події Paint. Ця подія виникає

при відображенні форми або елементу керування.

Другий спосіб – використання методу CreateGraphics, який описано в класах форми

та елементу керування.

Третій спосіб – створення об’єкту за допомогою об’єкту-нащадка Image. Цей

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

Після створення об’єкту типу Graphics його можна застосовувати для виведення

ліній, геометричних фігур, тексту і зображень. Основними об’єктами, які при цьому

використовуються, є об’єкти класів:

Pen – малювання ліній та контурів геометричних фігур;

Brush – заповнення областей;

Font – виведення тексту;

Color – колір.

4.9. Виведення спрощеної параметричної графічної моделі механізму

На цьому етапі необхідно реалізувати виведення на форму графічного зображення

спрощеної параметричної схеми механізму з позначенням основних параметрів.

Створення параметричного зображення передбачає, що при зміні користувачем одного

або декількох параметрів механізму графічний образ повинен перебудовуватись

відповідно до змін.

Для реалізації побудови спрощеного ескізу необхідно забезпечити наступний

функціонал класу Mechanism:

Розрахунок координат опорних точок

Відображення розмірів

Відображення спрощеної схеми

Всі методи, наведені далі будуть використовувати об’єкти Pen і Brush, тому

доцільно додати до опису класу Mechanism відповідні поля, а також написати

ініціалізацію цих об’єктів в конструкторі класу (див. лістинг 15).

Pen pen; SolidBrush brush; public Mechanism() { SetInitialData();

Лістинг 15

Page 35: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 35

pen = new Pen(Color.Black); brush = new SolidBrush(Color.White); }

Розрахунок координат опорних точок. Оскільки розрахунок координат опорних

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

описати його за допомогою окремого методу (див. лістинг 16). Метод basePoints має

наступні параметри: координати локальної системи координат ескізу (x0, y0), кут

положення кривошипу alfa та вихідний параметр – двомірний масив, в якому

зберігатимуться розраховані координати вузлів. Оскільки вузлових точок 4 і кожна з них

має дві координати, розмірність масиву 2x4.

private void basePoints(int x0, int y0, double alfa, out int[,] points) { points = new int [2,4]; points[0,0] = (int)Math.Round(x0 - l / 2); points[1,0] = y0; points[0, 1] = (int)Math.Round(points[0, 0] + R * Math.Cos(alfa)); points[1, 1] = (int)Math.Round(points[1, 0] - R * Math.Sin(alfa)); points[0,3] = (int)Math.Round(x0 + l / 2); points[1,3] = y0; points[0, 2] = (int)Math.Round(points[0, 3] + l1 * Math.Cos(Fi(alfa))); points[1, 2] = (int)Math.Round(points[1, 3] - l1 * Math.Sin(Fi(alfa))); }

Відображення розмірів. Оскільки відображення розмірів залежить лише від

координат опорних точок і не залежить від типу схеми (спрощена або повна), доцільно

створити окремий метод для виведення розмірів (лістинг 16). Метод dimensions в якості

параметрів отримує: об’єкт типу Graphics для виведення розмірів, кут положення

кривошипу alfa та масив координат опорних точок points.

Зазначимо, що для виведення розмірних стрілок та позначень розмірів доцільно

скористатись додаткової бібліотекою grPrimitives1, що містить опис класу

graphicPrimitives, в якому реалізовані методи для допоміжних побудов. В прикладі

(лістинг 17) створено екземпляр simpleScheme класу graphicPrimitives і використані

методи dimLinear та dimAngular. Детальний опис особливостей використання методів

класу graphicPrimitives наведено у додатку А.

public void dimensions(Graphics g, double alfa, int[,] points)

{ graphicPrimitives simpleScheme = new graphicPrimitives(g); simpleScheme.dimLinear(points[0, 0], points[1, 0], points[0, 1], points[1, 1], Convert.ToString(r)); simpleScheme.dimLinear(points[0, 1], points[1, 1], points[0, 2], points[1, 2], String.Format("{0:f2}",l2)); simpleScheme.dimLinear(points[0, 2], points[1, 2], points[0, 3], points[1, 3], Convert.ToString(l1)); simpleScheme.dimLinear(points[0, 0], points[1, 0], points[0, 3], points[1, 3], Convert.ToString(l));

1 Отримати цю бібліотеку необхідно у викладача.

Лістинг 17

Лістинг 16

Page 36: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 36

simpleScheme.dimAngular(points[0, 0], points[1, 0], points[0, 3], points[1, 3], points[0, 1], points[1, 1], String.Format("{0:f2}", alfa*180/Math.PI)); simpleScheme.dimAngular(points[0, 3], points[1, 3], points[0, 3] + 1, points[1, 3], points[0, 2], points[1, 2], String.Format("{0:f2}", Fi(alfa) * 180 / Math.PI)) }

Відображення спрощеної схеми. З метою відображення спрощеної схеми створимо

метод drawSimpleScheme (Лістинг 18) з параметрами: об’єкт типу Graphics для виведення

ескізу, максимальна ширина та висота полотна виведення, кут положення кривошипу alfa

та ознаку необхідності нанесення розмірів на ескіз dim. Порядок дій при побудові

спрощеного ескізу наступний:

Розрахунок початку локальної системи координат ескізу.

Розрахунок координат базових точок.

Відображення графічних елементів (опор, вузлів, ліній і т.д.) з прив’язкою до

базових точок.

Відображення розмірів.

public void drawSimpleScheme(Graphics g, int width, int height, double alfa, bool dim) { // локальна система координат схеми int x0 = width / 2; int y0 = height /2 ; int[,] points; // виклик методу розрахунку координат базових вузлів basePoints(x0, y0, alfa, out points); //створення екземпляру класу graphicPrimitives graphicPrimitives simpleScheme = new graphicPrimitives(g); //відображення опор simpleScheme.Opora(points[0, 0], points[1, 0], 270); simpleScheme.Opora(points[0, 3], points[1, 3], 270); //відображення ланок за допомогою ліній g.DrawLine(pen, points[0, 0], points[1, 0], points[0, 1], points[1, 1]); g.DrawLine(pen, points[0, 1], points[1, 1], points[0, 2], points[1, 2]); g.DrawLine(pen, points[0, 2], points[1, 2], points[0, 3], points[1, 3]); //відображення вузлів simpleScheme.Node(points[0, 0], points[1, 0]); simpleScheme.Node(points[0, 1], points[1, 1]); simpleScheme.Node(points[0, 2], points[1, 2]); simpleScheme.Node(points[0, 3], points[1, 3]); //відображення розмірів у разі необхідності if (dim) dimensions(g, alfa, points); }

Спрощену параметричну графічну модель механізму будемо виводити в новому

вікні. Для цього необхідно створити нову форму, назвати її відповідним чином, наприклад

FormSchema, і змінити заголовок, наприклад на «Спрощена схема». У класі

FormSchema.cs, необхідно реалізувати передачу посилання на об’єкт класу Mechanism так

само, як це було зроблено для попередніх форм (див. Лістинг 10).

Інтерфейс форми виведення спрощеного ескізу механізму наведено на рис. 33.

Лістинг 18

Page 37: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 37

Рис. 33 Спрощена кінематична схема механізму

На формі FormSchema розмістити елемент PictureBox, для якого написати

оброблювач події Paint (Лістинг 19). В цьому оброблювачі використаємо посилання на

об’єкт Graphics, що міститься в параметрі e (класу PaintEventArgs) методу

pictureBox1_Paint.

private void pictureBox1_Paint(object sender, PaintEventArgs e)

{ e.Graphics.Clear(Color.White);//очищення області виведення e.Graphics.SmoothingMode = SmoothingMode.HighQuality; //встановлення згладжування2 //виклик методу відображення спрощеної схеми механізму mech.drawSimpleScheme(e.Graphics, pictureBox1.Width, pictureBox1.Height, Math.PI / 3, true); }

4.10 Виведення повної параметричної графічної моделі механізму

На цьому етапі необхідно реалізувати виведення на форму графічного зображення

повної параметричної схеми механізму з позначенням основних розмірів. Створення

параметричного зображення передбачає, що при зміні користувачем одного або декількох

параметрів механізму графічний образ повинен перебудовуватись відповідно до змін.

З метою відображення повної схеми створимо метод drawSimpleScheme

(Лістинг 20) з параметрами: об’єкт типу Graphics для виведення ескізу, максимальна

ширина width та висота height полотна виведення, кут положення кривошипу alfa, ознаку

необхідності виконувати заливку зображень ланок filled та ознаку необхідності нанесення

розмірів на ескіз dim. Порядок дій при побудові повного ескізу наступний:

Розрахунок початку локальної системи координат ескізу.

Розрахунок координат базових точок.

Відображення графічних елементів з прив’язкою до базових точок.

Відображення розмірів.

2 Для використання необхідно підключити простір імен System.Drawing.Drawing2D за

допомогою директиви using

Лістинг 19

Page 38: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 38

public void drawFullScheme(Graphics g, int width, int height, double alfa, bool filled, bool dim) { double k = 1; // коефіцієнт масштабування для коректного відображення // локальна система координат схеми int x0 = width / 2; int y0 = height /2; //виклик функції розрахунку базових вузлів int[,] points; basePoints(x0, y0, alfa, out points); //побудова повної схеми механізму graphicPrimitives fullScheme = new graphicPrimitives(g); //корпус int r1 = (int)(k * d / 6);//радіус заокруглення кутів корпус brush.Color = Color.Transparent; if (filled) { brush.Color = Color.Salmon; g.FillRectangle(brush, points[0, 0] - r1, points[1, 0], (int)(k * l + 2 * r1), (int)(k * b)); g.FillRectangle(brush, points[0, 0], points[1, 0] - r1, (int)(k * l), r1 + 1); } g.FillEllipse(brush, points[0, 3] - r1, points[1, 3] - r1, 2 * r1, 2 * r1); g.DrawArc(pen, points[0, 0] - r1, points[1, 0] - r1, 2 * r1, 2 * r1, 180, 90); g.DrawArc(pen, points[0, 3] - r1, points[1, 3] - r1, 2 * r1, 2 * r1, 270, 90); g.DrawLine(pen, points[0, 3] + r1, points[1, 3], points[0, 3] + r1, points[1, 3] + (int)(k * b)); g.DrawLine(pen, points[0, 3] + r1, points[1, 3] + (int)(k * b), points[0, 0] - r1, points[1, 3] + (int)(k * b)); g.DrawLine(pen, points[0, 0] - r1, points[1, 3] + (int)(k * b), points[0, 0] - r1, points[1, 0]); g.DrawLine(pen, points[0, 0], points[1, 0] - r1, points[0, 3], points[1, 3] - r1); //кривошип if (filled) { brush.Color = Color.Violet; g.FillEllipse(brush, points[0, 0] - (int)Math.Round(k * d / 2), points[1, 0] - (int)Math.Round(k * d / 2), (int)Math.Round(k * d), (int)Math.Round(k * d)); } g.DrawEllipse(pen, points[0, 0] - (int)Math.Round(k * d / 2), points[1, 0] - (int)Math.Round(k * d / 2), (int)Math.Round(k * d), (int)Math.Round(k * d)); //розрахунок базових точок пазів кривошипу та їх побудова int[,] xp = new int[3, 2]; int[,] yp = new int[3, 2]; int rMax = (int)Math.Round(0.9 * r * k); int rMin = (int)Math.Round(0.2 * r * k); if (filled) brush.Color = Color.White; for (int i = 0; i < 3; i++) { xp[i, 0] = points[0, 0] + (int)Math.Round(rMax * Math.Cos(alfa + Math.PI + 2 * Math.PI / 3 * (i - 1))); yp[i, 0] = points[1, 0] - (int)Math.Round(rMax * Math.Sin(alfa + Math.PI + 2 * Math.PI / 3 * (i - 1))); xp[i, 1] = points[0, 0] + (int)Math.Round(rMin * Math.Cos(alfa + Math.PI + 2 * Math.PI / 3 * (i - 1))); yp[i, 1] = points[1, 0] - (int)Math.Round(rMin * Math.Sin(alfa + Math.PI + 2 * Math.PI / 3 * (i - 1))); fullScheme.Section(pen, brush, xp[i, 0], yp[i, 0], xp[i, 1], yp[i, 1], (int)(5 * k));

Лістинг 20

Page 39: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 39

} //ланки - шатун і коромисло if (filled) brush.Color = Color.BurlyWood; fullScheme.Section(pen, brush, points[0, 2], points[1, 2], points[0, 3], points[1, 3], 15); if (filled) brush.Color = Color.RoyalBlue; fullScheme.Section(pen, brush, points[0, 1], points[1, 1], points[0, 2], points[1, 2], 15); //вузли for (int i = 0; i < 4; i++) fullScheme.Node(points[0, i], points[1, i]); //вивдення ромірних стрілок if (dim) dimensions(g, k, points); }

Повну параметричну графічну модель механізму будемо виводити в новому вікні.

Для цього необхідно створити нову форму, назвати її відповідним чином, наприклад

FormFullScheme, і змінити заголовок, наприклад на «Повна схема». У класі

FormFullScheme.cs, необхідно реалізувати передачу посилання на об’єкт класу Mechanism

так само, як це було зроблено для попередніх форм (див. Лістинг 10).

Інтерфейс форми виведення повного ескізу механізму наведено на рис. 34.

Рис. 34 Повна кінематична схема механізму

На формі FormFullScheme розмістити елемент PictureBox, для якого написати

оброблювач події Paint, подібний до створеного на попередньому етапі (Лістинг 19).

4.11 Анімація графічної моделі механізму

На даному етапі необхідно реалізувати виведення на форму графічного зображення

спрощеної та/або повної параметричної схеми механізму з можливістю зміни швидкості і

напряму обертання кривошипу, а також з можливістю замальовування всіх положень

механізму. З цією метою необхідно створити нову форму, назвати її відповідним чином,

наприклад FormKinematics, і змінити заголовок, наприклад на «Кінематика». На формі

розмістимо такі елементи (рис. 35): дві кнопки Button; два залежних перемикачі

RadioButton; незалежний перемикач CheckBox; напис Label; елемент зміни числового

значення на одиницю NumericUpDown; таймер Timer.

Page 40: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 40

Рис. 35 Елементи форми виведення анімації руху механізму

Додамо в опис класу FormKinematics поля типу Mechanism і Graphics, а також поле

angle, яке відповідатиме за кут повороту кривошипу. Для ініціалізації відповідних полів

напишемо перевантаження конструктора форми (Лістинг 21).

public partial class FormKinematics : Form { Mechanism myMech; Graphics graph; int angle =45; public FormKinematics() { InitializeComponent(); } public FormKinematics(Mechanism myMech):this() { this.myMech = myMech; graph = pictureBox1.CreateGraphics(); graph.SmoothingMode = SmoothingMode.HighQuality; } ... }

З метою відображення ескізу механізму при відкритті форми напишемо

оброблювач події Paint елемента PictureBox (Лістинг 22).

private void pictureBox1_Paint(object sender, PaintEventArgs e) { e.Graphics.Clear(Color.White); myMech.drawSimpleScheme(e.Graphics, pictureBox1.Width, pictureBox1.Height, angle * Math.PI / 180,false); }

Для перемальовування ескізу механізму створимо власний метод paint (Лістинг 23).

Лістинг 22

Лістинг 21

Page 41: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 41

private void paint() { //очищення області виведення від попереднього положення механізму if (checkBox1.Checked) graph.Clear(Color.White); //вибір спрощена/повна схема за допомогою залежного перемикача RadioButton if (radioButton1.Checked) myMech.drawSimpleScheme(graph,pictureBox1.Width, pictureBox1.Height, angle * Math.PI / 180, false); else myMech.drawFullScheme(graph, pictureBox1.Width, pictureBox1.Height, angle * Math.PI / 180, false, false); }

Анімацію реалізуємо за допомогою елемента Timer (Лістинг 24). Таймер через

певні проміжки часу, які задаються властивістю Interval генерує подію Tick. Якщо таймер

запущено за допомогою методу Start(), оброблювач події Tick виконуватиметься поки його

не буде зупинено за допомогою методу Stop().

//оброблювач події Tick таймера private void timer1_Tick(object sender, EventArgs e) { angle = angle + (int)numericUpDown1.Value; if (angle > 360) angle = angle-360; if (angle < -360) angle = angle + 360; paint(); } //оброблювач натискання кнопки Старт private void btnStart_Click(object sender, EventArgs e) { timer1.Start(); } //оброблювач натискання кнопки Стоп private void btnStop_Click(object sender, EventArgs e) { timer1.Stop(); }

//оброблювачі подій вибору незалежних перемикачів private void radioButton2_CheckedChanged(object sender, EventArgs e)

{ paint(); } private void radioButton1_CheckedChanged(object sender, EventArgs e) { paint(); }

Інтерфейс форми виведення анімації роботи механізму наведено на рис. 36.

Лістинг 24

Лістинг 23

Page 42: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 42

Рис. 36 Інтерфейс форми виведення анімації руху механізму

5. Отримання результату і його інтерпретація

Отриманий результат є комп'ютерною моделлю певного простого механізму.

Математична модель, що закладена в основу програми, є суттєво спрощеною та

ідеалізованою. У ній, наприклад не враховуються похибки механізму, геометричні

характеристики перерізу ланок і фізичні характеристики матеріалу з якого вони зроблені,

не враховується тертя, опір тощо. В нашому випадку порівнювати результати роботи

системи із результатами натурних випробувань реального механізму не має сенсу і не має

можливості, адже виконана робота є учбовою.

В той же час, програма дозволяє вивчати особливості даного механізму в межах

діапазонів параметрів. Це може дозволити досліджувати механізм і робити певні висновки

про нього (наприклад, наявних "мертвих" точок, точок екстремального навантаження

тощо). Розроблена програма має також за мету ознайомити із принципом дії певного

механізму.

Система може удосконалюватись. Для цього необхідно вводити нові методи. В

межах завдання роботу можна вважати виконаною.

6. Передача замовнику результату роботи

Закінчену і налагоджену програму слід передати замовнику. Замовником учбової

курсової роботи є викладач. У такому випадку слід підготувати звіт, дотримуючись вимог.

Окрім звіту передаються файли курсової роботи. Усі файли, які необхідні для

коректної роботи програми слід записати в окрему папку. Ця папка повинна мати ім'я, що

складається із коду групи і прізвища автора (латинськими літерами), наприклад MT-

22c_Kovalenko.

7. Супровід системи

Для учбової системи, якою є курсова робота з інформатики, супровід не

виконується.

Page 43: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 43

Додаток А. Опис методів класу graphicPrimitives бібліотеки grPrimitives

dimLinear(int x1, int y1, int x2, int y2, string text) –

метод виведення лінійного розміру від точки до точки. Метод дозволяє виводити

горизонтальні, вертикальні та нахилені лінійні розміри. Для спрощення стрілочки на

розмірах не виводяться. Напис на розмірі завжди є текстовим, тому, якщо необхідно

вивести числове значення, його слід попередньо перетворити у рядок.

Для виведення розміру слід вказати такі параметри:

x1,y1 - координати першої точки розміру.

x2,y2 - координати другої точки розміру.

Text - позначення розміру або його величина (текст).

dimAngular(int x1, int y1, int x2, int y2, int x3, int y3, string text) –

метод виведення кутового розміру. Дуга кутового розміру проводиться від точки 2 до

точки 3 проти годинникової стрілки. Точка 1 визначає центр дуги.

Для виведення розміру слід вказати такі параметри:

x1,y1 - координати точки центру кутового розміру.

x2,y2 - координати точки від якої проводиться дуга.

x3,y3 - координати точки до якої проводиться дуга.

Text - позначення розміру або його величина (текст).

Opora(int x, int y, int orient) –

метод, який відображає орієнтовану опору (без кола в фіксованій точці). Параметрами є: x,

y - координати базової точки опори. Orient - кут орієнтації основи опори. Може приймати

значення: 0, 90, 180 і 270.

Node(int x, int y) – метод, що відображає вузлову точку механізму у вигляді

невеликого кола. Параметри: x, y - координати центру вузлової точки.

0 90 180 270Orient =

B

PolzunHor(int x, int y, bool osn)–

метод виведення повзуна, що переміщується горизонтально. Базовою точкою повзуна є

його центр. Повзуни можуть виводитись у двох модифікаціях - із напрямною (перша

схема) і без напрямної (друга схема). Відображати чи ні такі напрямні визначає логічний

параметр osn.

0 90 180 270Orient =

B(x1,y1) (x2,y2)

Text

0 90 180 270Orient =

B(x1,y1) (x2,y2)

Text

(x1,y1)

(x3,y3)

(x2,y2)

Text

0 90 180 270Orient =

B(x1,y1) (x2,y2)

Text

(x1,y1)

(x3,y3)

(x2,y2)

TextBase Point(x,y)

Page 44: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 44

Параметрами є:

x,y - координати центральної точки повзуна.

osn - логічний параметр, який визначає, виводити (true) чи ні (false) напрямні для

повзуна.

PolzunVer(int x, int y, bool osn)–

метод виведення повзуна, що переміщується вертикально.

Параметрами методу є:

x,y - координати центральної точки повзуна.

osn - логічний параметр, який визначає, виводити (true) чи ні (false) напрямні для

повзуна.

PolzunAng(int x1, int y1, int x2, int y2) – метод виведення повзуна, що має довільний нахил.

Параметрами метода є:

x1,y1 - координати центральної точки повзуна

x2,y2 - координати точки, на яку "дивиться" повзун.

Kulisa(int x1, int y1, int x2, int y2, int l)– метод виведення спрощеної куліси (пряма лінія фіксованої довжини).

Параметрами методу є:

x1,y1 - координати нерухомої точки куліси.

x2,y2 - координати точки, через яку куліса проходить.

l - довжина куліси.

KulisaPaz(int x1,int y1,int x2,int y2, int L, int Lp, bool Torez)– метод виведення ускладненої куліси.

Параметрами методу є:

x1,y1 - координати нерухомої точки куліси.

x2,y2 - координати точки, через яку куліса проходить.

L - загальна довжина куліси.

Lp - довжина пазу куліси (не повинна перевищувати L).

Torez - логічний параметр, який визначає, виводити (true) чи ні (false) торцеві

частини куліси.

0 90 180 270Orient =

B(x1,y1) (x2,y2)

Text

(x1,y1)

(x3,y3)

(x2,y2)

Text

osn=true osn=false

Base Point(x,y)

0 90 180 270Orient =

B(x1,y1) (x2,y2)

Text

(x1,y1)

(x3,y3)

(x2,y2)

Text

osn=true osn=false

osn=true osn=false

Base Point(x,y)

0 90 180 270Orient =

B(x1,y1) (x2,y2)

Text

(x1,y1)

(x3,y3)

(x2,y2)

Text

osn=true osn=false

osn=true

osn=false

Base Point(x1,y1)

(x2,y2)

0 90 180 270Orient =

B(x1,y1) (x2,y2)

Text

(x1,y1)

(x3,y3)

(x2,y2)

Text

osn=true osn=false

osn=true

osn=false

L

(x1,y1)

(x2,y2)

Page 45: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 45

StoykaHor(int x,int y,int lUp,int LDn,int Orient) – метод виведення горизонтальної стійки з пазом. Метод дозволяє вивести стійку, що може

переміщуватись горизонтально. Базовою точкою стійки є точка, яка лежить на перетині

пазу стійки та її напрямної. Параметр Orient дозволяє вибрати одне із положень стійки.

Для лівої стійки на схемі він має значення 0, для правої - 180.

Параметрами методу є:

x,y - координати базової точки стійки.

LUp - розмір пазу вверх.

LDn - розмір пазу вниз.

Orient - напрямок напрямної: 0 - управо, 180 - уліво.

StoykaVer(int x, int y, int lRt, int LLf, int Orient) – метод виведення вертикальної стійки з пазом.

Параметрами методу є:

x,y - координати базової точки стійки.

LRt - розмір пазу вправо.

LLf - розмір пазу вліво.

Orient - напрямок напрямної: 90 - уверх, 270 - униз.

0 90 180 270Orient =

B(x1,y1) (x2,y2)

Text

(x1,y1)

(x3,y3)

(x2,y2)

Text

osn=true osn=false

osn=true

osn=false Torez=false Torez=true Torez=trueL

Lp Lp

LL=Lp

(x1,y1)

(x2,y2) (x2,y2)

(x1,y1) (x1,y1)

(x2,y2)

0 90 180 270Orient =

B(x1,y1) (x2,y2)

Text

(x1,y1)

(x3,y3)

(x2,y2)

Text

osn=true osn=false

osn=true

osn=false Torez=false orient=0Torez=true Torez=trueorient=180

LU

pL

Dn

LD

nL

Up

Base Point(x,y)

Base Point(x,y)

0 90 180 270Orient =

B(x1,y1) (x2,y2)

Text

(x1,y1)

(x3,y3)

(x2,y2)

Text

osn=true osn=false

osn=true

osn=false Torez=false orient=0Torez=true Torez=trueorient=180

orient=90 orient=270

LRtLLf

LLf LRt

Base Point(x,y)

Base Point(x,y)

Page 46: ІНФОРМАТИКАtm-mmi.kpi.ua/images/navchannia/disciplines/in... · Звіт з курсової роботи повинен бути виконаний українською

Пасічник В.А., Лашина Ю.В. Сімута Р.Р., Інформатика. Курсова робота, © 2014-2015 46

Рекомендована література

1. Павловская Т. А. C#. Программирование на языке высокого уровня.

Учебник для вузов / Т. А. Павловская. – СПб.: Питер, 2007. – 432 с.: ил.

2. Фролов А.В., Фролов Г.В. Визуальное проектирование приложений C# – М.:

КУДИЦ-ОБРАЗ, 2003. – 512 с.