Смекни!
smekni.com

Управление образования Администрации г. Екатеринбурга (стр. 5 из 5)

pix [1,..] [2,..] [3,..] [4,..] [5,..] [6,..]
[..,1] x1 x2 х3 х4 х вершины
[..,2] y1 y2 у3 у4 у вершины

Где х1..х4 и у1..у4 – координаты вершин основания. Все компоненты, использованные при написании программы взяты из стандартных библиотек.

6.3 Интерфейс

Пользовательские интерфейсы – метод взаимодействия пользователя с программой для передачи ей инструкций и данных. Мой интерфейс состоит из четырех полей для ввода, трех кнопок, одного выкидного списка, одного ползунка и одной галочки (CheckBox). Размещен интерфейс слева так, что вводимые данные сверху, а кнопки снизу для удобства и чтобы пользователь мог сразу найти кнопку пуска.

6.4 Листинг

Строки, начинающиеся с // - комментарии, при компиляции опускаются и служат для напоминания программисту, что же он такое натворил вчера.

//Начало, подключение библиотек, объекты, глобальные переменные

unit Unit1;

interface

uses

SysUtils, Classes, Graphics, Forms, Dialogs, Windows,

Controls, StdCtrls, ComCtrls, ExtCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Label1: TLabel;

Label3: TLabel;

Label4: TLabel;

Label2: TLabel;

Edit4: TEdit;

Timer1: TTimer;

Button2: TButton;

Speed: TTrackBar;

Label5: TLabel;

Test: TCheckBox;

ComboBox1: TComboBox;

Label6: TLabel;

ColorDialog1: TColorDialog;

ColorB: TButton;

Stats: TLabel;

Fill: TCheckBox;

RazmB: TButton;

Timer2: TTimer;

procedure Button1Click(Sender: TObject);

procedure Timer(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure SpeedChange(Sender: TObject);

procedure ComboBox1Change(Sender: TObject);

procedure ColorBClick(Sender: TObject);

procedure RazmBClick(Sender: TObject);

procedure Timer2Timer(Sender: TObject);

private

{ Private declarations }

error: boolean;

x,y : Longint;

pix : array[1..20,1..20] of Longint;

a,a_plus,tmp: Real;

old: TColor;

i,H1_x,H1_y,H2_x,H2_y,H3_x,H3_y,temp :integer;

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin

// Кнопка пуска

// Идет долгая и упорная проверка введенных пользователем данных

try

if Test.State=cbChecked then begin

if (StrToFloat(Edit1.Text)*sqrt(2))>(ClientWidth-150) then begin

ShowMessage('При текущей ширине окна данная сторона основания слишком велика');

error:=true; end;

if (StrToFloat(Edit4.Text)>=90) or (StrToFloat(Edit4.Text)<=0) then begin

ShowMessage('Угол наклона должен быть больше 0 и меньше 90 градусов');

error:=true; end;

if (StrToFloat(Edit2.Text)<(StrToFloat(Edit1.Text)*sqrt(2)/4)) or (StrToFloat(Edit2.Text)>ClientHeight-(StrToFloat(Edit1.Text)*sqrt(2)/4)) then begin

ShowMessage('Крайняя левая Х либо залезает на интерфейс, либо слишком велика для текущей стороны основания');

error:=true; end;

if (StrToFloat(Edit3.Text)<150) or (StrToFloat(Edit2.Text)>ClientWidth-(StrToFloat(Edit1.Text)*sqrt(2))) then begin

ShowMessage('Крайняя левая У либо слишком мала, либо слишком велика для текущей стороны основания');

error:=true; end;

end;

finally

if error=false then begin

Edit1.Enabled:=False;

Edit2.Enabled:=False;

Edit3.Enabled:=False;

Edit4.Enabled:=False;

Test.Enabled:=False;

Timer1.Enabled:=True; end;

error:=false;

end;

end;

procedure TForm1.Timer(Sender: TObject);

var

i,j,min:integer;

pol: array[1..3] of TPoint; // координаты точек треугольника

begin

// Главный таймер, по нему строится пирамида

// Расчет начальных значений

pix[1,1]:= StrToInt(Edit2.Text);

pix[1,2]:= StrToInt(Edit3.Text);

pix[2,1]:= Round( pix[1,1] + (StrToFloat(Edit1.Text)*sqrt(2))/2 );

pix[2,2]:= Round( pix[1,2] - (StrToFloat(Edit1.Text)*sqrt(2))/2 );

pix[3,1]:= Round( pix[1,1] + StrToFloat(Edit1.Text)*sqrt(2) );

pix[3,2]:= pix[1,2];

pix[4,1]:= Round( pix[1,1] + (StrToFloat(Edit1.Text)*sqrt(2))/2 );

pix[4,2]:= Round( pix[1,2] + (StrToFloat(Edit1.Text)*sqrt(2))/2 );

pix[5,1]:= pix[2,1];

tmp:= sin(StrToFloat(Edit4.Text)*Pi/180)/cos(StrToFloat(Edit4.Text)*Pi/180)*StrToFloat(Edit1.Text)/2;

pix[5,2]:= Round( pix[1,2] - tmp );

// Поворот на a радиан

x:= Round( (StrToFloat(Edit1.Text)*sqrt(2))/2 - sin(PI/2-a)*(StrToFloat(Edit1.Text)*sqrt(2))/2 );

y:= Round( cos(PI/2-a)*(StrToFloat(Edit1.Text)*sqrt(2))/2 );

pix[1,1]:= pix[1,1] + x;

pix[1,2]:= pix[1,2] + y;

pix[2,1]:= pix[2,1] - y;

pix[2,2]:= pix[2,2] + x;

pix[3,1]:= pix[3,1] - x;

pix[3,2]:= pix[3,2] - y;

pix[4,1]:= pix[4,1] + y;

pix[4,2]:= pix[4,2] - x;

// Уменьшаем основание вдвое по оси у

pix[1,2]:= Round( pix[1,2] - y/2 );

pix[2,2]:= Round( pix[2,2] + ((StrToFloat(Edit1.Text)*sqrt(2)/2 - x)/2) );

pix[3,2]:= Round( pix[3,2] + y/2 );

pix[4,2]:= Round( pix[4,2] - ((StrToFloat(Edit1.Text)*sqrt(2)/2 - x)/2) );

with Canvas do begin

Brush.Color:= old;

FillRect(Rect(150,0,ClientWidth,ClientHeight));

// Основные линии

Pen.Width:= 2;

Pen.Color:= ColorDialog1.Color;

MoveTo(pix[1,1],pix[1,2]);

for i:=4 downto 1 do

LineTo(pix[i,1],pix[i,2]);

MoveTo(pix[1,1],pix[1,2]);

LineTo(pix[5,1],pix[5,2]);

LineTo(pix[3,1],pix[3,2]);

MoveTo(pix[2,1],pix[2,2]);

LineTo(pix[5,1],pix[5,2]);

LineTo(pix[4,1],pix[4,2]);

// Вспомогательные линии

Pen.Width:=1;

MoveTo(pix[1,1],pix[1,2]); LineTo(pix[3,1],pix[3,2]);

MoveTo(pix[2,1],pix[2,2]); LineTo(pix[4,1],pix[4,2]);

MoveTo(pix[5,1],pix[5,2]); LineTo(pix[5,1],pix[5,2]+Round(tmp));

end;

end;

a:=a+a_plus;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

// Кнопка остановки

Timer1.Enabled:=False;

Timer2.Enabled:=False;

Edit1.Enabled:=True;

Edit2.Enabled:=True;

Edit3.Enabled:=True;

Edit4.Enabled:=True;

Test.Enabled:=True;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

//Создание формы, начальные значения переменных

old:=Canvas.Brush.Color;

a:=0;

a_plus:=0.05;

end;

procedure TForm1.SpeedChange(Sender: TObject);

begin

// Изменение скорости, ползунок

a_plus:=Speed.Position/30;

end;

procedure TForm1.ComboBox1Change(Sender: TObject);

begin

// Выбор вида пирамидки из списка

if ComboBox1.ItemIndex=0 then Edit4.Text:='43,3138';

if ComboBox1.ItemIndex=1 then Edit4.Text:='41,9699';

if ComboBox1.ItemIndex=2 then Edit4.Text:='40,8933';

end;

procedure TForm1.ColorBClick(Sender: TObject);

begin

// По кнопке включается выбор цвета

ColorDialog1.Execute

end;

end.

Заключение.

Итак, нами была создана научная программа, которая, безусловно, может быть применима как пособие на уроках геометрии в курсе изучения объемных тел, а в частности – пирамид; исследована часть исторического материала по теме «Великие пирамиды».

Бесспорно, такое направление знаний многогранно и объемно. Происходит слияние алгебры и геометрии. Тригонометрия становится частным направлением пирамидометрии, поскольку осуществимы действия с углами без перевода их в градусную меру.

В рассмотренной нами литературе говорится о том, что такой качественный скачек в освоении математики позволит преобразить точные науки и усилить прикладные дисциплины.

Великие пирамиды древности несут в себе большой вклад в историю развития как интеллектуальные послания из глубин тысячелетий, так и сокровищницы системы красивейших математических законов.

Список литературы.

1. Ван дер Варден Б.Л. «Пробуждающая наука математика Древнего Египта, Вавилона и Греции» - 1990. - №5

2. Даан- Дальмедико А., Пейфер Ж. «пути и лабиринты. Очерки по истории математики» - Л., 1990

3. Петросян П. «Вселенский шифр пирамид»// «Наука и религия»- 1992.- №12

4. Прохоров Ю.В. «Математический энциклопедический словарь»-М.: Советская энциклопедия, 1988.

5. Уваров В.В. «Пирамидометрия :Древнейшее математическое наследие» Л.: Издательство Уральского университета, 2000.

6. Фленов М. Е. Ф69 Библия Delphi. — СПб.: БХВ-Петербург, 2004. — 880 с.: ил.