1 #ifndef gra_FeaturePoint_H__
2 #define gra_FeaturePoint_H__
4 #include "../oo/ObjBase.h"
6 #include "../math/Vector.h"
20 template <
class Scalar,
class Description,
21 class Position = Vector<Scalar >,
22 class Feature = Vector<Description> >
39 pos_(pDim, Scalar(0)), des_(dDim, Description(0)) {
53 pos_(fp.pos_), des_(fp.des_) {
66 pos_.copyFrom(fp.pos_);
67 des_.copyFrom(fp.des_);
75 pos_.referenceFrom(fp.pos_);
76 des_.referenceFrom(fp.des_);
175 bool write(FILE* f,
bool bin,
unsigned int fg)
const {
181 if (fwrite(&a,
sizeof(a), 1, f) < 1)
return false;
182 if (fwrite(&b,
sizeof(b), 1, f) < 1)
return false;
183 for (
size_t i = 0, I =
position().dimension(); i < I; ++i) {
184 if (fwrite(&(tmp =
position(i)),
sizeof(tmp), 1, f) < 1)
return false;
186 for (
size_t i = 0, I =
description().dimension(); i < I; ++i) {
187 if (fwrite(&(tmp =
description(i)),
sizeof(tmp), 1, f) < 1)
195 if (fprintf(f,
"%d %d\n", a, b) < 2)
return false;
196 for (
size_t i = 0, I =
position().dimension(); i < I; ++i) {
197 if (fprintf(f,
"%f ", (
double)
position(i)) < 1)
return false;
200 for (
size_t i = 0, I =
description().dimension(); i < I; ++i) {
201 if (fprintf(f,
"%f ", (
double)
description(i)) < 1)
return false;
208 bool read(FILE* f,
bool bin,
unsigned int fg) {
212 if (fread(&a,
sizeof(a), 1, f) < 1)
return false;
213 if (fread(&b,
sizeof(b), 1, f) < 1)
return false;
214 position(Position((
size_t)a, Scalar(0)));
216 for (
size_t i = 0, I =
position().dimension(); i < I; ++i) {
217 if (fread(&tmp,
sizeof(tmp), 1, f) < 1)
return false;
220 for (
size_t i = 0, I =
description().dimension(); i < I; ++i) {
221 if (fread(&tmp,
sizeof(tmp), 1, f) < 1)
return false;
228 if (fscanf(f,
"%d %d", &a, &b) < 2)
return false;
229 position(Position((
size_t)a, Scalar(0)));
231 for (
size_t i = 0, I =
position().dimension(); i < I; ++i) {
232 if (fscanf(f,
"%lf", &tmp) < 1)
return false;
235 for (
size_t i = 0, I =
description().dimension(); i < I; ++i) {
236 if (fscanf(f,
"%lf", &tmp) < 1)
return false;
252 return typeid(*this).name();
256 return std::string(
ctype());
262 #endif // gra_FeaturePoint_H__
FeaturePoint(FeaturePoint const &fp)
constructor
Scalar position(size_t index) const
回傳position的第i個scalar
Description description(size_t index) const
回傳description的第i個Description
Description description(size_t i, Description const &d)
修改description的第i個Description
char const * ctype() const
用C-style string回傳這個class的type name
Feature description() const
回傳description
FeaturePoint(Position const &v, Feature const &d)
constructor
Position position(Position const &p)
修改position
FeaturePoint & referenceFrom(FeaturePoint const &fp)
參照
Scalar position(size_t i, Scalar const &s)
修改position的第i個scalar
一切物件的Base, 並要求每個物件都要有read, write, create, ... 等功能
Description operator[](size_t i) const
same as description(i)
ObjBase * copyFrom(ObjBase const &b)
bool write(FILE *f, bool bin, unsigned int fg) const
將物件寫入檔案, 預設implement為直接回傳 false
~FeaturePoint()
destructor
std::string type() const
用std::string回傳這個class的type name
Feature description(Feature const &d)
修改description
Position position() const
回傳position
FeaturePoint & copyFrom(FeaturePoint const &fp)
複製
Feature & descriptionGet()
回傳description (non-const reference)
FeaturePoint(size_t pDim, size_t dDim)
constructor
FeaturePoint & operator=(FeaturePoint const &fp)
same as copyFrom(fp)
bool read(FILE *f, bool bin, unsigned int fg)
將物件從檔案讀出, 預設implement為直接回傳 false
Position & positionGet()
回傳position (non-const reference)
ObjBase * create() const
回傳一個new出來的物件, 預設implement為直接回傳 NULL
Scalar const & operator()(size_t i) const
same as position(i)
FeaturePoint()
constructor