56unsigned char findMainAxis (
const T & curve,
const long double & t )
59 value[0] = std::abs ( curve.xp ( t )[0] );
60 value[1] = std::abs ( curve.xp ( t )[1] );
61 value[2] = std::abs ( curve.xp ( t )[2] );
63 if ( value[0] >= value[1] && value[0] >= value[2] )
65 else if ( value[1] >= value[0] && value[1] >= value[2] )
72int main(
int argc,
char** argv )
75 typedef EllipticHelix < Space > MyHelix;
76 typedef ForwardRigidTransformation3D < Space, RealPoint, RealPoint, Identity > ForwardTrans;
77 typedef DecoratorParametricCurveTransformation < MyHelix, ForwardTrans > MyRotatedCurve;
78 typedef NaiveParametricCurveDigitizer3D < MyRotatedCurve > Digitizer;
82 trace.info() <<
"exampleParamCurve3dDigitizationTransformationDecorator" << endl;
89 MyDigitalCurve digitalCurve;
90 MyHelix helix( 30, 20, 1 );
94 double angle = M_PI/3.;
97 MyRotatedCurve rotCurve ( helix, trans );
103 digitize.init ( 0, MyHelix::getPeriod() * 10., 0.0001 );
104 digitize.digitize( back_insert_iterator < MyDigitalCurve> ( digitalCurve ), back_insert_iterator < MyMetaData > ( metaData ) );
107 trace.info() <<
"Number of points: " << digitalCurve.size () <<
" number of metadata: " << metaData.size () << endl;
109 for (
unsigned int i = 0; i < digitalCurve.size ( ); i++ )
111 if (
findMainAxis ( rotCurve, metaData.at ( i ).first ) == 0 )
113 if (
findMainAxis ( rotCurve, metaData.at ( i ).first ) == 1 )
115 if (
findMainAxis ( rotCurve, metaData.at ( i ).first ) == 2 )
117 viewer << digitalCurve.at ( i );
void digitize(Shape &shape, std::vector< SCell > &sCells0, std::vector< SCell > &sCells1, KSpace &kspace, const double h)