0

我想创建一个类似于 CGPoint 的结构,但使用 3 个坐标而不是 2 个坐标。

我通过以下方式创建它:

typedef struct {CGFloat x;CGFloat y;CGFloat z;} CG3Vector;

CG_INLINE CG3Vector CG3VectorMake(CGFloat x, CGFloat y, CGFloat z)
{
  CG3Vector p; p.x = x; p.y = y; p.z = z; return p;
}

它工作正常。但我现在想改进这个结构,使其具有像 CGPoint 这样的常量:CGPointZero

还有什么方法可以为结构的特定组件引入限制,就像 CGSize 一样,其中组件永远不会低于 0?

谢谢。

4

1 回答 1

2

您可以像这样创建常量:

const CG3Vector CG3VectorZero = { 0, 0, 0 };

如果你想要限制,我想你可以做一些这样的检查:

CG_INLINE CG3Vector CG3VectorMake(CGFloat x, CGFloat y, CGFloat z)
{
    // normalize the values
    x = fmod(x, 360);
    y = fmod(y, 360);
    z = fmod(z, 360);

    x = (x < 0) ? 360 + x : x;
    y = (y < 0) ? 360 + y : y;
    z = (z < 0) ? 360 + z : z;

    return (CG3Vector) { x, y, z };
}
于 2012-04-04T16:17:17.000 回答