这也是我今后在设计程序结构的时候需要考虑的.如何设计数据存储的结构使得可以迅速找到不同数据之间的关系,这里像素坐标和其灰度值使用了coorInfo_s结构存储,但是还可以和变化值联系在一起,类似的考虑不周到还有许多.
这里还有一个问题是变量的注释,应该明确指出该变量的含义,而不是...哈!但是现在这个问题我后来看过他人几个项目后就意识到了...
这里用到了一个Bresenham画直线算法,记一下吧.
(计算从_pointA 到 _pointB之间的像素点.将其像素坐标和像素值push_back进_coorInfoVec中)
1 void CCFindInterCircle::calInfoOfTwoPoints(Point2i & _pointA,Point2i & _pointB,vector<coorInfo_s>& _coorInfoVec){ dx = _pointB.x - _pointA.x; 4 int dy = _pointB.y - _pointA.y; uy = ((dy > x = _pointA.x, y = _pointA.y; eps;eps = 0;dx = abs(dx); dy = abs(dy); 12 13 coorInfo_s coorInfo; (dx > dy) 16 { 17 for (x = _pointA.x; x != _pointB.x+ux; x += ux) 18 { 19 coorInfo.setValue(x,y,this->processImage.at<uchar>(y,x)); 20 _coorInfoVec.push_back(coorInfo); 21 eps += dy; 22 if ((eps << 1) >= dx) 23 { 24 y += uy; eps -= dx; 25 } 26 } 27 } { 30 for (y = _pointA.y; y != _pointB.y+uy; y += uy) 31 { 32 coorInfo.setValue(x,y,this->processImage.at<uchar>(y,x)); 33 _coorInfoVec.push_back(coorInfo); 34 eps += dx; 35 if ((eps << 1) >= dy) 36 { 37 x += ux; eps -= dy; 38 } 39 } 40 } 41 }
总结:
至此,这个被我称为"FindInterCircle"的小模块我就回顾完了,今年还有新项目 加油吧!!!!
失败会累积,而成功会消失.