void Fibertracking::trackFiber_backward() { using namespace std; Voxel *current = &voxels[cur_voxel_index]; Vector *curVec; // current->setVisited(false); start_o = *new Vector( (current->getX()+0.5)*voxelext_x, (current->getY()+0.5)*voxelext_y, (current->getZ()+0.5)*voxelext_z ); // Startpunkt einschreiben nextVoxel_backward(); if ( current == &voxels[cur_voxel_index]) { return; } else { current->setVisited(true); current = &voxels[cur_voxel_index]; } while (current->getAnisotropy() > min_anisotropy && !current->isVisited() && (fabs(intersec_angle) < max_intersec_angle) ) { // current->setVisited(true); curVec = new Vector((double)(voxels[cur_voxel_index].getDir_Index()), (double)cur_voxel_index, 0.); curVectorList.add_at_start(*curVec); curVectorList.add_at_start(start_o); currentFiber.add_at_start(*current); nextVoxel_backward(); if ( current == &voxels[cur_voxel_index]) { break; } else { current->setVisited(true); current = &voxels[cur_voxel_index]; } } if (current->isVisited()) { n_visited++; } else { if (current->getAnisotropy() < min_anisotropy) { n_aniso++; } else { if (fabs(intersec_angle) > max_intersec_angle) { n_angle++; } } } }
void Fibertracking::trackFiber_forward() { using namespace std; Voxel *current = &voxels[cur_voxel_index]; Vector *curVec; start_o = *new Vector( (current->getX()+0.5)*voxelext_x, (current->getY()+0.5)*voxelext_y, (current->getZ()+0.5)*voxelext_z ); curVectorList = *new VectorList(); while (current->getAnisotropy() > min_anisotropy && !current->isVisited() && (fabs(intersec_angle) < max_intersec_angle) ) { // current->print(); currentFiber.add_at_end(*current); curVectorList.add_at_end(start_o); // schreibt den Schnittpunkt an die verkettete Liste curVec = new Vector((double)(voxels[cur_voxel_index].getDir_Index()), (double)cur_voxel_index, 0.); curVectorList.add_at_end(*curVec); nextVoxel_forward(); if ( current == &voxels[cur_voxel_index]) // || voxels[cur_voxel_index].isVisited() { break; } else { current->setVisited(true); current = &voxels[cur_voxel_index]; } } if (current->isVisited()) { n_visited++; } else { if (current->getAnisotropy() < min_anisotropy) { n_aniso++; } else { if (fabs(intersec_angle) > max_intersec_angle) { n_angle++; } } } }