| 55 | #pragma warning (disable: 4244) |
| 56 | |
| 57 | PointViewPtr demeanPointView(const PointView& view) |
| 58 | { |
| 59 | using namespace Eigen; |
| 60 | using namespace Dimension; |
| 61 | |
| 62 | PointIdList ids(view.size()); |
| 63 | std::iota(ids.begin(), ids.end(), 0); |
| 64 | Vector3d centroid = computeCentroid(view, ids); |
| 65 | PointViewPtr outView = view.makeNew(); |
| 66 | |
| 67 | for (PointId idx = 0; idx < view.size(); idx++) |
| 68 | { |
| 69 | double x = view.getFieldAs<double>(Id::X, idx) - centroid.x(); |
| 70 | double y = view.getFieldAs<double>(Id::Y, idx) - centroid.y(); |
| 71 | double z = view.getFieldAs<double>(Id::Z, idx) - centroid.z(); |
| 72 | outView->setField(Id::X, idx, x); |
| 73 | outView->setField(Id::Y, idx, y); |
| 74 | outView->setField(Id::Z, idx, z); |
| 75 | } |
| 76 | return outView; |
| 77 | } |
| 78 | |
| 79 | PointViewPtr demeanPointView(const PointView& view, double* centroid) |
| 80 | { |