我想创建一个类似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?
感谢。
答案 0 :(得分: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 };
}