如何检查Objective-C中的两个CGV向量是否相等?

如何检查Objective-C中的两个CGV向量是否相等?,objective-c,sprite-kit,Objective C,Sprite Kit,我有两个向量: CGVector vector1 = CGVectorMake(1,2); CGVector vector2 = CGVectorMake(1,2); 如何检查vector1是否等于vector2?这不是一个容易的问题。你认为“平等”在这里是什么意思 从某种意义上说,如果它们的dx值相等,并且它们的dy值相等,则它们是相等的 但在另一种意义上,也许你想知道的是它们的dx和dy值之间的比率是否相等,因为这毕竟应该是一个向量——也就是说,也许CGVectorMake(1,2)和CG

我有两个向量:

CGVector vector1 = CGVectorMake(1,2);
CGVector vector2 = CGVectorMake(1,2);

如何检查vector1是否等于vector2?

这不是一个容易的问题。你认为“平等”在这里是什么意思

从某种意义上说,如果它们的
dx
值相等,并且它们的
dy
值相等,则它们是相等的


但在另一种意义上,也许你想知道的是它们的
dx
dy
值之间的比率是否相等,因为这毕竟应该是一个向量——也就是说,也许CGVectorMake(1,2)和CGVectorMake(2,4)在非常真实的意义上是相同的向量,因为它们指向相同的方向

换句话说,在某些情况下,大小和方向必须相等,但在其他情况下,方向必须相等。你需要对此做出决定

这里有一些有用的CGVector实用程序:

但是在比较浮动时要小心,因为由于舍入误差,比较可能是错误的,因此您可能需要检查每个组件的差异是否非常接近于零

if( (abs(vector1.dx - vector2.dx) < verysmallnumber) && (abs(vector1.dy - vector2.dy) < verysmallnumber) )
if((abs(vector1.dx-vector2.dx)

其中abs是一个绝对值函数

“因为这毕竟应该是一个向量”–是的,向量是向量,但这怎么意味着只有它们的方向才重要呢?@paramagnetic croissant它一点也不意味着它;一切都取决于他打算使用的向量。这就是为什么这不是一个容易的问题。我是说他需要决定“相等”是什么意思。我要说向量是由方向和方向组成的magnitude@coryknapp然后OP应该在我引用的链接上看到
ccvFuzzyEqual
实用程序函数。
if( (abs(vector1.dx - vector2.dx) < verysmallnumber) && (abs(vector1.dy - vector2.dy) < verysmallnumber) )