Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Интерполяция поверхности из дискретных значений 
:(
    Опции темы
koren
Дата 9.6.2010, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Как организовать интерполяцию поверхности (x,y,z)?
Входящие данные х, у, выходящие z
PM MAIL   Вверх
Дшпыук
Дата 9.6.2010, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Не сплю
*


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

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



У себя делал так:

Код

 for(int i=1;i<MAP_SIZEX;i++)
 for(int j=1;j<MAP_SIZEZ;j++){
     height_map[i][j] = (height_map[i][j] + height_map[i+1][j] + height_map[i-1][j] + height_map[i][j+1] + height_map[i][j-1])/5;
 }


Поверхность представлена как карта высот размера [X]x[Z]
PM MAIL ICQ   Вверх
koren
Дата 9.6.2010, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Дшпыук @ 9.6.2010,  22:02)
У себя делал так:

Код

 for(int i=1;i<MAP_SIZEX;i++)
 for(int j=1;j<MAP_SIZEZ;j++){
     height_map[i][j] = (height_map[i][j] + height_map[i+1][j] + height_map[i-1][j] + height_map[i][j+1] + height_map[i][j-1])/5;
 }


Поверхность представлена как карта высот размера [X]x[Z]

У меня двухмерная матрица z, где порядковый номер по столбцам-x, по строкам - у (входящий массив z для интерпаляции).
Для интерпаляции входящие x y порядковые номера.
Но использовать я буду другие х у (в пределах определённых для z).
Как это для моего варианта посмотреть?
PM MAIL   Вверх
Дшпыук
Дата 9.6.2010, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Не сплю
*


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

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



Тогда дай объявление этой самой матрицы.

Добавлено через 7 минут и 32 секунды
А вообще вроде как у меня то же самое сделано. Пределы есть MAP_SIZE[x | z] 
Цитата(koren @  9.6.2010,  22:13 Найти цитируемый пост)
У меня двухмерная матрица z(height_map), где порядковый номер по столбцам-x(i), по строкам - у(j) (входящий массив z для интерпаляции((height_map))).


Цитата(koren @  9.6.2010,  22:13 Найти цитируемый пост)
Но использовать я буду другие х у (в пределах определённых для z).

MAP_SIZEX - предел для X MAP_SIZEZ для Y
PM MAIL ICQ   Вверх
koren
Дата 10.6.2010, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <math.h>

#include <iostream>
using namespace std;

double fun(double x,double y)
{
    return (cos(sqrt(x*x+y*y) + cos(sqrt(((x+.913*2*3.14)*(x+.913*2*3.14))+y*y)) + cos(sqrt(((x-.913*2*3.14)*(x-.913*2*3.14))+(y*y))))*4);;
}

using namespace std;
int main(int argc, char **argv)
{
    ap::real_1d_array x;
    ap::real_1d_array y;
    ap::real_2d_array f;
    
    int n,m;
    int i,j;
    
    spline2dinterpolant s;
    double err;
    double maxerr;


    //
    // Interpolation by natural Cubic spline.
    //
    printf("INTERPOLATION BY NATURAL CUBIC SPLINE\n\n(cos(sqrt(x*x+y*y) + cos(sqrt(((x+.913*2*3.14)*(x+.913*2*3.14))+y*y)) + cos(sqrt(((x-.913*2*3.14)*(x-.913*2*3.14))+(y*y))))*4)\n");
    

    //
    // Create spline
    //
    n = 4;
        m= 4;
    x.setlength(n);
    y.setlength(m);
    f.setlength(n,m);
    for(i = 0; i <= n-1; i++)
    {
        x(i) = i;
        
    }
    for(i = 0; i <= m-1; i++)
    {
        y(i) = i;
        
    }
    for(i = 0; i <= n-1; i++)
    {
        for(j = 0; j <= m-1; j++)
        {
            f(i,j) = fun(x(i),y(j));
            cout<<"x = "<<i<<"\ty = "<<j<<"\tf= "<<f(i,j)<<endl;

        }
    }
    cout<<endl<<endl;
    for(int i=0;i<=n-1;i++)
        for(int j=0;j<=m-1;j++){
            f(i,j) = (f(i,j) + f(i+1,j) + f(i-1,j) + f(i,j+1) +f(i,j-1))/5;
            cout<<"x = "<<i<<"\ty = "<<j<<"\ts= "<<f(i,j)<<endl;
        }
}

user posted image
Неправильно!

Это сообщение отредактировал(а) koren - 10.6.2010, 20:42
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




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


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

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