代码背后的逻辑
Posted
技术标签:
【中文标题】代码背后的逻辑【英文标题】:logic behind the code 【发布时间】:2010-07-08 15:16:50 【问题描述】:谁能解释一下这段?
pt1.x = cvRound(x0 + 1000*(-b));
pt1.y = cvRound(y0 + 1000*(a));
pt2.x = cvRound(x0 - 1000*(-b));
pt2.y = cvRound(y0 - 1000*(a));
【问题讨论】:
如果您将代码格式化为代码,我们将能够更好地为您提供帮助。弄清楚问答页面文本框上方的小图标是做什么用的,它们将丰富您的 SO 生活。 【参考方案1】:您有一个由x0, y0
定义的点。您现在正在创建另外两个点对象,一个在(-b*1000, a*1000)
,一个在(b*1000, -a*1000)
,相对于原始点。大概1000
是为了解决比例问题,因为a
和b
的值与x0, y0
的比例不同。
【讨论】:
嗨,谢谢,它来自 hough lines opencv 代码,你能解释清楚吗 他们将其更改为笛卡尔坐标,然后 y 他们添加了 a*1000,类似的东西,lines for( i = 0; i total,100); i++ ) float* line = (float*)cvGetSeqElem(lines,i);浮动rho =线[0];浮动θ=线[1]; CvPoint pt1, pt2;双 a = cos(theta), b = sin(theta);双 x0 = arho, y0 = brho; pt1.x = cvRound(x0 + 1000*(-b)); pt1.y = cvRound(y0 + 1000*(a)); pt2.x = cvRound(x0 - 1000*(-b)); pt2.y = cvRound(y0 - 1000*(a)); 你能帮我在loginc后面添加a * 1000,更改为笛卡尔后 @paddu,仅基于此代码示例,无法知道为什么它们要乘以 1000。我需要更多的背景信息,这实际上是你可能必须自己弄清楚的事情。 1000 或其他数值,没关系,但在将极坐标转换为笛卡尔坐标后,应该有一些 x0 = rho * cos(theta),但我的问题是为什么它们将 1000*a 乘以rho * cos(theta)。【参考方案2】:看起来a
和b
是用于在一个方向(向内或向外)移动pt1
和在相反方向移动pt2
的阈值。
也许它们被用来增加/减少矩形的面积以进行边界检查?
【讨论】:
他们将其更改为笛卡尔坐标,然后 y 他们添加了 a*1000,类似的东西,lines for( i = 0; i total,100); i++ ) float* line = (float*)cvGetSeqElem(lines,i);浮动rho =线[0];浮动θ=线[1]; CvPoint pt1, pt2;双 a = cos(theta), b = sin(theta);双 x0 = arho, y0 = brho; pt1.x = cvRound(x0 + 1000*(-b)); pt1.y = cvRound(y0 + 1000*(a)); pt2.x = cvRound(x0 - 1000*(-b)); pt2.y = cvRound(y0 - 1000*(a));以上是关于代码背后的逻辑的主要内容,如果未能解决你的问题,请参考以下文章