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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2019, 15: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, 16:05   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

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

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

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

Код:
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, 11:41   #6
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,534
По умолчанию

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

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

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

Цитата:
Сообщение от 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, 18:41   #9
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,534
По умолчанию

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

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


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на паскале: Разделить элементы массива на 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 20:34
помогите разделить Alar Общие вопросы Delphi 9 14.11.2006 06:13