#include "polygon.hpp" //--------------- // Polygon::init //--------------- void Polygon::init(){ for(size_t i=0;ilength) cout<<" "; else cout<<"\033[42m\033[30m"<<" "<<"\033[0m"; } cout< infos; size_t id=0; int64 x=xinit; int64 y=yinit; size_t c=pos(x,y); for(size_t t=1;t<=length;++t){ size_t l=left(c); size_t r=right(c); size_t u=up(c); size_t d=down(c); auto it=infos.find(c); if(it==infos.end()){ infos[c]=InfoVertex(id++,x,y,l,r,u,d); } else{ InfoVertex& info=it->second; info.v[0]=l; info.v[1]=r; info.v[2]=u; info.v[3]=d; info.deg=4; } it=infos.find(l); if(it==infos.end()) infos[l]=InfoVertex(id++,x-1,y); it=infos.find(r); if(it==infos.end()) infos[r]=InfoVertex(id++,x+1,y); it=infos.find(u); if(it==infos.end()) infos[u]=InfoVertex(id++,x,y+1); it=infos.find(d); if(it==infos.end()) infos[d]=InfoVertex(id++,x,y-1); size_t s=step_histo[t+1]; if(grid[l]==t+1 and s==grid_histo[l]){ c=l; --x; } else if(grid[r]==t+1 and s==grid_histo[r]){ c=r; ++x; } else if(grid[u]==t+1 and s==grid_histo[u]){ c=u; ++y; } else if(grid[d]==t+1 and s==grid_histo[d]){ c=d; --y; } } size_t ne=infos.size(); AvxMatrix AvxB; AvxMatrix AvxC; AvxB.clear(); AvxC.clear(); for(auto it=infos.begin();it!=infos.end();++it){ InfoVertex& info=it->second; size_t i=info.id; for(size_t k=0;ksecond; size_t j=info2.id; int64 dx=abs(info.x-info2.x); int64 dy=abs(info.y-info2.y); AvxC.get(i,j)=get_coeff(dx,dy); } } AvxMatrix AvxM; AvxM.clear(); AvxM.from_C_B(AvxC,AvxB,ne); Reel det=AvxM.Gauss(ne,ne+1); Reel res=0; for(size_t i=0;i