Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2014, 18:29   #1
beygul
Форумчанин
 
Аватар для beygul
 
Регистрация: 15.09.2008
Сообщений: 335
По умолчанию нарисовать точки и проверить их циклом(DELPHI)

Здравствуйте уважаемые гуру. Столкнулся с такой проблемой:
Постановка задачи:
На геометрической плоскости дано множество точек. Координаты точек хранятся в текстовом файле. В первой строке файла содержится количество точек. Во второй и последующих строках записаны координаты точки по оси Ox и Oy. Программа должна решить поставленную задачу и нарисовать на экране заданное множество точек и решение.

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


Код:
procedure TForm1.N2Click(Sender: TObject);
var n: Integer;
begin
  assignFile(f,'файл.txt');
  try
  Reset(f);
 except
 end;
 readln(f,n);


 

 closeFile(f);
 end;
Тут я считал первую строчку файла. Дальше сделаю цикл, где буду перебираться все точки.
Сразу вопрос №1: координаты лучше записать в массив? Если да, то в какой?
вопрос № 2: как проще нарисовать точки на экране? С помощью канвы? С помощью канвы пробовал, точки получаются очень очень мелкие, как увеличить размер не знаю, чтобы было их хорошо видно.
вопрос № 3: Для решения буду перебирать всевозможные комбинации точек. Какой же написать условие в теле цикла, для отбора нужных трёх точек?

Заранее всем мой молодёжный РЕСПЕКТ! Я очень надеюсь на вашу помощь.

Последний раз редактировалось beygul; 23.03.2014 в 18:40.
beygul вне форума Ответить с цитированием
Старый 24.03.2014, 14:46   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

дисклаймер.
так, всё, что далее я скажу - это сугубо моё личное субъективное мнение (IMHO), могу сильно ошибаться.


Цитата:
Сразу вопрос №1: координаты лучше записать в массив? Если да, то в какой?
точно так. сохранить координаты нужно обязательно. и лучше в массиве.
Какой взять массив?... ну, если максимальное число точек задано и оно НЕ ОЧЕНЬ огромное, то я бы взял статический массив, иначе, динамический массив Вам в помощь:
Код:
var AllPoints : array of TPoint;
...
  SetLength(AllPoints, n);
  for i:= 0 to N-1 do
     Readln(AllPoints[i].X, AllPoints[i].Y);
Код:
вопрос № 2: как проще нарисовать точки на экране? С помощью канвы?
можно использовать кружочки для отображения точек:
Код:
const
  rDrawnPoint = 3; {радиус кружочка для отображения точки}
  colorDrawPoint = clBlue;

var AllPoints : array of TPoint;
  i : integer;
begin
  SetLength(AllPoints, 2);

  AllPoints[0].x := 10;
  AllPoints[0].y := 50;

  AllPoints[1].x := 70;
  AllPoints[1].y := 30;
  Canvas.Pen.Color := colorDrawPoint;
  Canvas.Brush.Color := colorDrawPoint;
  for i := Low(AllPoints) to High(AllPoints) do
    Canvas.Ellipse(AllPoints[i].x-rDrawnPoint,AllPoints[i].y-rDrawnPoint,
                     AllPoints[i].x+rDrawnPoint,AllPoints[i].y+rDrawnPoint);
Код:
вопрос № 3: Для решения буду перебирать всевозможные комбинации точек. Какой же написать условие в теле цикла, для отбора нужных трёх точек?
вот это вопрос из вопросов.
перебор такой - нужно брать по три точки из всех имеющихся, первым делом проверять, возможно ли построить треугольник на данных трёх точках, если возможно, то для всех оставшихся точек проверять, попадают ли они в полученный треугольник или нет, в зависимости от этого наращивать счётчик попавших в треугольник и счётчик не попавших в треугольник. Если разница между данными счётчиками меньше, чем запомненная величина, что запомнить эту разницу и координаты трёх точек, которые нам дали эту величину. Повторить цикл для всех точек.
вывести результат.

Поиском по форуму Вы легко найдёте код перебора трёх точек из всех возможных (если самостоятельно написать возникнут затруднения) и легко находится функция проверки попадания точки в треугольник.

ну, как то так. Успехов!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
решение задачи в Pascal - Проверить принадлежность точки с заданными координатами кругу с заданным радиусом и координатами центра Екатерина23 Помощь студентам 1 05.12.2013 16:35
Запрет ввода в TextBox букв и . (точки) / Или автозамена точки на запятую uralshans Microsoft Office Excel 4 30.08.2013 00:24
как нарисовать точки mindi Компоненты Delphi 1 06.05.2010 14:46
Имеются координаты точки. Как проверить какого цвета соседние точки на форме? Rin Мультимедиа в Delphi 2 10.11.2009 22:47
Отбражение чисел - точки, это точки, а не запятые, обозначающие дробную часть Дикий Помощь студентам 7 12.05.2008 17:57