Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: daimon от Июнь 09, 2010, 11:34



Название: Описание поверхности из дискретных точек функцией - интерполирование
Отправлено: daimon от Июнь 09, 2010, 11:34
Бикубическая интерполяция в большинстве случаев не справляется. Имеет ли смысл интеполировать плоскость кривыми Безье и как это сделать?
Пример для 2D плоскости. Как переделать для 3D (x,y,z)? Лучше бы избавится от класса QPainterPath и сделать методом для массивов.
(http://ipicture.ru/uploads/100609/0/kBXstyYITn.png)


Название: Re: Описание поверхности из дискретных точек функцией - интерполирование
Отправлено: Mityai от Июнь 25, 2010, 16:30
Если интересуют методы интерполяций (кривые Безье, сплайны и тому подобное), то это книга Роджерса "Математические основы машинной графики" за 2001 год, могу даж не полениться и выложить, если действительно нужно.


Название: Re: Описание поверхности из дискретных точек функцией - интерполирование
Отправлено: ieroglif от Июнь 25, 2010, 17:26
Если интересуют методы интерполяций (кривые Безье, сплайны и тому подобное), то это книга Роджерса "Математические основы машинной графики" за 2001 год, могу даж не полениться и выложить, если действительно нужно.
надо :) выложи.
так же могу выложить на свой серв, что бы там лежало и все качали.
единственная проблема - у меня жёсткий инет и почему-то нормально скачать могу только с rghost.ru - если туда выложишь, то перекачаю и выложу у себя. но самое идеальное - это прямой линк :) тогда сразу перекачаю к себе.


Название: Re: Описание поверхности из дискретных точек функцией - интерполирование
Отправлено: Igors от Июнь 25, 2010, 23:09
Бикубическая интерполяция в большинстве случаев не справляется.
Идеального сплайна пока не существует

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


Название: Re: Описание поверхности из дискретных точек функцией - интерполирование
Отправлено: Mityai от Июнь 28, 2010, 09:28
единственная проблема - у меня жёсткий инет и почему-то нормально скачать могу только с rghost.ru - если туда выложишь, то перекачаю и выложу у себя. но самое идеальное - это прямой линк :) тогда сразу перекачаю к себе.

Прямого линка нет, мне эта книга в наследство от одногруппника досталась:) На rghost выложу в ближайшее время, отпишусь.


Название: Re: Описание поверхности из дискретных точек функцией - интерполирование
Отправлено: Mityai от Июнь 28, 2010, 09:31
Пример для 2D плоскости. Как переделать для 3D (x,y,z)?

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


Название: Re: Описание поверхности из дискретных точек функцией - интерполирование
Отправлено: Igors от Июнь 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;   


Название: Re: Описание поверхности из дискретных точек функцией - интерполирование
Отправлено: Mityai от Июнь 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 (мало ли человеку нужно будет вокруг какой-то оси покрутить то, что получилось).


Название: Re: Описание поверхности из дискретных точек функцией - интерполирование
Отправлено: Igors от Июнь 28, 2010, 10:28
Igors, в данном случае я имел в виду не расчет, а исключительно отображение в 3D (мало ли человеку нужно будет вокруг какой-то оси покрутить то, что получилось).
Тогда само собой, матрица (и это гораздо легче без QMatrix)


Название: Re: Описание поверхности из дискретных точек функцией - интерполирование
Отправлено: Mityai от Июнь 28, 2010, 20:28
Для всех страждущих обещанная книга: "Математические основы машинной графики"

http://rghost.ru/2007292 (http://rghost.ru/2007292)