Files Classes Functions Hierarchy
00001 #include <iostream> 00002 using namespace std; 00003 00004 #include <print.h> 00005 #include <point.h> 00006 00007 #include <mathlib.h> 00008 #include <commandline.h> 00009 #include <mathlibtest.h> 00010 00011 //template< typename T=double> 00012 //double solver<double>::zero=0.0; 00013 00014 //double solver<double>::zero = (double)(1E-20); 00015 00016 //double solver<double>::zero(1E-20); 00017 00018 00019 void mathlibtest::test01(int argc, char** argv) 00020 { 00021 cout << "2D linear equation solver." << endl; 00022 00023 00024 point2<double> a0(3.0,2.0); 00025 point2<double> a1(5.0,-7.0); 00026 point2<double> c(10.0,3.0); 00027 00028 commandline cmd(argc,argv); 00029 cmd.mapvar(a0.x,"a00"); 00030 cmd.mapvar(a0.y,"a10"); 00031 cmd.mapvar(a1.x,"a01"); 00032 cmd.mapvar(a1.y,"a11"); 00033 cmd.mapvar(c.x,"c0"); 00034 cmd.mapvar(c.y,"c1"); 00035 00036 point2<double> x; 00037 00038 solver<double>::d2linearequ(x,a0,a1,c); 00039 00040 cout << SHOW(x) << endl; 00041 } 00042 00043 void mathlibtest::test02(int argc, char** argv) 00044 { 00045 cout << "2D linear equation solver." << endl; 00046 00047 double a00(3.0); 00048 double a01(5.0); 00049 double a10(2.0); 00050 double a11(-7.0); 00051 double c0(10.0); 00052 double c1(3.0); 00053 double x; 00054 double y; 00055 00056 commandline cmd(argc,argv); 00057 cmd.mapvar(a00,"a00"); 00058 cmd.mapvar(a10,"a10"); 00059 cmd.mapvar(a01,"a01"); 00060 cmd.mapvar(a11,"a11"); 00061 cmd.mapvar(c0,"c0"); 00062 cmd.mapvar(c1,"c1"); 00063 00064 solver<double>::d2linearequ(x,y,a00,a01,a10,a11,c0,c1); 00065 00066 cout << SHOW(x) << " " << SHOW(y) << endl; 00067 } 00068 00069 void mathlibtest::test03() 00070 { 00071 vector<uint> index; 00072 index.push_back(3); 00073 index.push_back(0); 00074 index.push_back(11); 00075 index.push_back(9); 00076 index.push_back(7); 00077 00078 vector<uint> v2; 00079 uintc N(15); 00080 integersetdiff(v2,index,N); 00081 cout << SHOW(print(index)) << endl; 00082 cout << SHOW(print(v2)) << endl; 00083 cout << SHOW(N) << endl; 00084 00085 00086 00087 } 00088 00089 void mathlibtest::test04(int argc, char** argv) 00090 { 00091 commandline cmd(argc,argv); 00092 double a0; 00093 double a1; 00094 double b0; 00095 double b1; 00096 cmd.mapvar(a0,"a0"); 00097 cmd.mapvar(a1,"a1"); 00098 cmd.mapvar(b0,"b0"); 00099 cmd.mapvar(b1,"b1"); 00100 00101 double c0; 00102 double c1; 00103 bool res; 00104 res = intervalintersection::unordered(c0,c1,a0,a1,b0,b1); 00105 cout << SHOW(res) << endl; 00106 cout << "( " << c0 << ", " << c1 << " )" << endl; 00107 } 00108 00109 void mathlibtest::test05() 00110 { 00111 double a0; 00112 double a1; 00113 double b0; 00114 double b1; 00115 double c0; 00116 double c1; 00117 bool res; 00118 00119 cout << "Testing 4 different interval intersection cases." << endl << endl; 00120 00121 a0=0.1; a1=0.5; 00122 b0=0.3; b1=0.7; 00123 cout << "( " << a0 << ", " << a1 << " ) ( " << b0 << ", " << b1 << " )" << endl; 00124 res = intervalintersection::unordered(c0,c1,a0,a1,b0,b1); 00125 cout << SHOW(res) << " ( " << c0 << ", " << c1 << " )" << endl; 00126 00127 a0=0.1; a1=0.5; 00128 b0=0.2; b1=0.4; 00129 cout << "( " << a0 << ", " << a1 << " ) ( " << b0 << ", " << b1 << " )" << endl; 00130 res = intervalintersection::unordered(c0,c1,a0,a1,b0,b1); 00131 cout << SHOW(res) << " ( " << c0 << ", " << c1 << " )" << endl; 00132 00133 00134 a0=0.1; a1=0.5; 00135 b0=0.0; b1=0.3; 00136 cout << "( " << a0 << ", " << a1 << " ) ( " << b0 << ", " << b1 << " )" << endl; 00137 res = intervalintersection::unordered(c0,c1,a0,a1,b0,b1); 00138 cout << SHOW(res) << " ( " << c0 << ", " << c1 << " )" << endl; 00139 00140 00141 a0=0.1; a1=0.5; 00142 b0=0.0; b1=0.7; 00143 cout << "( " << a0 << ", " << a1 << " ) ( " << b0 << ", " << b1 << " )" << endl; 00144 res = intervalintersection::unordered(c0,c1,a0,a1,b0,b1); 00145 cout << SHOW(res) << " ( " << c0 << ", " << c1 << " )" << endl; 00146 } 00147 00148 00149 00150 void mathlibtest::test06(int argc, char** argv) 00151 { 00152 commandline cmd(argc,argv); 00153 double a[2]; 00154 double b[2]; 00155 00156 a[0] = a[1] = 0.0; 00157 b[0] = b[1] = 0.0; 00158 00159 cmd.mapvar(a[0],"a0"); 00160 cmd.mapvar(a[1],"a1"); 00161 00162 cmd.mapvar(b[0],"b0"); 00163 cmd.mapvar(b[1],"b1"); 00164 00165 cout << "a = ( " << a[0] << ", " << a[1] << " )" << endl; 00166 cout << "b = ( " << b[0] << ", " << b[1] << " )" << endl; 00167 00168 bool res; 00169 res = intervalintersection::unordered(a,b); 00170 cout << SHOW(res) << endl; 00171 } 00172 00173 void mathlibtest::test07(int argc, char** argv) 00174 { 00175 commandline cmd(argc,argv); 00176 double a[2][2]; 00177 double b[2][2]; 00178 00179 // Describe a box 00180 // x: [ a00, a01 ] 00181 // y: [ a10, a11 ] 00182 00183 a[0][0] = 0.2; 00184 a[0][1] = 0.3; 00185 a[1][0] = 0.1; 00186 a[1][1] = 0.7; 00187 00188 cmd.mapvar(a[0][0],"a00"); 00189 cmd.mapvar(a[0][1],"a01"); 00190 cmd.mapvar(a[1][0],"a10"); 00191 cmd.mapvar(a[1][1],"a11"); 00192 00193 cout << "First box" << endl; 00194 cout << "{ ( " << a[0][0] << ", " << a[0][1] << " ), ( "; 00195 cout << a[1][0] << ", " << a[1][1] << " ) }" << endl; 00196 00197 // Describe a box 00198 // x: [ b00, b01 ] 00199 // y: [ b10, b11 ] 00200 b[0][0] = -1.0; 00201 b[0][1] = 0.0; 00202 b[1][0] = 0.1; 00203 b[1][1] = 0.5; 00204 00205 cmd.mapvar(b[0][0],"b00"); 00206 cmd.mapvar(b[0][1],"b01"); 00207 cmd.mapvar(b[1][0],"b10"); 00208 cmd.mapvar(b[1][1],"b11"); 00209 00210 cout << "Second box" << endl; 00211 cout << "{ ( " << b[0][0] << ", " << b[0][1] << " ), ( "; 00212 cout << b[1][0] << ", " << b[1][1] << " ) }" << endl; 00213 00214 bool res; 00215 res = intervalintersection::unorderedD2((double*)a,(double*)b); 00216 cout << SHOW(res) << endl; 00217 } 00218 00219 00220 void mathlibtest::test010() 00221 { 00222 double a[3]; 00223 double x[2]; 00224 bool res; 00225 00226 a[0]=0.1; 00227 a[1]=3.0; 00228 a[2]=4.0; 00229 res = solverInconsistent<double>::d1linearequ(x[0],x[1],a[0],a[1],a[2]); 00230 cout << "a[]: " << print(a,a+3) << endl; 00231 cout << "x[]: " << print(x,x+2) << endl; 00232 cout << SHOW(a[0]*x[0]+a[1]*x[1]-a[2]) << endl; 00233 cout << SHOW(res) << endl; 00234 cout << endl; 00235 00236 a[0]=0.1; 00237 a[1]=0.0; 00238 a[2]=4.0; 00239 res = solverInconsistent<double>::d1linearequ(x[0],x[1],a[0],a[1],a[2]); 00240 cout << "a[]: " << print(a,a+3) << endl; 00241 cout << "x[]: " << print(x,x+2) << endl; 00242 cout << SHOW(a[0]*x[0]+a[1]*x[1]-a[2]) << endl; 00243 cout << SHOW(res) << endl; 00244 cout << endl; 00245 00246 a[0]=0.0; 00247 a[1]=-1.0; 00248 a[2]=5.0; 00249 res = solverInconsistent<double>::d1linearequ(x[0],x[1],a[0],a[1],a[2]); 00250 cout << "a[]: " << print(a,a+3) << endl; 00251 cout << "x[]: " << print(x,x+2) << endl; 00252 cout << SHOW(a[0]*x[0]+a[1]*x[1]-a[2]) << endl; 00253 cout << SHOW(res) << endl; 00254 cout << endl; 00255 00256 } 00257 00258 00259 void mathlibtest::test011() 00260 { 00261 00262 double a[4] = {0.0,0.0,1.0,0.0}; 00263 double b[4] = {2.0,1.0,0.0,-0.5}; 00264 00265 00266 point3<double> w; 00267 00268 bool res; 00269 res = solverInconsistent<double>::d2linearequ 00270 ( 00271 w.x,w.y,w.z, 00272 a[0],a[1],a[2],a[3], 00273 b[0],b[1],b[2],b[3] 00274 ); 00275 00276 cout << SHOW(res) << endl; 00277 00278 cout << SHOW( w.x*a[0]+w.y*a[1]+w.z*a[2]-a[3] ) << endl; 00279 cout << SHOW( w.x*b[0]+w.y*b[1]+w.z*b[2]-b[3] ) << endl; 00280 } 00281 00282 00283 void mathlibtest::test015() 00284 { 00285 cout << "Circle and line intersection test in 2D." << endl; 00286 00287 point2<double> p0; 00288 point2<double> p1; 00289 00290 cout << "Enter 2 2D point for the start and end of the line." << endl; 00291 00292 point2<double> q0; 00293 point2<double> q1; 00294 00295 cin >> q0; 00296 cin >> q1; 00297 cout << "Enter cirle radius" << endl; 00298 double radius; 00299 cin >> radius; 00300 00301 bool res; 00302 res = circleLine::intersection2D(p0,p1,radius,q0,q1); 00303 cout << SHOW(res) << endl; 00304 if (res) 00305 { 00306 cout << SHOW(p0) << endl; 00307 cout << SHOW(p1) << endl; 00308 cout << SHOW(p0.distance()) << endl; 00309 cout << SHOW(p1.distance()) << endl; 00310 } 00311 } 00312 00313
1.5.8