📄 cogenpixmap.cxx
字号:
#include "cogenpixmap.hxx"
void CogenPixmap::endInitialization()
{
wzFloat xh;
if(pixmap.ly()*(xp-xm) > pixmap.lx()*(yp-ym)){
dy = (yp-ym) / pixmap.ly();
dx = dy;
xh = (xm+xp)/2;
xm = xh - pixmap.lx()*dx/2;
xp = xm + pixmap.lx()*dx;
}else{
dx = (xp-xm) / pixmap.lx();
dy = -dx;
xh = (ym+yp)/2;
yp = xh + pixmap.ly()*dy/2;
ym = yp - pixmap.ly()*dy;
}
setBorder(xm,xp, yp,ym);
CogenOctree::endInitialization();
}
cogIndex CogenPixmap::Point( cogPoint& p0) const
{
// computation of the segment number for the point (x[0],x[1]):
cogFloat rx,ry;
int ix = (int)((rx = (p0.x() - xm) / (dx)));
int iy = (int)((ry = (p0.y() - ym) / (dy)));
int lx = pixmap.lx();
int ly = pixmap.ly();
int u00,u01,u10,jx,jy;
rx -= ix; ry -= iy;
if(ix<0) {ix = 0; rx = 0;} else if(ix>=lx) {ix = lx - 1; rx = 1;}
if(iy<0) {iy = 0; ry = 0;} else if(iy>=ly) {iy = ly - 1; ry = 1;}
u00 = pixmap(ix,iy);
if(cutPixelCorner){
if(rx > 0.5) {jx = ix+1; rx -= 0.5;} else {jx = ix-1; rx = 0.5-rx;}
if(ry > 0.5) {jy = iy+1; ry -= 0.5;} else {jy = iy-1; ry = 0.5-ry;}
if(jx<0) jx = 0; else if(jx>=lx) jx = lx - 1;
if(jy<0) jy = 0; else if(jy>=ly) jy = ly - 1;
u01 = pixmap(ix,jy);
u10 = pixmap(jx,iy);
if(u10 == u01) if(rx+ry > 0.5) u00 = u10;
}
p0.segment() = wzRegion(u00);
return cogRCRegionFound;
}
CogenPixmap::CogenPixmap(cogName f, int maxcolors)
:pixmap((wzString)f,maxcolors)
,cutPixelCorner(0)
{
xm = -1.0; xp = 1.0;
ym = -1.0; yp = 1.0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -