📄 cogsimple.cxx
字号:
#include "cogsimple.hxx"#include "coglib.hxx"CogeometryPlane::CogeometryPlane( cogFloat x, cogFloat y, cogFloat z, cogFloat ax, cogFloat ay, cogFloat az, cogRegion rp, cogRegion rm):CogeometryWithRegions(*(wzPointToSegment*)this){ rminus = rm; rplus = rp; setDirection(ax,ay,az); setPoint(x,y,z);}CogeometryPlane::CogeometryPlane(cogRegion rp, cogRegion rm):CogeometryWithRegions(*(wzPointToSegment*)this){ rminus = rm; rplus = rp; setDirection(1,0,0); setPoint(0,0,0);}cogSegment CogeometryPlane::operator()(const cogPoint& p) const{ if((a[0]*p[0]+a[1]*p[1]+a[2]*p[2]-d)>0) return rplus; return rminus;}void CogeometryPlane::setDirection(cogFloat x, cogFloat y, cogFloat z){ a[0] = x; a[1] = y; a[2] = z; d = 0;}void CogeometryPlane::setPoint(cogFloat x, cogFloat y, cogFloat z){ d = (a[0]*x+a[1]*y+a[2]*z); }CogeometryEllipsoid::CogeometryEllipsoid( cogFloat x, cogFloat y, cogFloat z, cogFloat rx, cogFloat ry, cogFloat rz, cogRegion rinside, cogRegion routside):CogeometryWithRegions(*(wzPointToSegment*)this){ rin = rinside; rout = routside; setRadius(rx,ry,rz); setCenter(x,y,z);}CogeometryEllipsoid::CogeometryEllipsoid( cogRegion rinside, cogRegion routside):CogeometryWithRegions(*(wzPointToSegment*)this){ rin = rinside; rout = routside; setRadius(); setCenter();}cogSegment CogeometryEllipsoid::operator()(const cogPoint& p) const{cogFloat dd=0, rr; cogIndex d; for(d=0;d<3;d++){ // directions rr = (p[d]-c[d]); rr /= r[d]; dd += rr*rr; } if(dd>1) return rout; return rin;}void CogeometryEllipsoid::stretchRadius(cogFloat f){ r[0] *= f; r[1] *= f; r[2] *= f; }void CogeometryEllipsoid::stretchRadius(cogFloat fx, cogFloat fy, cogFloat fz){ r[0] *= fx; r[1] *= fy; r[2] *= fz; }void CogeometryEllipsoid::setSphere(cogFloat f){ r[0] = f; r[1] = f; r[2] = f; }void CogeometryEllipsoid::setRadius(cogFloat fx, cogFloat fy, cogFloat fz){ r[0] = fx; r[1] = fy; r[2] = fz; }void CogeometryEllipsoid::moveCenter(cogFloat x, cogFloat y, cogFloat z){ c[0] += x; c[1] += y; c[2] += z; }void CogeometryEllipsoid::setCenter(cogFloat x, cogFloat y, cogFloat z){ c[0] = x; c[1] = y; c[2] = z; }CogeometryTorus::CogeometryTorus( cogFloat x, cogFloat y, cogFloat z, cogFloat rbig, cogFloat rsmall, cogRegion rinside, cogRegion routside):CogeometryWithRegions(*(wzPointToSegment*)this){ rin = rinside; rout = routside; setScale(rbig,rsmall); setCenter(x,y,z);}CogeometryTorus::CogeometryTorus( cogRegion rinside, cogRegion routside):CogeometryWithRegions(*(wzPointToSegment*)this){ rin = rinside; rout = routside; setScale(3,1); setCenter();}cogSegment CogeometryTorus::operator()(const cogPoint& x) const{cogFloat xx=x[0]-c[0],yy=x[1]-c[1],zz=x[2]-c[2]; cogFloat r2=xx*xx+yy*yy, z2=zz*zz/rz2; cogFloat p =r2+z2+rp, pp=p*p-rs*r2; if(pp>0) return rout; return rin;}void CogeometryTorus::setScale(cogFloat rbig, cogFloat rsmall){ rz2 = 1; //(rbig-rsmall)*(rbig-rsmall); rp = rbig*rsmall; rs = (rbig+rsmall)*(rbig+rsmall);}void CogeometryTorus::moveCenter(cogFloat x, cogFloat y, cogFloat z){ c[0] += x; c[1] += y; c[2] += z; }void CogeometryTorus::setCenter(cogFloat x, cogFloat y, cogFloat z){ c[0] = x; c[1] = y; c[2] = z; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -