p align="left"> if drawVector then begin if checkFrame.Checked then begin Pen.Color:=cbFrame.Selected; Pen.Style:=psSolid; DrawLineCustom(0, 0, 0, vectorx, 0, 0, 2); DrawLineCustom(0, 0, 0, 0, vectory, 0, 2); DrawLineCustom(0, 0, 0, 0, 0, vectorz, 2); DrawLineCustom(0, vectory, 0, vectorx, vectory, 0, 1); DrawLineCustom(vectorx, vectory, 0, vectorx, 0, 0, 1); DrawLineCustom(vectorx, 0, vectorz, 0, 0, vectorz, 1); DrawLineCustom(0, vectory, vectorz, 0, 0, vectorz, 1); DrawLineCustom(0,vectory,vectorz,vectorx,vectory,vectorz, 1); DrawLineCustom(vectorx,vectory,vectorz,vectorx,0,vectorz, 1); DrawLineCustom(vectorx, vectory,0,vectorx,vectory,vectorz, 1); DrawLineCustom(vectorx, 0, 0, vectorx, 0, vectorz, 1); DrawLineCustom(0, vectory, 0, 0, vectory, vectorz, 1); end; Pen.Color:=cbVector.Selected; DrawLineCustom(0, 0, 0, vectorx, vectory, vectorz, 2); //Дуги if drawArc then begin vx := round(cos(StrToInt(editA.Text)*(pi/180))*2); vy := round(cos(StrToInt(editB.Text)*(pi/180))*2); vz := round(cos(StrToInt(editC.Text)*(pi/180))*2); Pen.Color:=clBlack; DrawLineCustom(2,0,0,vx,vy,vz,2); DrawLineCustom(0,2,0,vx,vy,vz,2); DrawLineCustom(0,0,2,vx,vy,vz,2); end; end; end; end; //--------------- //Создание формы procedure TMainForm.FormCreate(Sender: TObject); var ini: TIniFile; begin vectorx:=4; vectory:=-5; vectorz:=5; dp := 14; dph := dp div 2; //Чтение настроек ini:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'\DefSet.ini'); try editA.Text:=IntToStr(ini.ReadInteger('DefNumbers','alpha',60)); editB.Text:=IntToStr(ini.ReadInteger('DefNumbers','beta',135)); editC.Text:=IntToStr(ini.ReadInteger('DefNumbers','gamma',45)); editM.Text:=IntToStr(ini.ReadInteger('DefNumbers','module',7)); step:=ini.ReadInteger('DrawOptions','step',2); drawArc:=ini.ReadBool('DrawOptions','arc',false); finally ini.Free; end; end; //Расчет данных procedure TMainForm.butCalcClick(Sender: TObject); var a,b,c,m: integer; begin //Ввод данных a := StrToInt(editA.Text); b := StrToInt(editB.Text); c := StrToInt(editC.Text); m := StrToInt(editM.Text); //Вычисление vectorx := round(cos(a*(pi/180))*m); vectory := round(cos(b*(pi/180))*m); vectorz := round(cos(c*(pi/180))*m); //Вывод данных editX.Text := IntToStr(vectorx); editY.Text := IntToStr(vectory); editZ.Text := IntToStr(vectorz); end; //Перерисовка procedure TMainForm.DrawChange(Sender: TObject); begin AxisPanel.Repaint; end; //Исходные данные procedure TMainForm.ShowOrigData(Sender: TObject); begin OrigForm := TOrigForm.Create(Application); case(Sender as TMenuItem).Tag of 1: begin OrigForm.Caption:='Аналитическое решение'; OrigForm.Image1.Picture.LoadFromFile('Calc1.png'); end; 2: begin OrigForm.Caption:='Математический пример'; OrigForm.Image1.Picture.LoadFromFile('Calc2.png'); end; end; if (OrigForm.ShowModal = mrOK) then OrigForm.Free; end; procedure TMainForm.tbScaleChange(Sender: TObject); begin dp:=tbScale.Position; dph:=dp div 2; AxisPanel.Repaint; end; //Закрытие программы procedure TMainForm.Exit1Click(Sender: TObject); begin MainForm.Close; end; //Изменение размеров формы procedure TMainForm.FormResize(Sender: TObject); begin AxisPanel.Left:=10; AxisPanel.Top:=170; AxisPanel.Width:=MainForm.ClientWidth-20; AxisPanel.Height:=MainForm.ClientHeight-200; end; //Вызов справки procedure TMainForm.Howtouse1Click(Sender: TObject); begin ShellExecute(MainForm.Handle, nil, PChar('help.chm'), nil, nil, SW_ShowNormal); end; //Рисовать вектор procedure TMainForm.butDrawClick(Sender: TObject); begin if (vectorx >= xmin) and (vectorx <= xmax) then if (vectory >= ymin) and (vectory <= ymax) then if (vectorz >= zmin) and (vectorz <= zmax) then begin drawVector := not drawVector; if drawVector then butDraw.Caption:='Удалить вектор' else butDraw.Caption:='Рисовать вектор'; end else begin if not drawVector then butDraw.Caption:='Рисовать вектор'; drawVector := false; ShowMessage('Параметры вектора выходят за предел допустимых значений'); end; AxisPanel.Repaint; end; //Проверка данных procedure TMainForm.editExit(Sender: TObject); label error; begin {Значение модуля} if (Sender as TEdit) = editM then case StrToInt(editM.Text) of 0..20: Exit; else GOTO error; end else {Значение угла} begin case StrToInt((Sender as TEdit).Text) of 0..180: Exit; else GOTO error; end; end; error: Application.MessageBox('Введено неправильное значение. Значение выходит за диапазон допустимых значений','Предупреждение',0); (Sender as TEdit).Text:='0'; end; //Окно О программе procedure TMainForm.miAboutClick(Sender: TObject); begin AboutForm.ShowModal; end; procedure TMainForm.N2Click(Sender: TObject); begin ShellExecute(MainForm.Handle, nil, PChar('console.exe'), nil, nil, SW_ShowNormal); end; //Сохранение картики procedure TMainForm.butSaveClick(Sender: TObject); var sd: TSaveDialog; bmp: TBitmap; i,j: integer; begin sd:=TSaveDialog.Create(Application); sd.InitialDir:='C:\'; sd.Filter:='Bitmap|*.bmp'; bmp:=TBitmap.Create; bmp.Width:=AxisPanel.Width; bmp.Height:=AxisPanel.Height; if sd.Execute then begin AxisPanel.Repaint; for i:=0 to bmp.Width do for j:=0 to bmp.Height do bmp.Canvas.Pixels[i,j]:=AxisPanel.Canvas.Pixels[i,j]; bmp.SaveToFile(sd.FileName+'.bmp'); end; bmp.Free; sd.Free; end; procedure TMainForm.checkScaleClick(Sender: TObject); begin if checkScale.Checked then tbScale.Visible:=true else tbScale.Visible:=false; end; end. 3 Опис інтерфейсу Запуск програми здійснюється подвійним натисненням по файлу vector3d.exe. Перед користувачем з'явиться заставка у якій показуються усі основні дані про проект. Рисунок 3.1 Заставка Ця форма стоїть як заставка протягом трьох секунд, після чого вона зникає й з'являється головна форма програми (рис 3.2) Рисунок 3.2 Головне вікно 1. Меню «Файл» і «Справка» створені за допомогою компоненту MainMenu 2. Також у програмі використовуються такі компоненти як StatusBar, PageControl та PaintBox. Рисунок 3.3 Приклад роботи прогами 1. Для початку роботи з програмою необхідно перейти на вкладку Расчет, та ввести початкові данні про кути, та модуль. 2. Далі треба натиснути кнопку Расчет 3. Після чого треба перейти на вкладку Рисовать 4. На цій вкладці можна вибирати колір осей, масштаб та інші опції 5. Для виведення вектора треба натиснути кнопку Рисовать вектор 6. Якщо параметри вектора входять в діапазон допустимих значень, то вектор буде намальован (рис 3.3). Рисунок 3.4 Аналітичне розв'язання
Якщо треба вивести на екран приклад розв'язання задачі або аналітичне рішення, то треба вибрати в меню Файл відповідний пункт. Рисунок 3.5 Математичний приклад Для того щоб показати інформацію про програму необхідно натиснути Справка-Визов справки (рис 3.6) Рисунок 3.6 Информація про програму Якщо данні були введені некоректно, то будуть з'являтись відповідні вікна з помилками (рис 3.7, рис 3.8) Рисунок 3.7 Приклад вікна с помилкою Рисунок 3.8 Вихід за границю дозволенних значень Висновки Даний курсовий проект полягає в розробці та створенні програми для розв'язання задачі з аналітичної геометрії. Поставлена на початку мета була досягнута з використанням середовища об'єктно-орієнтованого програмування Delphi. Отриманні теоретичні знання застосовані на практиці, тобто програма була розроблена відповідно до завдання, а також були зроблені додатки, які потрібні для більш зручного використання програми. Найбільш складним завданням було перетворення математичних координат в екранні координати. Об'єктно-орієнтоване середовище програмування Delphi дозволило виконати проект зручним та простим до використовування, за допомогою різноманітних графічних компонентів. Отже середовище Delphi добре підходить для розв'язання програм заснованих на математичних завданнях. Весь проект складається з 17 файлів, сумарний об'єм яких дорівнює 4.15 Мб. Таблиця 4.1 Розмір файлів проекту |
Файли проекту | Опис | Розмір | | frmAbout.dfm | форма AboutForm | 32 КБ | | frmAbout.pas | код класса AboutForm | 1 КБ | | frmMain.dfm | форма MainForm | 12 КБ | | frmMain.pas | код класса MainForm | 11 КБ | | frmOrig.dfm | форма OrigForm | 850 Байт | | frmOrig.pas | код класса OrigForm | 551 Байт | | frmSplash.dfm | форма SplashForm | 156 КБ | | frmSplash.pas | код класса SplashForm | 386 Байт | | vector3d.dpr | файл проекту | 766 Байт | | vector3d.dproj | файл проекту | 5 КБ | | vector3d.res | ресурси | 5 КБ | | calc1.png | малюнок 1 | 37 КБ | | calc2.png | малюнок 2 | 19 КБ | | console.exe | консольна програма | 503 КБ | | defset.ini | файл з настройками | 159 Байт | | help.chm | файл справки | 159 КБ | | vector3d.exe | виконавчий файл | 1025 КБ | | | Список використаних джерел1. Хладни И. Внутренний мир Borland Delphi 2006 -- К.: Издательский дом "Вильямс", 2006. -- 480 с.2. Гаевский А. Разработка программных приложений на Delphi 6 - М.: Киев, 2000. -- 457 с.3. Выгодский М.Я. Справочник по высшей математике -- М.: АСТ: Астрель, 2006. -- 991 с.: ил.4. Бондаренко, М.А. Программирование в Delphi. Харьков: б.н., 2005.5. Ильина Т.А. Программирование на Delphi 6 -- М.: Питер, 2000. -- 318 с.6. Шапошников И. Delphi 5 -- М.: Санкт-Петербург, 2001. -- 203 с.7. http://ru.wikipedia.org (онлайн енциклопедія).8. http://www.realcoding.net (онлайн довідник по Delphi).9. http://www.delphisources.ru (онлайн довідник по Delphi).
Страницы: 1, 2, 3, 4
|