2010-07-08 107 views
0

可以任何一个解释我的逻辑背后的代码??逻辑后面的代码

pt1.x = cvRound(x0 + 1000*(-b)); 
    pt1.y = cvRound(y0 + 1000*(a)); 
    pt2.x = cvRound(x0 - 1000*(-b)); 
    pt2.y = cvRound(y0 - 1000*(a)); 
+3

如果您将代码格式化为代码,我们将能够更好地为您提供帮助。找出问题和答案页上文本框上方的小图标是什么,它们将丰富你的生活。 – 2010-07-08 15:19:14

回答

1

它看起来像ab是被用来在一个方向(向内或向外),并在相反的方向移动pt2pt1阈值。

也许他们正在用来增加/减少边界检查的矩形区域?

+0

他们将它改为笛卡尔,然后他们添加了* 1000,类似的东西,行 (i = 0; i < MIN(lines-> total,100); i ++) float * line =(float *)cvGetSeqElem(lines,i); float rho = line [0]; float theta = line [1]; CvPoint pt1,pt2; double a = cos(theta),b = sin(theta); double x0 = a * rho,y0 = b * rho; pt1.x = cvRound(x0 + 1000 *( - b)); pt1.y = cvRound(y0 + 1000 *(a)); pt2.x = cvRound(x0-1000 *( - b)); pt2.y = cvRound(y0 - 1000 *(a)); } – paddu 2010-07-08 15:44:56

2

您有一个由x0, y0定义的点。您现在正在创建另外两个点对象,一个位于(-b*1000, a*1000),另一个位于相对于原始点的(b*1000, -a*1000)。据推测,1000是为了解决规模问题,因为值ab与点x0, y0的点不同。

+0

嗨,谢谢,它来自hough行opencv代码,你能解释清楚吗 – paddu 2010-07-08 15:40:15

+0

他们改变它为笛卡尔,然后他们增加了一个* 1000,像这样的东西,行数(i = 0; i < MIN(lines-> total,100 ); i ++){float * line =(float *)cvGetSeqElem(lines,i); float rho = line [0]; float theta = line [1]; CvPoint pt1,pt2;双a = cos(theta),b = sin(theta); double x0 = a * rho,y0 = b * rho; pt1.x = cvRound(x0 + 1000 *( - b)); pt1.y = cvRound(y0 + 1000 *(a)); pt2.x = cvRound(x0 - 1000 *( - b)); pt2.y = cvRound(y0 - 1000 *(a)); } – paddu 2010-07-08 15:45:32

+0

请帮我理清代码背后的逻辑 – paddu 2010-07-08 15:46:42