Russian Qt Forum
Сентябрь 29, 2024, 00:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Описание поверхности из дискретных точек функцией - интерполирование  (Прочитано 6166 раз)
daimon
Гость
« : Июнь 09, 2010, 11:34 »

Бикубическая интерполяция в большинстве случаев не справляется. Имеет ли смысл интеполировать плоскость кривыми Безье и как это сделать?
Пример для 2D плоскости. Как переделать для 3D (x,y,z)? Лучше бы избавится от класса QPainterPath и сделать методом для массивов.
« Последнее редактирование: Июнь 09, 2010, 12:29 от daimon » Записан
Mityai
Гость
« Ответ #1 : Июнь 25, 2010, 16:30 »

Если интересуют методы интерполяций (кривые Безье, сплайны и тому подобное), то это книга Роджерса "Математические основы машинной графики" за 2001 год, могу даж не полениться и выложить, если действительно нужно.
Записан
ieroglif
Гость
« Ответ #2 : Июнь 25, 2010, 17:26 »

Если интересуют методы интерполяций (кривые Безье, сплайны и тому подобное), то это книга Роджерса "Математические основы машинной графики" за 2001 год, могу даж не полениться и выложить, если действительно нужно.
надо Улыбающийся выложи.
так же могу выложить на свой серв, что бы там лежало и все качали.
единственная проблема - у меня жёсткий инет и почему-то нормально скачать могу только с rghost.ru - если туда выложишь, то перекачаю и выложу у себя. но самое идеальное - это прямой линк Улыбающийся тогда сразу перекачаю к себе.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Июнь 25, 2010, 23:09 »

Бикубическая интерполяция в большинстве случаев не справляется.
Идеального сплайна пока не существует

Имеет ли смысл интеполировать плоскость кривыми Безье и как это сделать?
Пример для 2D плоскости. Как переделать для 3D (x,y,z)?
Вычисления одинаковы в 2D и 3D. Безье сплайн хорош когда пользователь может его подогнать интерактивно. Обычно это выглядит как 2 вектора (касательная) которые появляются из выбранной точке (см. напр. Photoshop). Часто также возникает потребность разбить сплайн в точке ("колено"). Если такая интерактивность не планируется, то Безье может давать "петли" и др. артефакты, поэтому лучше ограничиться бикубиком
Записан
Mityai
Гость
« Ответ #4 : Июнь 28, 2010, 09:28 »

единственная проблема - у меня жёсткий инет и почему-то нормально скачать могу только с rghost.ru - если туда выложишь, то перекачаю и выложу у себя. но самое идеальное - это прямой линк Улыбающийся тогда сразу перекачаю к себе.

Прямого линка нет, мне эта книга в наследство от одногруппника досталась:) На rghost выложу в ближайшее время, отпишусь.
« Последнее редактирование: Июнь 28, 2010, 09:31 от Mityai » Записан
Mityai
Гость
« Ответ #5 : Июнь 28, 2010, 09:31 »

Пример для 2D плоскости. Как переделать для 3D (x,y,z)?

Может быть работал с QMatrix, который задает повороты координатной сетки? Там эти все повороты матрицами делаются. В 3D абсолютно аналогично, только размерность матриц при преобразованиях координат не 2*2, а 3*3. Вид писать не хочу - сам не помню. На Вики есть и в той книге, про которую выше писал, тоже.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Июнь 28, 2010, 10:19 »

Пример для 2D плоскости. Как переделать для 3D (x,y,z)?
Может быть работал с QMatrix, который задает повороты координатной сетки? Там эти все повороты матрицами делаются. В 3D абсолютно аналогично, только размерность матриц при преобразованиях координат не 2*2, а 3*3. Вид писать не хочу - сам не помню. На Вики есть и в той книге, про которую выше писал, тоже.
Для сплайнов матрицы не нужны. Вычисления независимы и одинаковы для каждой координаты, поэтому что 2D (x. y) то и 3D (x. y. z) - просто добавить те же расчеты для Z. Напр. Безье сплайн. Есть 4 точки

p(i - 1)         p(i)                  p(i + 1)                 p(i + 2)
*-------------*---------------*-----------------*

Нужно найти значение сплайна в точке между p(i) и p(i+1).  Промежуточная точка описывается коодинатой U (в точке p(i) U = 0,  в точке p(i + 1) U = 1). Зная U вычисляем 4 коэффициетна k1, k2, k3, k4 (формулы есть в книге). Затем просто

p(U) = p(i) * k1 + p(i + 1) * k2 + ((pi(i) - p(i - 1)) * k3 +  ((pi(i + 2) - p(i + 1)) * k4;   
Записан
Mityai
Гость
« Ответ #7 : Июнь 28, 2010, 10:23 »

Пример для 2D плоскости. Как переделать для 3D (x,y,z)?
Может быть работал с QMatrix, который задает повороты координатной сетки? Там эти все повороты матрицами делаются. В 3D абсолютно аналогично, только размерность матриц при преобразованиях координат не 2*2, а 3*3. Вид писать не хочу - сам не помню. На Вики есть и в той книге, про которую выше писал, тоже.
Для сплайнов матрицы не нужны. Вычисления независимы и одинаковы для каждой координаты, поэтому что 2D (x. y) то и 3D (x. y. z) - просто добавить те же расчеты для Z. Напр. Безье сплайн. Есть 4 точки

p(i - 1)         p(i)                  p(i + 1)                 p(i + 2)
*-------------*---------------*-----------------*

Нужно найти значение сплайна в точке между p(i) и p(i+1).  Промежуточная точка описывается коодинатой U (в точке p(i) U = 0,  в точке p(i + 1) U = 1). Зная U вычисляем 4 коэффициетна k1, k2, k3, k4 (формулы есть в книге). Затем просто

p(U) = p(i) * k1 + p(i + 1) * k2 + ((pi(i) - p(i - 1)) * k3 +  ((pi(i + 2) - p(i + 1)) * k4;   

Igors, в данном случае я имел в виду не расчет, а исключительно отображение в 3D (мало ли человеку нужно будет вокруг какой-то оси покрутить то, что получилось).
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Июнь 28, 2010, 10:28 »

Igors, в данном случае я имел в виду не расчет, а исключительно отображение в 3D (мало ли человеку нужно будет вокруг какой-то оси покрутить то, что получилось).
Тогда само собой, матрица (и это гораздо легче без QMatrix)
Записан
Mityai
Гость
« Ответ #9 : Июнь 28, 2010, 20:28 »

Для всех страждущих обещанная книга: "Математические основы машинной графики"

http://rghost.ru/2007292
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.051 секунд. Запросов: 23.