Смекни!
smekni.com

Розробка засобами Delphi дидактичного ілюстративного матеріалу для розвязання задачі з аналітичної Створення нескладних (стр. 4 из 4)

//Черчение трехмерной сетки

if checkGrid.Checked then

begin

for i := 0 to 12 do

begin

DrawGrid(6, ymin + 2*i, zmax, -6, ymin + 2*i, zmax); //Сетка 1

DrawGrid(6, ymin + 2*i, 0, -6, ymin + 2*i, 0); //Сетка 2

DrawGrid(6, ymin + 2*i, zmin, -6, ymin + 2*i, zmin); //Сетка 3

if i < 7 then

begin

DrawGrid(-6 + 2*i, ymax, zmax, -6 + 2*i, ymin, zmax);

DrawGrid(-6 + 2*i, ymax, 0, -6 + 2*i, ymin, 0);

DrawGrid(-6 + 2*i, ymax, zmin, -6 + 2*i, ymin, zmin);

end;

if i < 4 then

begin

DrawGrid( 6 - 4*i, ymin, zmax, 6 - 4*i, ymin, zmin);

DrawGrid(-6 + 4*i, ymax, zmax,-6 + 4*i, ymax, zmin);

end;

end;

end;

//Подписи осей и нумерация

DrawText('X', cp.X - 10 * dph, cp.Y + 10 * dph);

DrawText('Y', cp.X + 10 * dp, cp.Y);

DrawText('Z', cp.X - 2, cp.Y - 11 * dp);

if (checkNumber.Checked) then

begin

num := xmax;

for i := 0 to 24 do

begin

if num <> 0 then

begin

DrawText(IntToStr(num),(cp.X + dp * 10) - (i * dp),cp.Y-15);

if (i < 21) then

DrawText(IntToStr(num),cp.X+5, (cp.Y - dp * 10)+(i * dp)-5);

end;

num := num - 1;

end;

end;

//Координатные оси

Pen.Color:=cbAxis.Selected;

DrawLineCustom(xmin,0,0,xmax,0,0,2);

DrawLineCustom(0,ymin,0,0,ymax,0,2);

DrawLineCustom(0,0,zmin,0,0,zmax,2);

//Каркас

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)+'&bsol;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:&bsol;';

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).