2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Переход по "разбитой" поверхности
Сообщение20.01.2018, 23:22 


16/01/18
17
Оговорюсь сразу, что не математик (вовсе), так что если ниже будет некорректные формулировки, тыкайте, я поправлю.
Изначально есть некая стеклянная сфера, состоящая из плоских граней в $\mathbb{R}^3$, затем я роняю ее и она разбивается. Осколки - плоские грани лежат на плоскости, таким образом, я "перевел" ее в $\mathbb{R}^2$. Далее в $\mathbb{R}^2$ я определяю на одной из граней прямую, которая проходя через всю грань не выходит за ее пределы, а сразу переходит на вторую грань, изначально смежную первой и т.д. Это происходит так, будто я провожу сегментную линию на поверхности исходной сферы. Линия произвольна и ее уравнение может меняется, но не при переходе, а внутри только одной грани, т.е. переход осуществляется для линии с определенным уравнение в предыдущей грани.

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

Как я начал ее решать. Положение каждого полигона в $\mathbb{R}^2$ случайно (единственное условие, что "нормали смотрят вверх", т.е. лицевые стороны полигонов смотрят на нас). Так на рисунке ниже приведена схема 2-х смежных полигонов, серой линией показаны связи по общим точкам, красной показано линия заданная для первого полигона и как она переходит во второй полигон. Сначала я строю линию $AB$ в системе координат, построенной на базисе $\{x,y\}$. Далее:
- определяю какой полигон граничит с первым по ребру, с которым пересеклась заданная линия;
- считаю, что базис первого полигона и второго построенные по смежной стороне $c_1^1c_2^1$($c^2_1c^2_2$) одинаковы, а система координат имеет ноль в точке $c_1^1$($c_1^2$);
- определяю матрицу перехода из $\{x_1,y_1\}$ в $\{x_2,y_2\}$ и осуществляю перенос второго полигона, совмещая точки $c_1^1$ и $c_1^2$;
- продолжаю строить линию ($DE$) и осуществляю обратный переход в СК на базисе $\{x_2,y_2\}$ в точке $c_1^2$
- делаю аналогично для всех полигонов

Изображение

 Профиль  
                  
 
 Re: Переход по "разбитой" поверхности
Сообщение20.01.2018, 23:33 
Заслуженный участник
Аватара пользователя


01/09/13
4699
disednet в сообщении #1286023 писал(а):
некая стеклянная сфера, состоящая из плоских граней

?? видимо, всё-таки, (выпуклый) многогранник?

-- 20.01.2018, 23:35 --

disednet в сообщении #1286023 писал(а):
есть ли у подобной задачи какое то аналитическое решение

? Угол с ребром одинаков на обеих гранях.

-- 20.01.2018, 23:37 --

disednet в сообщении #1286023 писал(а):
связанность полигонов определена через общие точки.

? может быть рёбра, всё же?

 Профиль  
                  
 
 Re: Переход по "разбитой" поверхности
Сообщение21.01.2018, 00:09 
Заслуженный участник


27/04/09
28128
disednet в сообщении #1286023 писал(а):
Это происходит так, будто я провожу сегментную линию на поверхности исходной сферы. Линия произвольна и ее уравнение может меняется, но не при переходе, а внутри только одной грани, т.е. переход осуществляется для линии с определенным уравнение в предыдущей грани.
Так в чём состоит задача? Такому описанию, во-первых, удовлетворяет куча всевозможных ломаных, и если зафиксировать несколько точек и/или рёбер, всё равно почти все остальные будут иметь возможность идти как угодно.

Если вопрос состоит в том, чтобы определить, какая точка границы одного осколка соответствует каким точкам границ других (ведь если это вершина, может быть больше одного), то тут ничего впечатляющего не сделать, даже аккуратно описав математику. А именно, просто описываем все рёбра как параметризованные отрезки $f\colon[0;1]\to A$ ($A$ — аффинная плоскость, а $f$ — ограничение некоторого аффинного преобразования $\mathbb R\to A$) и сопоставляем каждому ребру $f$ его двойник $f'$ (притом $f'' = f$), учтя, что $f(t)$ и $f'(t)$ должны представлять одну и ту же точку. Теперь, когда нужно переходить туда-сюда, сначала определяем для интересующей точки ребро $f$ и значение $t$, потом при $t\in(0;1)$ просто берём $f'(t)$, а в противном случае смотрим ещё и на смежные рёбра (полную структуру можно хранить в DCEL) и их двойники. Возможно, если вершины граней будут попадаться часто, стоит завести отдельное сопоставление вершинам всех инцидентных рёбер.

Теперь, если вам всё же надо сохранять угол, как спрашивает Geen, добавление совершенно мизерное (сначала повысив $A$ до евклидовой плоскости): указать поворот для каждой упорядоченной пары рёбер-двойников. Если манипулируете углами, в виде угла; если чем-то другим, в виде там матрицы поворота или комплексного числа. Для любой точки пересечения прямой и границы осколка однозначно определён вектор, касательный прямой и смотрящий наружу (или внутрь, но надо выбрать что-то одно) из осколка, вот его при переходе на соседний осколок через пару рёбер-двойников и поворачиваем ассоциированным с ней поворотом. Если после этого вектор не смотрит внутрь осколка, значит, мы переходили через вершину и выбрали не ту грань, тогда надо поискать другую (или усовершенствовать алгоритм, чтобы по направлению этого вектора бралась сразу правильная грань). Когда есть вектор, смотрящий внутрь, проводим прямую и получаем следующий вектор наружу, ad infinitum.

Это набросок, но уже вполне подробный. (Если задачу я не угадал — что ж, сам виноват, что стал расписывать.)

 Профиль  
                  
 
 Re: Переход по "разбитой" поверхности
Сообщение21.01.2018, 14:57 


16/01/18
17
Geen в сообщении #1286026 писал(а):
? видимо, всё-таки, (выпуклый) многогранник?

да, выпуклый многогранник
Geen в сообщении #1286026 писал(а):
? Угол с ребром одинаков на обеих гранях.

если вопрос об угле между ребрами, то нет, в общем случае я использую треугольники в качестве граней, соответственно, угол разный
Geen в сообщении #1286026 писал(а):
может быть рёбра, всё же?

да, ребро, ну или две точки, на которых построено ребро; тут какой примитив выбрать в качестве базового - все равно

arseniiv в сообщении #1286033 писал(а):
Так в чём состоит задача? Такому описанию, во-первых, удовлетворяет куча всевозможных ломаных, и если зафиксировать несколько точек и/или рёбер, всё равно почти все остальные будут иметь возможность идти как угодно.

Есть уравнение прямой $k{x}+b$, , которая изначально строится в полигоне $P_1$. При построение очередной точки мы обнаруживаем, что прямая пересекает ребро полигона $P_1$, определяем смежный по этому ребру полигон $P_i$ и находим некий линейный оператор $M$. В результате все точки получаемые в ходе вычисления $k{x}+b$ после момента пересечения смежного ребра преобразуются с помощью оператора $M$ и линия продолжается уже в смежном полигоне $P_i$. Задача определить данный оператор $M$.
arseniiv в сообщении #1286033 писал(а):
Если вопрос состоит в том, чтобы определить, какая точка границы одного осколка соответствует каким точкам границ других (ведь если это вершина, может быть больше одного), то тут ничего впечатляющего не сделать, даже аккуратно описав математику. А именно, просто описываем все рёбра как параметризованные отрезки $f\colon[0;1]\to A$ ($A$ — аффинная плоскость, а $f$ — ограничение некоторого аффинного преобразования $\mathbb R\to A$) и сопоставляем каждому ребру $f$ его двойник $f'$ (притом $f'' = f$), учтя, что $f(t)$ и $f'(t)$ должны представлять одну и ту же точку. Теперь, когда нужно переходить туда-сюда, сначала определяем для интересующей точки ребро $f$ и значение $t$, потом при $t\in(0;1)$ просто берём $f'(t)$, а в противном случае смотрим ещё и на смежные рёбра (полную структуру можно хранить в DCEL
) и их двойники. Возможно, если вершины граней будут попадаться часто, стоит завести отдельное сопоставление вершинам всех инцидентных рёбер.

Ну это позволит только определить точку выхода\входа для линии в двух смежных полигонах.
arseniiv в сообщении #1286033 писал(а):
Теперь, если вам всё же надо сохранять угол, как спрашивает Geen, добавление совершенно мизерное (сначала повысив $A$ до евклидовой плоскости): указать поворот для каждой упорядоченной пары рёбер-двойников. Если манипулируете углами, в виде угла; если чем-то другим, в виде там матрицы поворота или комплексного числа. Для любой точки пересечения прямой и границы осколка однозначно определён вектор, касательный прямой и смотрящий наружу (или внутрь, но надо выбрать что-то одно) из осколка, вот его при переходе на соседний осколок через пару рёбер-двойников и поворачиваем ассоциированным с ней поворотом. Если после этого вектор не смотрит внутрь осколка, значит, мы переходили через вершину и выбрали не ту грань, тогда надо поискать другую (или усовершенствовать алгоритм, чтобы по направлению этого вектора бралась сразу правильная грань). Когда есть вектор, смотрящий внутрь, проводим прямую и получаем следующий вектор наружу, ad infinitum.

Да это хорошее и простое решение задачи, но как мне поступить если функция задана в общем виде $f(x)$, например так $y=x^2$?

 Профиль  
                  
 
 Re: Переход по "разбитой" поверхности
Сообщение21.01.2018, 15:10 
Заслуженный участник


27/04/09
28128
Вместо прямой? Тогда да, стоит переносить её вашим общим аффинным (это не линейный оператор, параллельный перенос им не реализовать) оператором. «Поворотная» часть та же, перенос тоже очевиден — от точки на исходном ребре к точки на ребре-двойнике; сначала переносим, потом поворачиваем. Кстати, кривая не обязательно должна быть графиком какой-то функции, тем более что после поворота она почти наверняка перестанет быть графиком функции — приведённая для примера парабола, например, после поворота на сколь угодно малый угол.

 Профиль  
                  
 
 Re: Переход по "разбитой" поверхности
Сообщение21.01.2018, 15:12 


16/01/18
17
arseniiv
согласен, просто в моей задаче функция задана полиномом.

 Профиль  
                  
 
 Re: Переход по "разбитой" поверхности
Сообщение21.01.2018, 20:33 
Заслуженный участник
Аватара пользователя


01/09/13
4699
disednet в сообщении #1286112 писал(а):
если вопрос об угле между ребрами

Скорее, "угол падения равен углу отражения" - угол Вашей линии с ребром одинаков на обеих гранях...

disednet в сообщении #1286120 писал(а):
в моей задаче функция задана полиномом.

А Вы понимаете, что после некого обхода поверхности этот полином может "снова вернуться" на начальную грань (и в общем случае, бесконечное число раз)?

 Профиль  
                  
 
 Re: Переход по "разбитой" поверхности
Сообщение21.01.2018, 20:48 
Заслуженный участник


27/04/09
28128
(Будет странно, если нет — так и с прямой будет почти всегда, взять хотя бы самый простой случай тора.)

 Профиль  
                  
 
 Re: Переход по "разбитой" поверхности
Сообщение21.01.2018, 20:56 


16/01/18
17
Geen в сообщении #1286195 писал(а):
А Вы понимаете, что после некого обхода поверхности этот полином может "снова вернуться" на начальную грань (и в общем случае, бесконечное число раз)?

Ну в некотором роде я надеюсь, что так и будет.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

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



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

Сейчас этот форум просматривают: mihaild


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

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