目标 C:比较 CGPoints

Posted

技术标签:

【中文标题】目标 C:比较 CGPoints【英文标题】:Objective C: Comparing CGPoints 【发布时间】:2012-01-12 05:55:18 【问题描述】:

我正在尝试为我的 CGPoints 做一个 if-else 语句 我怎么能做到这一点,我试过这段代码......

if (point1 != point2)

       //statement

我遇到了这个错误

Invalid operand for binary expression...

谢谢!

【问题讨论】:

point1 和 point2 是用户定义类型(结构)的操作数,!= 是运算符。这里编译器对操作数类型感到困惑,因为编译器只能接受指针类型和 int float char 等作为操作数。 【参考方案1】:

尝试改用函数CGPointEqualToPoint

if (!CGPointEqualToPoint(p1,p2))

  //statement

【讨论】:

这也适用于在特定区域放置物品吗?因为我也会在那个例子中使用它。:) @Ramiro - 阅读我在答案中包含的 CGGeometry 参考链接。它应该很多这类问题。【参考方案2】:

你可以这样做:

if (!CGPointEqualToPoint(point1, point2)) 
....

浮点数(以及因此 CGFloats)有点棘手,因为有时您希望它们被视为相等,但它们的差距很小。如果你想要一个“模糊”的比较,你可以这样做:

if (fabsf(point1.x - point2.x) > 0.0001f || fabsf(point1.y - point2.y) > 0.0001f) 
...

这会检查 point1 和 point2 的 x 和 y 分量是否相差大于 0.0001(一个完全任意的数字,可以是任何你想要的,取决于你想要的精度)。

【讨论】:

【参考方案3】:

我建议使用以下功能:(来自 Apple Docs)

CGPointEqualToPoint返回两点是否相等。

bool CGPointEqualToPoint (CGPoint point1, CGPoint point2);

参数

point1 :要检查的第一个点。

point2 :要检查的第二个点。

如果两个指定的点是 相同的;否则为假。

更多信息请阅读:CGGeometry Reference

【讨论】:

【参考方案4】:

参见CGPointEqualToPoint:返回两点是否相等。

bool CGPointEqualToPoint (
   CGPoint point1,
   CGPoint point2
);

http://developer.apple.com/library/mac/#DOCUMENTATION/GraphicsImaging/Reference/CGGeometry/Reference/reference.html

参数

point1:要检查的第一个点。 point2:要检查的第二个点。

返回值

如果两个指定的点相同,则为真;否则为假。

【讨论】:

以上是关于目标 C:比较 CGPoints的主要内容,如果未能解决你的问题,请参考以下文章

if 语句比较在目标 c 中不起作用的整数

c的静态库和动态库

问答题

“k 均值”和“模糊 c 均值”目标函数有啥区别?

C风格字符串

self-introduction