void Grid::print_points() const {

	// check indexing:
	if (!check()) {
		print_labels();
		return;
	}

	for (unsigned int i = 0; i < gridSize(); i++) {

		// get index set:
		MultiIndexed::IndexSet is = i2x(i);

		// get Cartesian point:
		COORD_CART cp = getPoint(is);

		cout << "i = " << i << " --> ";
		for (unsigned int j = 0; j < cp.size(); j++) {
			cout << "x(" << j << ") = " << cp[j] << "  ";
		}

		cout << endl;
	}

}
COORD_CYL coord_xyz2rpz(const COORD_CART & p){

	// reserve storage:
	COORD_CYL out(p);

	// calc r:
	out.resize(2,0);
	out[0] = eucDistCart(out,COORD_CART(2,0));

	// calc phi:
	if(out[0] == 0)
		out[1] = TWOPI/4.;
	else
		out[1] = acos(p[1]/out[0]);

	// append further coordinates:
	while(p.size() > out.size())
		out.push_back(p[out.size()]);

	return out;
}