Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 07.11.2019, 16:25   #1
mIgor
Новичок
Джуниор
 
Регистрация: 07.11.2019
Сообщений: 1
По умолчанию Помогите разделить точки на две группы

Всем привет! Нужна помощь.

Мне даны 4 точки A, B, C, D и прямая GK.
GK может лежать как угодно (Не обязательно параллельно одной из осей).
Точки A, B, C, D могут вводиться в любой последовательности. Т.е. может быть A, B с одной стороны GK, а C, D с другой, а может и A,C с одной стороны, а B,D с другой.

Необходимо разбить точки на две группы. Первая группа с одной стороны GK, вторая группа с другой стороны GK.
Как разбить точки на две группы? Координаты всех точек известны (A,B,C,D,G,K).
mIgor вне форума   Ответить с цитированием
Старый 07.11.2019, 17:05   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 4,928
По умолчанию

например тут https://www.programmersforum.ru/show...46&postcount=4
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума   Ответить с цитированием
Старый 07.11.2019, 17:34   #3
digitalis
Участник клуба
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 1,865
По умолчанию

Поскольку язык программирования не указан, сталбыть нужна только идея.
Из каждой точки на прямую опускаем перпендикуляры (см. #2), находим точки пересечения их с заданной прямой. Теперь ищем разность координыты "нашей" точки и точки пересечения и разгоняем их по группам: + в одну сторону, - в другую. Разность другой координаты можно не смотреть -- они линейно зависимы.
Изображения
 
digitalis вне форума   Ответить с цитированием
Старый 08.11.2019, 09:22   #4
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 769
По умолчанию

Если прямая задана в виде y=что-то(x), то все, что y[проверяемой точки]<что-то(x[проверяемой точки]) будет с одной ее стороны, y[проверяемой точки]>что-то(x[проверяемой точки]) - с другой.
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума   Ответить с цитированием
Старый 08.11.2019, 10:50   #5
Pavia
Лис
Участник клуба
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 1,981
По умолчанию

Код:
for i:=0 to 3 do
 for j:=0 to 3 do
   SegmentsAdd(Segment(Points[i],points[J]))

for i:=0 to Length(Segments)-1 do
 for j:=i to Length(Segments)-1 do
   begin
   Segment1:=Segments[i];
   Segment2:=Segments[j];
   G:=MidPoint(Segment1);
   K:=MidPoint(Segment2);
   if IsSeparated(G,K) then Break;
   end;
result:=Segment(G,K);
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума   Ответить с цитированием
Старый 08.11.2019, 12:41   #6
digitalis
Участник клуба
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 1,865
По умолчанию

Pavia
Замысловато. Кто бы объяснил темному, что за компонент Segment ? Из какой оно либы ? Не Delphi-подобной - однозначно.
alexcoder
Цитата:
Если прямая задана в виде y=что-то(x),
только если
Цитата:
что-то(x)
- линейная функция, иначе возможны варианты

Последний раз редактировалось digitalis; 08.11.2019 в 12:52.
digitalis вне форума   Ответить с цитированием
Старый 09.11.2019, 11:09   #7
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 769
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
- линейная функция, иначе возможны варианты
"Мне даны 4 точки A, B, C, D и прямая GK." В общем случае прямая как раз и будет линейной функцией kx+b. Частный случай x=const в расчет не берем)
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума   Ответить с цитированием
Старый 09.11.2019, 15:42   #8
Pavia
Лис
Участник клуба
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 1,981
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Замысловато. Кто бы объяснил темному, что за компонент Segment ? Из какой оно либы ? Не Delphi-подобной - однозначно.
Segment - в переводе отрезок. Есть в любой геометрической библиотеке.

Код:
  TSegmentReal=packed record  // отрезок
    case Integer of
      0: (x0,y0,x1,y1:Real);
      1: (P0,P1:TPoint2DReal);
      2: (V0,V1:TVector2Real);
  end;

  TSegment=TSegmentReal;


function Segment(P0, P1:TPoint2DReal):TSegment; overload;
begin
Result.P0:=P0;
Result.P1:=P1;
end;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума   Ответить с цитированием
Старый 09.11.2019, 19:41   #9
digitalis
Участник клуба
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 1,865
По умолчанию

Так вроде это же не встроенный, а пользовательский тип, и пока он не был определен - ничего не было понятно. А так - сразу видно, что он как бы и не нужен для более чем элементарной задачки - но это мое личное мнение.
ТСу выбирать - какой метод применить #3,#4 или зупер-сверх-научный. Я бы ему последнее - не рекомендовал: а вдруг препод спросит :" А что это у тебя тут? Ты хоть не то, что объяснить - прочесть это сможешь?"

Последний раз редактировалось digitalis; 09.11.2019 в 19:48.
digitalis вне форума   Ответить с цитированием
Ответ

Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на паскале: Разделить элементы массива на 2 группы так, что бы разность между ними была минимальна. Rhc Помощь студентам 27 31.12.2013 15:04
Разделить строку символов на n группы Luchia C# (си шарп) 6 14.12.2011 14:47
Помогите разделить текст... EugeneIsmatulin Общие вопросы Delphi 3 26.05.2009 15:54
как разделить данные на две группы по частоте встречаемости параметра e_khomchenko Microsoft Office Excel 9 05.02.2008 21:34
помогите разделить Alar Общие вопросы Delphi 9 14.11.2006 07:13


06:04.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.