/*************************************************************************** * Copyright (C) 2006 by Nicolas PASCAL * * pascal@icare-pc12 * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "tools.h" #include "statistic.h" #include #include using namespace std; int main(int argc, char *argv[]) { /** decompose an integer in tens digits */ unsigned int n = 1977; vector v = MyTools::get_digits (n); printf ("%u -> ", n); MyTools::print_vec (v); n = 549684135; v = MyTools::get_digits (n); printf ("%u -> ", n); MyTools::print_vec (v); // typedef vector Point; // typedef vector Line; // // /*** test 2D intersection algorithm ***/ // Point p1(2); Point p2(2); // 2 points that define the 2nd line // Line l1; // the 2nd line // Point p3(2); Point p4(2); // 2 points that define the 2nd line // Line l2; // the 2nd line // Point intersection(2); // the intersection point // // // normal case -> should be (2,4) // p1[0]= 2.; p1[1]=6.; l1.push_back(p1); // p2[0]= 2.; p2[1]=1.; l1.push_back(p2); // p3[0]=-2.; p3[1]=4.; l2.push_back(p3); // p4[0]= 4.; p4[1]=4.; l2.push_back(p4); // if (MyTools::get_intersection(l1,l2,intersection)) // // cout<<"intersection between Line("< ("< should be (1.5,2.5) // l1.clear();l2.clear(); // p1[0]=-3.5;p1[1]=7.5; l1.push_back(p1); // p2[0]=4.5;p2[1]=-0.5; l1.push_back(p2); // p3[0]=-2.5;p3[1]=-1.5; l2.push_back(p3); // p4[0]=5.5;p4[1]=6.5; l2.push_back(p4); // if (MyTools::get_intersection(l1,l2,intersection)) // // cout<<"intersection between Line("< ("< ("<(v+0,v+(sizeof(v)/sizeof(float)),val); // cout<<"In Vector "<"<"<"< v_stl_1; // v_stl_1.push_back(1.1); // v_stl_1.push_back(2.2); // v_stl_1.push_back(3.3); // v_stl_1.push_back(4.4); // v_stl_1.push_back(5.5); // v_stl_1.push_back(6.6); // v_stl_1.push_back(7.7); // v_stl_1.push_back(8.8); // v_stl_1.push_back(9.9); // // vector v_stl_2; // v_stl_2.push_back(1.); // v_stl_2.push_back(4.); // v_stl_2.push_back(2.); // v_stl_2.push_back(7.); // v_stl_2.push_back(8.); // v_stl_2.push_back(1.); // v_stl_2.push_back(2.); // v_stl_2.push_back(8.); // v_stl_2.push_back(0.); // // interpolate(v_stl_1.begin(),v_stl_1.end(),v_stl_2.begin(),v_stl_2.end(),val1,val2); // cout<<"interpolation of "< v(myints,myints+8); // vector::iterator low,up; // // low=lower_bound (v.begin(), v.end(), 15); // cout< general case : val inside v_abs range // // // // v = 3.; // // // // abs = MyTools::get_abscissa ( v, v_abs, sz ); // // // // // recompute v using float abscissa // // // // fractpart = modf ( abs , &intpart ); // // // // ilow = ( int ) ( intpart ); // // // // iup = ilow + 1; // // // // interp_v = v_abs [ ilow ] + fractpart * ( v_abs [ iup ] - v_abs [ ilow ] ); // // // // printf ( "v=%f\tabs=%f\tinterp_v=%f\n", v, abs, interp_v ); // // // // // // // // // -> val outside bounds // // // // v = -0.1; // // // // abs = MyTools::get_abscissa ( v, v_abs, sz ); // // // // // recompute v using float abscissa // // // // fractpart = modf ( abs , &intpart ); // // // // ilow = ( int ) ( intpart ); // // // // iup = ilow + 1; // // // // interp_v = v_abs [ ilow ] + fractpart * ( v_abs [ iup ] - v_abs [ ilow ] ); // // // // printf ( "v=%f\tabs=%f\tinterp_v=%f\n", v, abs, interp_v ); // // // // // // // // v = 10.; // // // // abs = MyTools::get_abscissa ( v, v_abs, sz ); // // // // // recompute v using float abscissa // // // // fractpart = modf ( abs , &intpart ); // // // // ilow = ( int ) ( intpart ); // // // // iup = ilow + 1; // // // // interp_v = v_abs [ ilow ] + fractpart * ( v_abs [ iup ] - v_abs [ ilow ] ); // // // // printf ( "v=%f\tabs=%f\tinterp_v=%f\n", v, abs, interp_v ); // // // // // // // // // --- descending order // // // // printf ( "--- descending order ---\n" ); // // // // v_abs = v_abs_dsc; // // // // printf ( "v_abs = [ " ); // // // // for ( i = 0 ; i < sz ; ++i ) { // // // // printf ( "%f", v_abs [ i ] ); // // // // if ( i < ( sz - 1 ) ) // // // // printf ( ", " ); // // // // } // // // // printf ( "]\n" ); // // // // // // // // // -> general case : val inside v_abs range // // // // v = 3.; // // // // abs = MyTools::get_abscissa ( v, v_abs, sz ); // // // // // recompute v using float abscissa // // // // fractpart = modf ( abs , &intpart ); // // // // ilow = ( int ) ( intpart ); // // // // iup = ilow + 1; // // // // interp_v = v_abs [ ilow ] + fractpart * ( v_abs [ iup ] - v_abs [ ilow ] ); // // // // printf ( "v=%f\tabs=%f\tinterp_v=%f\n", v, abs, interp_v ); // // // // // // // // // -> val outside bounds // // // // v = 10.; // // // // abs = MyTools::get_abscissa ( v, v_abs, sz ); // // // // // recompute v using float abscissa // // // // fractpart = modf ( abs , &intpart ); // // // // ilow = ( int ) ( intpart ); // // // // iup = ilow + 1; // // // // interp_v = v_abs [ ilow ] + fractpart * ( v_abs [ iup ] - v_abs [ ilow ] ); // // // // printf ( "v=%f\tabs=%f\tinterp_v=%f\n", v, abs, interp_v ); // // // // // // // // v = -0.1; // // // // abs = MyTools::get_abscissa ( v, v_abs, sz ); // // // // // recompute v using float abscissa // // // // fractpart = modf ( abs , &intpart ); // // // // ilow = ( int ) ( intpart ); // // // // iup = ilow + 1; // // // // interp_v = v_abs [ ilow ] + fractpart * ( v_abs [ iup ] - v_abs [ ilow ] ); // // // // printf ( "v=%f\tabs=%f\tinterp_v=%f\n", v, abs, interp_v ); }