
modifié : include/ArrayTree/ArrayTreeBuilder.tpp modifié : include/Attributes/AreaAttributes.hpp modifié : include/Attributes/AreaAttributes.tpp modifié : include/Attributes/AverageAttributes.hpp modifié : include/Attributes/AverageAttributes.tpp modifié : include/Attributes/MoIAttributes.hpp modifié : include/Attributes/MoIAttributes.tpp modifié : include/Attributes/SDAttributes.hpp modifié : include/Attributes/SDAttributes.tpp modifié : include/Attributes/XYAttributes.hpp modifié : include/Attributes/XYAttributes.tpp modifié : include/CompAttribute.hpp modifié : include/CompAttribute.tpp modifié : include/IImage.hpp modifié : include/IImage.tpp modifié : include/Tree.hpp modifié : include/Tree.tpp modifié : src/Tree.cpp modifié : src/testMain.cpp
35 lines
1.1 KiB
C++
35 lines
1.1 KiB
C++
#ifndef _OTB_TRISKELE_XY_ATTRIBUTES_TPP
|
|
#define _OTB_TRISKELE_XY_ATTRIBUTES_TPP
|
|
|
|
inline
|
|
XYAttributes::XYAttributes (const Tree &tree, const AreaAttributes &areaAttributes)
|
|
: CompAttributeC<AverageXY> (tree) {
|
|
compute (areaAttributes);
|
|
}
|
|
|
|
inline
|
|
XYAttributes::~XYAttributes () {
|
|
}
|
|
|
|
inline void
|
|
XYAttributes::compute (const AreaAttributes &areaAttributes) {
|
|
DimImg const width = CompAttribute<AverageXY>::tree.getSize ().width;
|
|
const DimImg *areas = areaAttributes.getValues ();
|
|
computeSameCompLevel ([this, &width, &areas] (const DimImg &parentId) {
|
|
AverageXY tmpXY;
|
|
tree.forEachChildTI (parentId, [this, &tmpXY, &width, &areas, &parentId] (const bool &isLeaf, const DimImg &childId) {
|
|
if (isLeaf) {
|
|
tmpXY.x += childId % width;
|
|
tmpXY.y += childId / width;
|
|
return;
|
|
}
|
|
tmpXY.x += CompAttribute<AverageXY>::values[childId].x*areas[childId];
|
|
tmpXY.y += CompAttribute<AverageXY>::values[childId].y*areas[childId];
|
|
});
|
|
CompAttribute<AverageXY>::values[parentId].x = tmpXY.x/areas[parentId];
|
|
CompAttribute<AverageXY>::values[parentId].y = tmpXY.y/areas[parentId];
|
|
});
|
|
}
|
|
|
|
#endif // _OTB_TRISKELE_XY_ATTRIBUTES_TPP
|