2.2. Создание программы «Попадание точки в фигуру» Задача. Дана сложная фигура, вписанная в квадрат с координатами: левый нижний угол (5, 5), верхний правый угол (20, 20). Требуется написать программу для определения попадания точки с введенными координатами в указанную фигуру. Примерный вид окна программы показан на рис. 2.6.
Процесс создания программы происходит по следующему алгоритму:
Запустить программу Delphi.
Сохранить проект как «Work2», модуль назвать «Main».
Создать образ окна: изменить заголовок на «Попадание точки в фигуру».
Создать изображение фигуры:
поместить в форму элемент Shape, вкладка Additional, значок ;
изменить свойства объекта:
изменить размер объекта для обеспечения попадания в окно трёх элементов по вертикали и трёх по горизонтали, элемент должен быть квадратом;
изменить цвет квадратика (свойство Brush/Color и Pen/Color);
скопировать образ квадратика в буфер обмена (при классической раскладке клавиатуры в Delphi это комбинация );
п оместить на форму 7 копий квадратика из буфера обмена ();
разместить квадратики в фигуру «квадратный бублик» (рис. 2.6). Необходимо обеспечить пустое пространство внизу и слева от фигуры для размещения начала координат – в левом нижнем углу фигуры должен «поместиться» как бы еще один квадратик.
Создать 2 элемента для ввода координат точки:
поместить на форму 2 элемента SpinEdit, вкладка Samples, значок ;
назвать один элемент SECoordX (для координаты X) и SECoordY (для координаты Y) свойство Name (в дальнейшем изменяемое свойство будет обозначаться после стрелки);
настроить минимальное возможное значение вводимого числа 0, максимальное – 25, значение по умолчанию 0 и шаг изменения величины 1 соответственно MinValue, MaxValue, Value и Increment.
Добавить надписи к полям ввода:
поместить 2 элемента Label, вкладка Standard, значок ;
настроить надписи на «Координата X» и «Координата Y» Caption.
Добавить метку для вывода результата попадания точки:
поместить элемент Label, вкладка Standard, значок ;
назвать элемент LResult Name;
изменить заголовок на «Мимо» Caption.
Добавить кнопки для запуска вычислений и выхода из программы:
добавить 2 элемента Button, вкладка Standard, значок ;
назвать кнопку для выхода BQuit, а кнопку для вычисления BOk Name;
изменить заголовки кнопок на «Выход» и «Ok» Caption;
Образ окна создан!
Запрограммировать выход – щелкнуть по кнопке BQuit и ввести команду Close;.
Проанализировать форму фигуры для создания алгоритма – в нашем случае проверить попадание в большой квадрат и проверить, не попадает ли точка во внутренний квадрат.
Вернуться на форму (клавиша <F12>) и запрограммировать кнопку BOk:
щелкнуть дважды по кнопке BOk;
записать оператор проверки координат (координаты можно получить у элементов SECoordX и SECoordY через свойства Value – обращение к свойству объекта осуществляется через «точку» – например: SECoordX.Value дает значение свойства Value элемента SECoordX. SECoordX.Value дает значение введенной координаты X, SECoordY.Value – координаты Y):
If (((SECoordX.Value >= 5) and (SECoordX.Value <= 20) and
{Попадание Х в большой квадрат}
(SECoordY.Value >=5) and (SECoordY.Value <= 20))and
{Попадание Y в большой квадрат}
Not ((SECoordX.Value >10) and (SECoordX.Value < 15) and
{Непопадание Х в малый квадрат}
(SECoordY.Value > 10) and (SECoordY.Value < 15)))
{Непопадание Y в малый квадрат}
then LResult.Caption := ‘Попал’ {Вывод сообщения «Попал» }
else LResult.Caption := ‘Мимо’; {Вывод сообщения «Мимо» }
Запустить программу <F9>
Для улучшения программы необходимо:
перерисовывать результат сразу при вводе координат;
добавить «точку» для визуализации положения точки.
Для реализации п. 14а необходимо:
выбрать элементы SECoordX и SECoordY (удерживая клавишу щелкнуть сначала на одном элементе, затем на другом – оба элемента будут отмечены рамочкой – это позволит настраивать общие события для выделенных элементов одновременно);
настроить событие (вкладка Events в Инспекторе объектов) onChange так, чтобы оно указывало на событие BOkClick (выбрать это событие из списка). Таким образом, для этих элементов событие onChange будет равносильно событию onClick для кнопки BOk – при смене координат сразу будет выполняться нажатие кнопки «Ok»;
так как кнопка «Ok» обрабатывается автоматически, её можно сделать «невидимой» – изменить свойство Visible в значение false для объекта BOk. При запуске программы кнопка «Ok» видна не будет.
Для реализации п. 14б необходимо:
добавить точку на экран – элемент Shape, вкладка Additional, значок ;
изменить свойства этого элемента:
Name изменить на значение SPoint;
Shape изменить на stCircle;
Width изменить на 3 – ширина точки составляет 3 пикселя;
Height изменить на 3 – высота точки;
пересчитать начало координат «виртуальной» системы координат программы в координаты экрана (координаты экрана отсчитываются от верхнего левого угла экрана вниз и вправо):
необходимо выяснить свойство Name для левого нижнего квадратика – пусть его имя ShapeN;
элемент ShapeN имеет свои координаты левого верхнего угла – свойства Top и Left; также этот элемент имеет свойства ширины и высоты – Width и Height, таким образом, координаты начала координат равны: ShapeN.Left – ShapeN.Width и ShapeN.Top + 2*ShapeN.Height;
рассчитать цену деления координатной сетки: для этого необходимо поделить длину и ширину квадратика на 5. ShapeN.Width div 5 даст шаг по координате X, а ShapeN.Height div 5 – по координатеY;
изменить текст события BOkOnClick:
щелкнуть по кнопке BOk;
в начале процедуры дописать текст присвоения «точке» (объект SPoint) новых координат – к началу координат добавить значение X или Y, умноженное на шаг по координате X или Y:
SPoint.Left := ShapeN.Left – ShapeN.Width + SECoordX.Value * (ShapeN.Width div 5);
SPoint.Top := ShapeN.Top + 2*ShapeN.Height - SECoordY.Value * (ShapeN.Height div 5).
Запустить программу (клавиша <F9>)
Индивидуальное задание Создать программу по заданию, рассмотренному в 2.2, используя шаблон в соответствии с номером варианта.
| 1
|
| 2
|
| 3
|
| 4
|
| 5
|
| 6
|
| 7
|
| 8
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9
|
| 10
|
| 11
|
| 12
|
| 13
|
| 14
|
| 15
|
| 16
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 17
|
| 18
|
| 19
|
| 20
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| Итоги Во второй теме были изучены: типы переменных; операции над операндами; условные операторы.
При создании демонстрационной программы были получены навыки работы со следующими командами и визуальными компонентами: элементом фигуры Shape; элементом изменения значения цифр SpinEdit; связыванием событий объектов.
|