Example #1
0
 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)));
 }
Example #2
0
 public bool Equals(vec3i obj)
 {
     return(obj == this);
 }
Example #3
0
 public static vec2i yz(this vec3i v)
 {
     return(new vec2i(v.y, v.z));
 }
Example #4
0
 public static vec2i zx(this vec3i v)
 {
     return(new vec2i(v.z, v.x));
 }
Example #5
0
 public static vec3i Z(this vec3i v, int z)
 {
     return(new vec3i(v.x, v.y, z));
 }
Example #6
0
 public static vec2i xy(this vec3i v)
 {
     return(new vec2i(v.x, v.y));
 }
Example #7
0
 public static vec3i Y(this vec3i v, int y)
 {
     return(new vec3i(v.x, y, v.z));
 }
Example #8
0
 public static vec3i X(this vec3i v, int x)
 {
     return(new vec3i(x, v.y, v.z));
 }
Example #9
0
 public T this[vec3i p] {
     get { return(cells_[p.x, p.y, p.z]); }
     set { cells_[p.x, p.y, p.z] = value; }
 }
Example #10
0
 public grid3(vec3i size)
 {
     size_  = size;
     cells_ = new T[size_.x, size_.y, size_.z];
 }
Example #11
0
        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;
        }