Go to the documentation of this file.
71 Tbox *domain, unsigned int *tp, unsigned int m, unsigned int k, double *p, double e,
127 unsigned int *tp, Tbox *ambient,
128 unsigned int id1, Tchart *c1,
129 unsigned int id2, Tchart *c2);
165 unsigned int xID, unsigned int yID, unsigned int zID,
186 unsigned int xID, unsigned int yID, unsigned int zID,
202 fprintf(stderr, " Computing kernel+basis\n");
221 Error( "Only singular maps can be linked to other singular maps");
246 unsigned int id1, Tchart *c1,
247 unsigned int id2, Tchart *c2)
257 CutPolytope(pr,t,c2-> r,id2,( void *)c1-> w,( void *)c1,c1-> m,tp,ambient,c1->p);
263 CutPolytope(pr,t,c1->r,id1,( void *)c2-> w,( void *)c2,c2-> m,tp,ambient,c2->p);
269 unsigned int *tp, Tbox *ambient,
270 unsigned int id1, Tchart *c1,
271 unsigned int id2, Tchart *c2)
277 if ((c1-> w==c2-> w)&&(c1-> m==c2-> m)&&(c1-> k==c2-> k))
315 NEW(t1,c2-> k, double);
327 Error( "Non-orthonormal tangent space in IntersectChartsInt (1)?");
334 NEW(t2,c1-> k, double);
343 Error( "Non-orthonormal tangent space in IntersectChartsInt (2)?");
360 CutPolytope(pr,t2,c2-> r,id2,( void *)c1-> w,( void *)c1,c1-> m,tp,ambient,c1->p);
365 CutPolytope(pr,t1,c1->r,id1,( void *)c2-> w,( void *)c2,c2-> m,tp,ambient,c2->p);
377 Error( "Intersecting non-compatible local charts");
384 unsigned int xID, unsigned int yID, unsigned int zID,
391 Error( "PlotChartAsFace only works for 2d manifolds");
396 if (fscanf(fcost, "%lf",&cost)!=1)
397 Error( "No enough data in the cost file");
426 unsigned int current,n1,n2,nc;
434 NEW(visited,nv, boolean);
435 NEW(fv,nv, unsigned int);
475 if ((cx<0)&&(p[i][0]<cx))
477 if ((cx>0)&&(p[i][0]>cx))
479 if ((cy<0)&&(p[i][1]<cy))
481 if ((cy>0)&&(p[i][1]>cy))
483 if ((cz<0)&&(p[i][2]<cz))
485 if ((cz>0)&&(p[i][2]>cz))
512 while((!found)&&(i<ne))
518 if ((n1==current)&&(!visited[n2]))
525 if ((n2==current)&&(!visited[n1]))
536 Warning( "A vertex without neighbours!!");
581 unsigned int xID, unsigned int yID, unsigned int zID,
587 Error( "PlotChartAsBox only works for 3d manifolds");
592 o[yID]-c-> r,o[yID]+c-> r,
593 o[zID]-c-> r,o[zID]+c-> r,
629 Tbox *domain, unsigned int *tp, unsigned int m, unsigned int k, double *p, double e,
637 unsigned int nrJ,ncJ;
657 if ((c-> k==0)||(c-> m==0)||(c-> k>c-> m))
658 Error( "Dimension missmatch in InitChart (2)");
661 if ((c-> m!=ncJ)||(c-> n>nrJ))
662 Error( "Jacobian-system missmatch in InitChart (1)");
679 memcpy(c-> center,p,c-> m* sizeof( double));
693 if ((trusted)||(c-> n==0))
719 NEW(c-> T,c-> m*c-> k, double);
720 memcpy(c-> T,T, sizeof( double)*(c-> m*c-> k));
727 if ((!singular)&&(forceRS)&&(c-> singular))
730 Error( "The point is not regular (and is supposed to be)");
735 if (out<(singular?2:1))
737 if ((singular)||(T!=NULL))
742 if ((forceRS)||(T!=NULL))
748 NEW(c-> l,c-> ml, unsigned int);
778 if (out>(singular?1:0))
792 unsigned int m, unsigned int k, double *p, double e, double eCurv, double r,
796 return( InitChartInt( FALSE, FALSE, TRUE,pr,simple,domain,tp,m,k,p,e,eCurv,r,NULL,sJ,w,c));
800 unsigned int m, unsigned int k, double *p, double e, double eCurv, double r,
804 return( InitChartInt( FALSE, TRUE, FALSE,pr,simple,domain,tp,m,k,p,e,eCurv,r,NULL,sJ,w,c));
808 unsigned int m, unsigned int k, double *p, double e, double eCurv, double r,
812 return( InitChartInt( FALSE, TRUE, TRUE,pr,simple,domain,tp,m,k,p,e,eCurv,r,NULL,sJ,w,c));
816 unsigned int m, unsigned int k, double *p, double e, double eCurv, double r,
820 return( InitChartInt( TRUE, FALSE, TRUE,pr,simple,domain,tp,m,k,p,e,eCurv,r,NULL,sJ,w,c));
824 unsigned int m, unsigned int k, double *p, double *T,
825 double e, double eCurv, double r,
829 return( InitChartInt( FALSE, TRUE, TRUE,pr,simple,domain,tp,m,k,p,e,eCurv,r,T,sJ,w,c));
834 #if (COMPUTE_LQRPOLICY_IN_T)
839 Error( "Using SetLinearizedDynamics on a manifold that can not be a state space");
853 #if (COMPUTE_LQRPOLICY_IN_T)
858 Error( "Singular A matrix in SetLinearizedDynamics");
860 NEW(c-> d,c-> k, double);
873 double **iRBt, double **BiRBt, Tchart *c)
904 if ((c_src-> n==0)||(c_src-> T==NULL))
908 NEW(c_dst-> T,c_dst-> m*c_dst-> k, double);
909 memcpy(c_dst-> T,c_src-> T, sizeof( double)*(c_dst-> m*c_dst-> k));
913 if ((c_src-> nrJ==0)||(c_src-> BJ==NULL))
918 memcpy(c_dst-> BJ,c_src-> BJ,c_dst-> nrJ* sizeof( boolean));
925 NEW(c_dst-> l,c_dst-> ml, unsigned int);
926 memcpy(c_dst-> l,c_src-> l,c_dst-> nl* sizeof( unsigned int));
961 NEW(c_dst-> A,c_dst-> k*c_dst-> k, double);
962 memcpy(c_dst-> A,c_src-> A,c_dst-> k*c_dst-> k* sizeof( double));
964 NEW(c_dst-> B,c_dst-> k*(c_dst-> da), double);
965 memcpy(c_dst-> B,c_src-> B,c_dst-> k*(c_dst-> da)* sizeof( double));
967 NEW(c_dst-> c,c_dst-> k, double);
968 memcpy(c_dst-> c,c_src-> c,c_dst-> k* sizeof( double));
970 NEW(c_dst-> d,c_dst-> k, double);
971 memcpy(c_dst-> d,c_src-> d,c_dst-> k* sizeof( double));
974 memcpy(c_dst-> iRBt,c_src-> iRBt,(c_dst-> da)*c_dst-> k* sizeof( double));
977 memcpy(c_dst-> BiRBt,c_src-> BiRBt,c_dst-> k*c_dst-> k* sizeof( double));
987 Error( "Comparing maps defined on diferent manifolds");
991 NEW(aData,c1-> k*c1-> k, double);
999 return(fabs(d-1)<=c1-> eCurv);
1007 Error( "Comparing maps defined on diferent manifolds");
1032 Error( "GetChartSamplingRadius is only defined for simple charts");
1072 boolean *singular, Tchart *c)
1085 Error( "A non-singular chart without Jacobian basis?");
1094 NEW(A,c-> m*c-> m, double);
1113 else *singular= TRUE;
1132 return( Norm(c-> m,t));
1140 NEW(p1,c-> m, double);
1150 return( Norm(c-> k,t));
1157 double *t, unsigned int *tp, double *pInit,
1171 unsigned int i,it,maxIterations,nr,nrJ;
1186 if (maxIterations==0)
1187 Error( "MAX_NEWTON_ITERATIONS must be larger than 0 to use Map2Manifold");
1208 NEW(p0,c-> m, double);
1220 memcpy(p,pInit, sizeof( double)*c-> m);
1223 memcpy(p,p0, sizeof( double)*c-> m);
1227 NEW(dif,c-> m, double);
1233 while((!converged)&&(it<maxIterations))
1245 error= Norm(nr,bData);
1291 if (it<maxIterations)
1327 NEW(p2,c-> m, double);
1360 unsigned int id1, Tchart *c1,
1361 unsigned int id2, Tchart *c2)
1384 Error( "ExpandibleChart is undefined for simple charts");
1397 Error( "WrongCorner is undefined for simple charts");
1416 Error( "DetermineChartNeighbour is only defined for simple charts");
1426 Error( "EnlargeChart is only defined for simple charts");
1434 Error( "BoundaryPointFromExternalCorner is undefined for simple charts");
1444 Error( "BoundaryPointsFromExternalCorners is undefined for simple charts");
1513 unsigned int i,n,in;
1514 boolean valid,inCollision;
1523 n=( unsigned int)floor(pow(10,c-> k));
1524 if (n>10000) n=10000;
1550 v*=((double)in/( double)n);
1559 Error( "FocusedPointOnBoundary is undefined for simple charts");
1588 unsigned int nvs, boolean *systemVars,
1590 double *pl, unsigned int *ns, double ***path,
1593 double *nt,*p,*pPrev;
1595 boolean projectionOk,collision,reached,close;
1596 unsigned int step,nv;
1602 NEW(pPrev,c-> m, double);
1603 NEW(nt,c-> k, double);
1614 memcpy(pPrev,c-> center,c-> m* sizeof( double));
1617 while((projectionOk)&&(!reached))
1619 memcpy(nt,t,c-> k* sizeof( double));
1639 memcpy(oPrev,o,nv* sizeof( double));
1642 memcpy(pPrev,p,c-> m* sizeof( double));
1659 double *nt,*p,*pPrev;
1661 boolean projectionOk,inCollision,reached;
1667 NEW(pPrev,c-> m, double);
1668 NEW(nt,c-> k, double);
1677 memcpy(pPrev,c-> center,c-> m* sizeof( double));
1679 while((projectionOk)&&(!inCollision)&&(!reached)&&(d< INF))
1681 memcpy(nt,t,c-> k* sizeof( double));
1693 memcpy(pPrev,p,c-> m* sizeof( double));
1713 double *p, unsigned int *tp,
1728 NEW(p1,c-> m, double);
1740 double *p, unsigned int *tp,
1748 NEW(p1,c-> m, double);
1814 unsigned int *nn, unsigned int **cID1, unsigned int **cID2, Tchart *c)
1836 unsigned int xID, unsigned int yID, unsigned int zID,
1840 Error( "PlotChart only works for 2/3d manifolds");
1867 unsigned int i,k,n1,n2;
1887 for(i=0,k=0;i<ne;i++,k+=2)
1924 if ((cx<0)&&(x[k]<cx))
1926 if ((cx>0)&&(x[k]>cx))
1928 if ((cy<0)&&(y[k]<cy))
1930 if ((cy>0)&&(y[k]>cy))
1932 if ((cz<0)&&(z[k]<cz))
1934 if ((cz>0)&&(z[k]>cz))
1947 for(k=0;k<2*ne;k+=2)
1975 b= sizeof(double)*c-> m;
1976 b+= sizeof( double)*(c-> m*c-> k);
1991 fprintf(f, "%u\n",c-> m);
1992 fprintf(f, "%u\n",c-> k);
1993 fprintf(f, "%u\n",c-> da);
1994 fprintf(f, "%u\n",c-> n);
1995 fprintf(f, "%u\n",c-> nrJ);
1997 fprintf(f, "%f\n",c-> error);
1998 fprintf(f, "%f\n",c-> eCurv);
1999 fprintf(f, "%f\n0\n",c-> r);
2000 fprintf(f, "%u\n",c-> degree);
2005 fprintf(f, "%.16f ",c-> center[i]);
2010 for(i=0;i<c-> m*c-> k;i++)
2011 fprintf(f, "%.16f ",c-> T[i]);
2019 for(i=0;i<c-> nrJ;i++)
2020 fprintf(f, "%u ",c-> BJ[i]);
2025 fprintf(f, "%u\n",c-> ml);
2028 fprintf(f, "%u\n",c-> nl);
2029 for(i=0;i<c-> nl;i++)
2030 fprintf(f, "%u ",c-> l[i]);
2035 fprintf(f, "%u\n",c-> simple);
2047 for(i=0;i<c-> k*c-> k;i++)
2048 fprintf(f, "%.16f ",c-> A[i]);
2051 for(i=0;i<c-> k*c-> da;i++)
2052 fprintf(f, "%.16f ",c-> B[i]);
2056 fprintf(f, "%.16f ",c-> c[i]);
2060 fprintf(f, "%.16f ",c-> d[i]);
2063 for(i=0;i<c-> da*c-> k;i++)
2064 fprintf(f, "%.16f ",c-> iRBt[i]);
2067 for(i=0;i<c-> k*c-> k;i++)
2068 fprintf(f, "%.16f ",c-> BiRBt[i]);
2075 unsigned int i,flag;
2081 fscanf(f, "%u",&(c-> m));
2082 fscanf(f, "%u",&(c-> k));
2083 fscanf(f, "%u",&(c-> da));
2084 fscanf(f, "%u",&(c-> n));
2085 fscanf(f, "%u",&(c-> nrJ));
2087 fscanf(f, "%lf",&(c-> error));
2088 fscanf(f, "%lf",&(c-> eCurv));
2089 fscanf(f, "%lf",&(c-> r));
2090 fscanf(f, "%lf",&rSample);
2091 fscanf(f, "%u",&(c-> degree));
2097 fscanf(f, "%lf",&(c-> center[i]));
2106 NEW(c-> T,c-> m*c-> k, double);
2107 for(i=0;i<c-> m*c-> k;i++)
2108 fscanf(f, "%lf",&(c-> T[i]));
2112 fscanf(f, "%u",&flag);
2116 for(i=0;i<c-> nrJ;i++)
2117 fscanf(f, "%u",&(c-> BJ[i]));
2123 fscanf(f, "%u",&(c-> ml));
2127 NEW(c-> l,c-> ml, unsigned int);
2128 fscanf(f, "%u",&(c-> nl));
2129 for(i=0;i<c-> nl;i++)
2130 fscanf(f, "%u",&(c-> l[i]));
2139 fscanf(f, "%u\n",&(c-> simple));
2153 fscanf(f, "%u",&(flag));
2165 NEW(c-> A,c-> k*c-> k, double);
2166 for(i=0;i<c-> k*c-> k;i++)
2167 fscanf(f, "%lf",&(c-> A[i]));
2170 for(i=0;i<c-> k*c-> da;i++)
2171 fscanf(f, "%lf",&(c-> B[i]));
2173 NEW(c-> c,c-> k, double);
2175 fscanf(f, "%lf",&(c-> c[i]));
2177 NEW(c-> d,c-> k, double);
2179 fscanf(f, "%lf",&(c-> d[i]));
2182 for(i=0;i<c-> da*c-> k;i++)
2183 fscanf(f, "%lf",&(c-> iRBt[i]));
2186 for(i=0;i<c-> k*c-> k;i++)
2187 fscanf(f, "%lf",&(c-> BiRBt[i]));
2193 fprintf(f, "\n %% Chart defines\n");
|
Follow us!