首先,感谢您抽出宝贵时间。我正在尝试了解下面显示的特定代码试图做什么,以便将它们转换为 python。第一行是将内存分配给指针(aPointContour),我知道python没有。第二行是获取iContourLenght中的随机数。第三行将值 (2*aPointContour[iRandomPoint1].x + aPointContour[iRandomPoint1].y) 分配给第 0 行和第 0 列的矩阵 (pMatA)。
我的问题:
1)"aPointContour[iRandomPoint1].x"试图做什么?
2) .x .y 的目的是什么?
我的想法:
1) 访问位于指针"aPointContour"中"iRandomPoint1"的内存。需要放入矩阵"pMatA"的值是"2*iRandomPoint1",根据下面的代码访问内存不应该给我们"iRandomPoint1"值吗?
2).x和.y是Cvpoint的一部分还是通常用作指针"aPointContour"的成员?如果是成员,是仅供参考还是实际的数学意义?
我很抱歉这个长帖子,真的希望有人能帮助我。谢谢你,先生或女士提前!:)
// C++
CvPoint *aPointContour = (CvPoint *) malloc(sizeof(CvPoint) * iContourLength);
iRandomPoint1 = (int)((double)rand() / ((double)RAND_MAX + 1) * iContourLength);
cvmSet(pMatA, 0, 0,2* aPointContour[iRandomPoint1].x + aPointContour[iRandomPoint1].y)
-
aPointContour
是指向CvPoint
对象数组的指针。aPointContour[iRandomPoint1].x
使用iRandomPoint1
作为数组的索引,然后访问该对象中的x
成员变量。 -
.x
和.y
访问对象的成员变量。这类似于在 Python 中访问对象属性。这些是CvPoint
类的成员。在代码中的某处(可能在头文件中)查找class CvPoint
或struct CvPoint
的声明,它将声明所有成员变量和函数。
此代码唯一真正的问题是它使用了数组元素的未初始化值。malloc()
分配内存,但它不会用任何可预测的东西填充它。因此,除非你省略了填充数组的代码,否则当它访问aPointContour[iRandomPoint1].x
并aPointContour[iRandomPoint1].y
时,会发生未定义的行为。
1) "aPointContour[iRandomPoint1].x"试图做什么?
让我们从iRandomPoint1开始。 它是介于 0 和 iContourLength 之间的整数,数组 aPointContour 的大小。 因此,aPointContour[iRandomPoint1] 是由第一行初始化的随机 CvPoint。 aPointContour[iRandomPoint1].x 正在访问 CvPoint 的 x 值。
在您的示例上下文中,老实说,它没有多大意义,因为它尚未初始化。 内存已创建,但值都将是内存的内容,直到分配空间的点(出于所有意图和目的,都是荒谬的)。
2) .x .y 的目的是什么?
".x"表示返回由类型 CvPoint 表示的 x 的值。 同样,在此代码的上下文中,它将是未分配的,因此是无意义的。 将 aPointContour[iRandomPoint1].x 与 aPointContour[iRandomPoint1].y 添加同样荒谬。 如果传入指针,人们可能会争辩说它正在传递给要分配的方法,但事实并非如此。
如果不首先将这些值分配给某些东西,就没有多大意义。 这就像将黑匣子里的东西倒进面糊里做蛋糕一样。 谁知道这样的东西会变成什么样的蛋糕?