代码背后的逻辑

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 是为了解决比例问题,因为ab 的值与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】:

看起来ab 是用于在一个方向(向内或向外)移动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));

以上是关于代码背后的逻辑的主要内容,如果未能解决你的问题,请参考以下文章

包含“for”循环的这行代码背后的逻辑解释是什么?

有人可以解释一下这个示例 C# 代码背后的逻辑吗?多年来我没有得到答案 10 [重复]

我不明白这个素数检查器(Java)背后的逻辑

代码背后和单独的 C# 类之间的区别

这个加速度计传感器监听器背后使用了啥逻辑

如何避免两个并发的 API 请求破坏文档验证背后的逻辑?