Помогите разобраться с Nearest neighbor search [закрыто]

154
26 ноября 2016, 19:04

Разбираюсь с поиском соседних частиц в программе fluidv3, не мог бы кто-то пояснить как происходит

SetupGridAllocate ( Vector3DF min, Vector3DF max, float sim_scale, float cell_size, float border )
{
float world_cellsize = cell_size / sim_scale;
m_GridMin = min;
m_GridMax = max;
m_GridSize = m_GridMax;
m_GridSize -= m_GridMin;
m_GridRes.x = ceil ( m_GridSize.x / world_cellsize );       
m_GridRes.y = ceil ( m_GridSize.y / world_cellsize );
m_GridRes.z = ceil ( m_GridSize.z / world_cellsize );
m_GridSize.x = m_GridRes.x * cell_size / sim_scale;             
m_GridSize.y = m_GridRes.y * cell_size / sim_scale;
m_GridSize.z = m_GridRes.z * cell_size / sim_scale;
m_GridDelta = m_GridRes;        
m_GridDelta /= m_GridSize;
m_GridTotal = (int)(m_GridRes.x * m_GridRes.y * m_GridRes.z);
// Allocate grid
if ( m_Grid == 0x0 ) free (m_Grid);
if ( m_GridCnt == 0x0 ) free (m_GridCnt);
m_Grid = (uint*) malloc ( sizeof(uint*) * m_GridTotal );
m_GridCnt = (uint*) malloc ( sizeof(uint*) * m_GridTotal );
memset ( m_Grid, GRID_UCHAR, m_GridTotal*sizeof(uint) );
memset ( m_GridCnt, GRID_UCHAR, m_GridTotal*sizeof(uint) );
m_Param[PSTAT_GMEM] = 12 * m_GridTotal;     // Grid memory used
// Number of cells to search:
// n = (2r / w) +1,  where n = 1D cell search count, r = search radius, w = world cell width
//
m_GridSrch =  floor(2*(m_Param[PSMOOTHRADIUS]/sim_scale) / world_cellsize) + 1;
if ( m_GridSrch < 2 ) m_GridSrch = 2;
m_GridAdjCnt = m_GridSrch * m_GridSrch * m_GridSrch ;           
if ( m_GridSrch > 6 ) {
    app_printf ( "ERROR: Neighbor search is n > 6. \n " );
    exit(-1);
}
int cell = 0;              // Не понимаю этот участок
for (int y=0; y < m_GridSrch; y++ ) 
    for (int z=0; z < m_GridSrch; z++ ) 
        for (int x=0; x < m_GridSrch; x++ ) 
            m_GridAdj[cell++] = ( y*m_GridRes.z + z )*m_GridRes.x +  x ;            // -1 compensates for ndx 0=empty

app_printf ( "Adjacency table (CPU) \n");
for (int n=0; n < m_GridAdjCnt; n++ ) {
    app_printf ( "  ADJ: %d, %d\n", n, m_GridAdj[n] );
}
if ( mPackGrid != 0x0 ) free ( mPackGrid );
mPackGrid = (int*) malloc ( sizeof(int) * m_GridTotal );
}

и еще эта часть, как происходить поиск

for ( i=0; i < NumPoints(); i++ ) {
    sum = 0.0;
    if ( *(mGridCell+i) != GRID_UNDEF ) {
        for (int cell=0; cell < m_GridAdjCnt; cell++) {
            j = m_Grid [  *(mGridCell+i) - nadj + m_GridAdj[cell] ] ;
            while ( j != GRID_UNDEF ) {
                if ( i==j ) { j = *(mGridNext+j) ; continue; }
                //вычисление 
            }
 }
READ ALSO
Регулярные выражения с++ и boost::regex

Регулярные выражения с++ и boost::regex

Помогите пожалуйста с регвыражением

189
Не могу понять в чем ошибка [закрыто]

Не могу понять в чем ошибка [закрыто]

По данному целому числу N распечатайте все квадраты натуральных чисел, не превосходящие N, в порядке возрастанияФормат входных данных Вводится...

273
Ошибка при работе с компаратором [закрыто]

Ошибка при работе с компаратором [закрыто]

Пишу свой двунаправленный список (шаблонный класс)Нужно организовать вставку с автосортировкой (т

165