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
4318
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
4318
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 ] 

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



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

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


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

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