Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Ручное добавление точек

Читайте также:
  1. Exel создание первой книги,открытие существующей книги,сохранение книги,добавление,удаление,копирование,перемещение листьев книги
  2. В среднем под коленом на кв. см. поверхности тела приходится около 232 болевых точек, на подушке большого пальца 60, на кончике носа –44.
  3. В статистике графиком называют наглядное изображение статистических величин и их соотношений при помощи геометрических точек, линий, фигур или географических картосхем.
  4. Г) падение с высоты из-за разрушения точек страховки или разрыве страховочной веревки.
  5. Дайте характеристику Сколково с управленческой и экономической точек зрения. Объясните на конкретных примерах.
  6. Добавление звука в сцену
  7. Добавление элементов
  8. Если взять последовательность точек х0, х1, х2, …. и заменить на получившихся отрезках интегральную кривую на отрезки касательных к ней, то получим ломаную линию.
  9. Задание 2. Добавление различных элементов и компонентов к дереву консоли администрирования MMC
  10. Задание 5. Проведение съемки местности, определение координат точек границ земельного участка. Вычисление площади земельного участка аналитическим способом

 

Обработчик нажатия на кнопку «Добавить» приведен ниже.

 

  1. procedure TForm1.addClick(Sender: TObject);
  2. var
  3. x, y: Integer;
  4. begin
  5. field.add_point_str(point_x.Text, point_y.text);
  6. field.update_list;
  7. end;

 

Здесь происходит вызов процедуры добавления точки в список (add_point_str) и обновление списка точек.

Листинг метода add_point_str приведен ниже.

 

  1. procedure tfield.add_point_str(_x, _y: string);
  2. var
  3. x, y: Integer;
  4. begin
  5. if not is_digit(_x) or not is_digit(_y)
  6. then
  7. begin
  8. ShowMessage('Ошибка ввода');
  9. Exit;
  10. end;
  11. x:= StrToInt(_x);
  12. y:= StrToInt(_y);
  13. add_point_int(x, y);
  14. end;

 

Здесь проверяется корректность введенных данных (строки 5-10), преобразование строковых координат в числовые и добавление в список методом add_point_int.

 

Поиск квадратов

 

Для поиска всех квадратов введем метод, определяющий, возможность построения квадрата с вершинами в точках p1, p2, p3, p4.

 

  1. function tfield.is_bar(p1, p2, p3, p4: tmypoint): Boolean;
  2. var d1, d2, d3, d4: double;
  3. begin
  4. d1:= distance(p1, p2);
  5. d2:= distance(p2, p3);
  6. d3:= distance(p3, p4);
  7. d4:= distance(p4, p1);
  8. Result:= (d1 = d2) and (d2 = d3) and (d3 = d4) and (d4 = d1) and (d1 <> 0);
  9. end;

 

Решение о возможности построить квадрат с координатами в точках p1, p2, p3, p4 принимается на основе следующего утверждения: расстояние между точками p1 и p2 совпадает с расстояниями между точками p2 и p3, p3 и p4, p4 и p1, и при этом это расстояние не равно 0, то возможно построить квадрат с вершинами в точках p1, p2, p3, p4, в противном случае такое построение невозможно.

 

Метод distance выглядит следующим образом.

 

  1. function tfield.distance(p1, p2: tmypoint): Double;
  2. begin
  3. Result:= (Sqrt(Sqr(p2.x - p1.x) + Sqr(p2.y - p1.y)));
  4. end;

 

Метод, осуществляющий поиск квадратов, выглядит следующим образом.

 

  1. procedure tfield.gen_bars();
  2. var
  3. i1, i2, i3, i4, acnt: Integer;
  4. begin
  5. acnt:= 0;
  6. for i1:= 0 to cnt-1 do
  7. for i2:= i1+1 to cnt-1 do
  8. for i3:= i2+1 to cnt-1 do
  9. for i4:= i3+1 to cnt-1 do
  10. if is_bar(points[i1], points[i2], points[i3], points[i4])
  11. then
  12. begin
  13. drawbar(points[i1], points[i2], points[i3], points[i4]);
  14. inc(acnt);
  15. end;
  16. ShowMessage(IntToStr(acnt)+' квадратов найдено');
  17. end;

 

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

В строке 5 инициализируется значение счетчика квадратов.

В строках 6-9 организуется перебор всех возможных четверок точек.

В строке 10 проверяется, возможно ли построение квадрата с вершинами в текущих координатах.

В случае успешной проверки квадрат рисуется на поле для вывода (строка 13) и увеличивается счетчик квадратов (строка 14).

В строке 16 выводится ответ.

Обработчик нажатия на кнопку «Рассчитать» выглядит следующим образом.

 

  1. procedure TForm1.btn1Click(Sender: TObject);
  2. begin
  3. field.gen_bars;
  4. end;

 




Дата добавления: 2015-01-29; просмотров: 16 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2024 год. (0.008 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав