public static vec3i Max(vec3i a, vec3i b) { return(new vec3i(Math.Max(a.x, b.x), Math.Max(a.y, b.y), Math.Min(a.z, b.z))); }
public bool Equals(vec3i obj) { return(obj == this); }
public static vec2i yz(this vec3i v) { return(new vec2i(v.y, v.z)); }
public static vec2i zx(this vec3i v) { return(new vec2i(v.z, v.x)); }
public static vec3i Z(this vec3i v, int z) { return(new vec3i(v.x, v.y, z)); }
public static vec2i xy(this vec3i v) { return(new vec2i(v.x, v.y)); }
public static vec3i Y(this vec3i v, int y) { return(new vec3i(v.x, y, v.z)); }
public static vec3i X(this vec3i v, int x) { return(new vec3i(x, v.y, v.z)); }
public T this[vec3i p] { get { return(cells_[p.x, p.y, p.z]); } set { cells_[p.x, p.y, p.z] = value; } }
public grid3(vec3i size) { size_ = size; cells_ = new T[size_.x, size_.y, size_.z]; }
public static IEnumerable <vec3i> Line(this vec3i a, vec3i b) { vec3i d = (b - a); if (d.isZero) { yield break; } if (d.x == 0) { foreach (var p in a.yz().Line(b.yz())) { yield return(p.zxy(a.x)); } yield break; } if (d.y == 0) { foreach (var p in a.zx().Line(b.zx())) { yield return(p.yzx(a.y)); } yield break; } if (d.z == 0) { foreach (var p in a.xy().Line(b.xy())) { yield return(p.xyz(a.z)); } yield break; } if (d.x.meq(d.y) && d.x.meq(d.z)) { int sx = d.x.Sign(); int sy = d.y.Sign(); int sz = d.z.Sign(); for (int xi = a.x, yi = a.y, zi = a.z; xi != b.x; xi += sx, yi += sy, zi += sz) { yield return(new vec3i(xi, yi, zi)); } yield break; } /* * var ot = octTransforms[d.oct]; * int D = 2 * d.y - d.x; * int y = a.y; * b = ot(b); * * yield return a; * for (int x = a.x + 1; x < b.x; x++) { * if (D > 0) { * y++; * D += 2 * d.y - 2 * d.x; * } * else * D += 2 * d.y; * yield return ot(new vec2i(x, y)); * } */ yield break; }