Поиск:

Ответ в темуСоздание новой темы Создание опроса
> "Синхронизвать/наложить" 2 поверхности 
:(
    Опции темы
kjf03
Дата 12.3.2012, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 18.7.2010

Репутация: нет
Всего: нет



Здравствуйте.
--------------------------------------------------
Есть кривая в 3 мерном измерении (оси x y z), кривая построена прямыми отрезками (есть координаты начала и конца отрезка), причем координата z = const.
Есть плоскость изогнутая по оси Z, в 3 мерном измерении, причем информация о точках поскости есть с шагом s=10 по по осям x и y.
--------------------------------------------------
Или условие другими словами:
---
есть массив отрезвокв
{x0,y0,z0
  x1,y1,z1
  x2,y2,z2
  ...
  xn,yn,zn}, причем z0..n=const
---
 есть массив точек принадлежащих кривой проскости
{p_x0,p_y0,p_z0; p_x0+1*s,p_y0+1*s,p_z1; p_x0+2*s,p_y2+2*s,p_z2 ... p_x0+n*s,p_yn+n*s,p_zn
  p_x1,p_y0,p_z0; p_x1+1*s,p_y0+1*s,p_z1; p_x1+2*s,p_y2+2*s,p_z2 ... p_x1+n*s,p_yn+n*s,p_zn
  ...
  p_xm,p_y0,p_z0; p_xm+1*s,p_y0+1*s,p_z1; p_xm+2*s,p_y2+2*s,p_z2 ... p_xm+n*s,p_yn+n*s,p_zn

}, причем z0..n не равно const
-------------------------------------------------- 
Отрезки проецируется на кривую по плоскость, каким образом теперь получить массив отрезков полученных на кривой плоскости, при этом считая что кривая плоскость состоит из идеально плоских квадратов с координатами вершин из массива кривой плоскости.

Может есть готовый алгорим, а то велосипед не охота заново изобретать?

Это сообщение отредактировал(а) kjf03 - 12.3.2012, 17:38

Присоединённый файл ( Кол-во скачиваний: 11 )
Присоединённый файл  pr.PNG 24,39 Kb
PM MAIL   Вверх
Mirkes
Дата 12.3.2012, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 586
Регистрация: 18.8.2011
Где: Красноярск

Репутация: 4
Всего: 17



Если я правильно понял (количесво опечаток впечатляет и сильно затрудняет понимание) то есть некая ломанная в плоскости z=const
и поверхность заданная координатами (x[i],y[j],z[i,j], x[i]=x[0]+s*i, y[j]=y[0]+s*j, z[i,j] - произвольно заданные значения)
требуется найти проекцию ломанной на поверхность.
Прежде чем решать эту задачу необходимо определить о какой проекции идет речь. Возможые варианты:
1. Центральная проекция (есть лампа, расположенная в определенном мессте, а проекцией служит тень от ломанной). На этот вариант наводит солнышко на картинке
2. Проекция вдоль оси z. На этот вариант наводит изображение направления проецирования.
3. По наименьшему расстоянию.

Для каждого из этих вариантов есть свои методы.
Определитесь, чего вы хотите. Кстати, такого рода проекции часто используются в играх, так что есть смысл спросить в соответсвующем разделе. 


--------------------
Mirkes
PM MAIL   Вверх
kjf03
Дата 12.3.2012, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 18.7.2010

Репутация: нет
Всего: нет



Спасибо за уточнение задачи.
2)Проекция вдоль оси Z.

Это сообщение отредактировал(а) kjf03 - 12.3.2012, 18:32
PM MAIL   Вверх
_Y_
Дата 12.3.2012, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



Цитата(kjf03 @  12.3.2012,  16:53 Найти цитируемый пост)
кривая плоскость состоит из идеально плоских квадратов

Боюсь что из идеальных квадратов может состоять только идеально плоская плоскость. smile 

Мы как-то давно обсуждали здесь описание трехмерных поверхностей. По всему выходит, что описать ее плоскими элементами можно только если использовать треугольники, форма которых не ограничена дополнительными условиями (типа равностороннести, прямоугольности и т.п.)

В целом же если решать задачу в лоб, то просто строите проекцию на плоскость каждго плоского элемента, использованного для описания поверхности. Потом отбрасываете части, вышедшие за границы элемента. Но это тупо, конечно. Разумнее будет сначала найти проекцию на один какой-то элемент, а поотом идти "по цепочке" ища проекции на соседние элементы.


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
kjf03
Дата 12.3.2012, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 18.7.2010

Репутация: нет
Всего: нет



Цитата(_Y_ @ 12.3.2012,  20:29)
Цитата(kjf03 @  12.3.2012,  16:53 Найти цитируемый пост)
кривая плоскость состоит из идеально плоских квадратов

Боюсь что из идеальных квадратов может состоять только идеально плоская плоскость. smile 

Мы как-то давно обсуждали здесь описание трехмерных поверхностей. По всему выходит, что описать ее плоскими элементами можно только если использовать треугольники, форма которых не ограничена дополнительными условиями (типа равностороннести, прямоугольности и т.п.)

В целом же если решать задачу в лоб, то просто строите проекцию на плоскость каждго плоского элемента, использованного для описания поверхности. Потом отбрасываете части, вышедшие за границы элемента. Но это тупо, конечно. Разумнее будет сначала найти проекцию на один какой-то элемент, а поотом идти "по цепочке" ища проекции на соседние элементы.

Цитата

Боюсь что из идеальных квадратов может состоять только идеально плоская плоскость. smile 

Вы правы, уместней говорить о триангуляции.
В общем, известны значения точек Z по сетке с шагом S, неровной поверхность на которую делается проекция отрезка (являющегося частью кривой на проецируемой плоскости).

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

Это сообщение отредактировал(а) kjf03 - 12.3.2012, 20:45

Присоединённый файл ( Кол-во скачиваний: 1 )
Присоединённый файл  pr.PNG 42,82 Kb
PM MAIL   Вверх
kjf03
Дата 12.3.2012, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 18.7.2010

Репутация: нет
Всего: нет



Помогите пожалуйста, разве это сложная задача?
PM MAIL   Вверх
_Y_
Дата 13.3.2012, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



Цитата(kjf03 @ 12.3.2012,  23:20)
Помогите пожалуйста, разве это сложная задача?

Задача не особо сложная. А вот время позднее smile 

Будет двадцать минут свободных распишу как бы я подходил к проблеме. Но я не гуру особенный, просто подобные задачи решал. Может до моих свободных минут кто-то что-то действительно хорошее и предложит.


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
kjf03
Дата 13.3.2012, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 18.7.2010

Репутация: нет
Всего: нет



Вот пример данных.
Данные о отрезках хранятся в текстовом файле в следующем виде:
...
X1.27127 Y3.73310 Z0.00000
X1.41238 Y3.73310 Z0.00000
X3.10571 Y3.73310 Z0.00000
X3.24683 Y3.73310 Z0.00000
...
Данне о точках по сетке хранятся в текстовом файле в следующем виде:
...
X0.00000 Y0.00000 Z3.73310                                      
X10.00000 Y0.00000 Z3.10571                                    
X20.00000 Y0.00000 Z3.73310
...
X0.00000 Y0.00000 Z3.44310 
X0.00000 Y10.00000 Z3.50571
X0.00000 Y20.00000 Z3.9301
...
PM MAIL   Вверх
Mirkes
Дата 13.3.2012, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 586
Регистрация: 18.8.2011
Где: Красноярск

Репутация: 4
Всего: 17



Параллельное оси Z проецирование очень просто. Если координаты исходной вершины ломаной равны (X,Y,z), то координаты проекции будут (X,Y,z1). 
По этому правилу можно определить проекции всех вершин ломанной. Если вершины ломанной (X1,Y1),(X2,Y2),...,(Xn,Yn), то их проекции на "кривую" плоскость будут такими же.
После этого необходимо определить координаты решетки в которые попали вершины ломанной.
xi=((xi-x0)/s)*s+x0. (деление целочисленное, s-шаг решетки, x0 - координата первой вершины РЕШЕТКИ).
yi=((yi-y0)/s)*s+y0. (деление целочисленное, s-шаг решетки, y0 - координата первой вершины РЕШЕТКИ).
Получаем ячейку решетки (xi,yi),(xi,Yi+s),(xi+s,yi),(xi+s,yi+s)
Теперь необходимо дополнить список вершин ломанной точками пересечения ребер ломаной с ребрами решетки. (см. рис.)
После этого остается рассчитать координату Z для нового списка вершин ломаной.
Для каждой вершины (Xi,Yi) мы имеем координаты ячейки решетки которой принадлежит эта вершина: (xi,yi,zi1),(xi,Yi+s,zi2),(xi+s,yi,zi3),(xi+s,yi+s,zi4).
Поскольку Вы предложили считать ячейку идеально плоским квадратом (что крайне сомнительно, но да хозяин - барин), аглоритм рассчета Zi достаточно прост:
Z(Xi,yi+s)=(zi4-zi2)*(Xi-xi)/s+zi2
Z(Xi,yi)   =(z34-zi1)*(Xi-xi)/s+zi1
Zi=Z(Xi,Yi)=(Z(Xi,yi+s)-Z(Xi,yi))*(Yi-yi)/s+Z(Xi,yi)
по этим формулам можно вычислить координату Z для всех вершин ломанной на "кривой" плоскости.






Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  grid.png 0,99 Kb


--------------------
Mirkes
PM MAIL   Вверх
_Y_
Дата 13.3.2012, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



О! К этому осталось только добавить, что, как уже говорилоось, плоские квадраты лучше заменить треугольниками. Проще всего каждый квадрат заменить четырьмя треугольниками с дополнительной усредненной опорной точкой в центре квадрата:
Каждый квадрат с координатами углов (обходя квадрат по кругу)
(X1,Y1,Z1), (X1,Y2,Z2), (X2,Y2,Z3), (X2,Y1,Z4)
заменяем треугольниками
(X1,Y1,Z1), (X1,Y2,Z2), (x,y,z)
(X1,Y2,Z2), (X2,Y2,Z3), (x,y,z)
(X2,Y2,Z3), (X2,Y1,Z4), (x,y,z)
(X2,Y1,Z4), (x,y,z), (X1,Y1,Z1)
где
x = (X1+X2)/2
y = (Y1+Y2)/2
z = (Z1+Z2+Z3+Z4)/4

....................................
Впрочем, если поверхность кривляется не очень сильно, а другие размерности системы велики по сравнению с кривляниями, то можно, наверное и квадратами. Но тогда придется брать допущение, что между квадратами возможны ступеньки, на которые проекция не приходится: рванная такая по оси Z проекция. И квадрат описывать как
(X1,Y1,z), (X1,Y2,z), (X2,Y2,z), (X2,Y1,z)
где, как и в предидущем случае,
z = (Z1+Z2+Z3+Z4)/4




--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Mirkes
Дата 14.3.2012, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 586
Регистрация: 18.8.2011
Где: Красноярск

Репутация: 4
Всего: 17



Вариант с заменой квадрата на четыре треугольника заведомо предпочтительней. 
В предложенном мной алгоритме нужно будет определять не квадрат а треугольник (точнее в определенном квадрате брать треугольник). Вычисления проводятся по аналогичным формулам исходя из подобия.

Но я думаю в этой ситуации автор задачи должен решить, с чем он будет работать.


--------------------
Mirkes
PM MAIL   Вверх
kjf03
Дата 15.3.2012, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 18.7.2010

Репутация: нет
Всего: нет



ок, благодарю
сейчас буду реализовывать...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0989 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.