2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


В этом разделе нельзя создавать новые темы.

Если Вы хотите задать новый вопрос, то не дописывайте его в существующую тему, а создайте новую в корневом разделе "Помогите решить/разобраться (М)".

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

Не ищите на этом форуме халяву, правила запрещают участникам публиковать готовые решения стандартных учебных задач. Автор вопроса обязан привести свои попытки решения и указать конкретные затруднения.

Обязательно просмотрите тему Правила данного раздела, иначе Ваша тема может быть удалена или перемещена в Карантин, а Вы так и не узнаете, почему.



Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Точки пересечений N линий.
Сообщение16.07.2013, 17:22 


11/04/12
21
Здравствуйте, господа и дамы. Не знаю, куда лучше поместить тему, ибо она относится и к математике, и к программированию. И к какому разделу она относится больше решать не мне.
Задача такова. Есть два упорядоченных множества точек на плоскости (m1,m2: array[0..n] of TPoint_2d). Нужно найти все пересечения за минимальное количество итераций. Не могу организовать правильно вложенные циклы. Понимаю, что нужно просто не проходить по паре проверенных линий, но как дубликаты убрать? Помогла бы, наверно, комбинаторика.
На бумаге набросал множества из 3, 4, 5 точек. Пересечений вышло 9, 36, 96.
Благодарю за внимание.

 Профиль  
                  
 
 Re: Точки пересечений N линий.
Сообщение17.07.2013, 06:41 
Супермодератор
Аватара пользователя


20/11/12
5728
 i  Уточните, пожалуйста, формулировку, вот это:
Hasar1n в сообщении #746532 писал(а):
Есть два упорядоченных множества точек на плоскости (m1,m2: array[0..n] of TPoint_2d). Нужно найти все пересечения за минимальное количество итераций.
Пересечения чего? Отрезков? Каких? Которые проведены между точками массивов? Напишите явно

Куски кода оформляйте тегом code, маленькие куски кода - тегом tt, формулы - $\TeX$ом. Инструкции по оформлению формул здесь или здесь (или в этом видеоролике).
Сейчас я код поправил, в дальнейшем, в случае плохого оформления, тема будет перенесена в Карантин.

 Профиль  
                  
 
 Re: Точки пересечений N линий.
Сообщение17.07.2013, 22:37 


11/04/12
21
Цитата:
Куски кода оформляйте тегом code, маленькие куски кода - тегом tt, формулы - $\TeX$ом.
Прошу прощения.
Цитата:
Пересечения чего? Отрезков? Каких? Которые проведены между точками массивов? Напишите явно

Пересечения отрезков между точками 2 множеств.
Нашел более-менее подходящее решение:
Код:
for k :=1 to n-1 do
for i :=k to n do
for j :=k to n do
for z :=1 to i-1 do

Правда, избыточность циклов есть. Но хоть как-то.

 Профиль  
                  
 
 Re: Точки пересечений N линий.
Сообщение18.07.2013, 01:18 
Заслуженный участник


16/02/13
4214
Владивосток
А в каком смысле "упорядоченных"? Это просто отражение того факта, что точки хранятся в массивах? Или же они там в каком-то смысле упорядочены?
Можно попробовать упорядочить по какой-нить координате и чего-нить из этого поиметь. Это не рецепт и даже на идею не тянет, но: если первый массив разбить на два — первая координата меньше/больше какого-нибудь числа, второй аналогично (с другим, вообще говоря, числом), то отрезки с обоими концами из первых частей массива и из второй уж точно не пересекаются между собой.

 Профиль  
                  
 
 Re: Точки пересечений N линий.
Сообщение18.07.2013, 16:23 


11/04/12
21
Цитата:
А в каком смысле "упорядоченных"? Это просто отражение того факта, что точки хранятся в массивах? Или же они там в каком-то смысле упорядочены?

Точки создаются рандомно. Каждое множество точек имеет, так сказать, свой центр, вокруг которого они формируются(не знаю, как это называется математически). В общем, вот так:
Код:
  for i:=0 to n do
  begin
    m1[i].x:=1+random(100)/300;
    m1[i].y:=1+random(100)/300;

    m2[i].x:=1+random(100)/300;
    m2[i].y:=-1-random(100)/300;
  end;

Далее, пробегаемся быстрой сортировкой по координате Х. Таким образом мы и упорядочиваем массивы.
Цитата:
если первый массив разбить на два — первая координата меньше/больше какого-нибудь числа, второй аналогично (с другим, вообще говоря, числом), то отрезки с обоими концами из первых частей массива и из второй уж точно не пересекаются между собой.

Это было понятно, когда начал разбивать на части общую картинку пересечений:
Изображение

 Профиль  
                  
 
 Re: Точки пересечений N линий.
Сообщение18.07.2013, 16:38 
Заслуженный участник


04/05/09
4589
Пропустили итерацию $6{1\over2}$.

-- Чт июл 18, 2013 09:41:49 --

А чтобы узнать формулу, лучше записать первую итерацию как $3\cdot1$, вторую - как $3\cdot2$, и т.д.
И после этого будет ясно, что при $n=5$ количество пересечений равно $100$.

 Профиль  
                  
 
 Re: Точки пересечений N линий.
Сообщение18.07.2013, 16:44 


11/04/12
21
Цитата:
Пропустили итерацию $6{1\over2}$.

Не понял.
Цитата:
А чтобы узнать формулу, лучше записать первую итерацию как $3\cdot1$, вторую - как $3\cdot2$, и т.д.
И после этого будет ясно, что при $n=5$ количество пересечений равно $100$.

Да, вы правы. Пересмотрел свой рисунок при n = 5. Пересечений действительно 100, а не 96. Но..
Все равно не понял формулы. Что такое $3\cdot1$ и $3\cdot2$?

 Профиль  
                  
 
 Re: Точки пересечений N линий.
Сообщение18.07.2013, 18:14 
Заслуженный участник


04/05/09
4589
Hasar1n в сообщении #747197 писал(а):
Цитата:
Пропустили итерацию $6{1\over2}$.

Не понял.
Между 6 и 7 на вашем рисунке должна быть ещё одна.

Hasar1n в сообщении #747197 писал(а):
Все равно не понял формулы. Что такое $3\cdot1$ и $3\cdot2$?
В первой итерации зелёные отрезки соединяют каждую из трёх верхних точек с каждой из одной нижней :-), во второй итерации - ...

 Профиль  
                  
 
 Re: Точки пересечений N линий.
Сообщение18.07.2013, 21:49 


11/04/12
21
Цитата:
Между 6 и 7 на вашем рисунке должна быть ещё одна.

Самое ужасное, что я это понял. Но я не понял, какой должна быть эта итерация. В математике я проффи. Ой, профан я в математике.)
Цитата:
В первой итерации зелёные отрезки соединяют каждую из трёх верхних точек с каждой из одной нижней :-), во второй итерации - ...

Так, то есть такой должна быть первая итерация по вашему алгоритму Изображение
?

 Профиль  
                  
 
 Re: Точки пересечений N линий.
Сообщение18.07.2013, 22:20 
Заслуженный участник


04/05/09
4589
Блин. Ну как(!) можно так понять мои слова:
venco в сообщении #747218 писал(а):
В первой итерации зелёные отрезки соединяют каждую из трёх верхних точек с каждой из одной нижней :-), во второй итерации - ...

На всякий случай: я полностью сохранил ваше понятие об итерации.

 Профиль  
                  
 
 Re: Точки пересечений N линий.
Сообщение19.07.2013, 01:14 


11/04/12
21
Мне сложно понять некоторые вещи словами. Нужно увидеть.
Не подскажете, какая последовательность итераций правильная? Если я правильно понял ваши слова.
Изображение

 Профиль  
                  
 
 Re: Точки пересечений N линий.
Сообщение19.07.2013, 05:53 
Заслуженный участник


04/05/09
4589
Никакая. Я имел в виду то, что было на вашем первом рисунке.
Мне, правда, уже надоело, так что дальше думайте сами.

 Профиль  
                  
 
 Re: Точки пересечений N линий.
Сообщение19.07.2013, 16:44 


11/04/12
21
Наконец-то я выспался, и с новыми силами в бой. Я понял, что Вы имели в виду:
$3\cdot1$ + $3\cdot2$ + $3\cdot3$ + $2\cdot1$ + $2\cdot2$ + $2\cdot3$ + $1\cdot1$ + $1\cdot2$ + $1\cdot3$.
Вот и получается, что их 36. По аналогии и с n=5 получаем 100.
Формула для n=4 получается такая : $ \sum\limits_{i=1}^{n-1}$$(n-i)\cdot 1 + (n-i)\cdot 2 + (n-i)\cdot 3$
До этого я все-таки допер не без ваших стараний. Благодарю за помощь. Но как графически представить итерацию $6{1\over2}$ я до сих пор не могу допереть.

 Профиль  
                  
 
 Re: Точки пересечений N линий.
Сообщение20.07.2013, 03:53 


11/04/12
21
Для произвольной n формула приняла бы такой вид:
$\sum\limits_{j=1}^{n-1} \sum\limits_{i=1}^{n-1}$ $(n-i)\cdot j$
В программировании получилось бы так:
Код:
for i:=1 to n-1 do
for j:=1 to n-1 do
sum:=sum+(n-i)*j

Но вот в чем загвоздка. Я пытаюсь найти координаты пересечения всех этих точек. У меня в функцию передаются 5 параметров: 4 точки
Код:
(m1[i]{начало 1-ой линии},m2[j]{конец 1-ой линии},m1[k]{начало 2-ой линии},m2[z]{конец 2-ой линии})
и указатель на тип, в который будут занесены координаты пересечения, если оно есть. Поэтому-то я и прошу помощи для нахождения итерации 6.5.
Deggial, на самом деле это был обезьяний труд, ибо кто смог помочь, помогли. У меня предчувствие, что больше не будет ответов. Просто не знают, как, или не понимают чего я хочу, т.к. выражать свои мысли корректно я не умею.

 Профиль  
                  
 
 Posted automatically
Сообщение20.07.2013, 21:05 
Супермодератор
Аватара пользователя


20/11/12
5728
 i  Тема перемещена из форума «Помогите решить / разобраться (М)» в форум «Карантин»
Причина переноса: неправильно оформлены формулы

Hasar1n, наберите, формулу с картинки $\TeX$ом, а картинку уберите. Инструкции по оформлению формул здесь или здесь (или в этом видеоролике).
После исправлений сообщите в теме Сообщение в карантине исправлено, и тогда тема будет возвращена.

 i  Тема перемещена из форума «Карантин» в форум «Помогите решить / разобраться (М)»
вернул

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group