示例#1
0
 public static vec2i Clamp(vec2i value, vec2i min, vec2i max)
 {
     return(new vec2i(
                Clamp(value.x, min.x, max.x),
                Clamp(value.y, min.y, max.y)
                ));
 }
示例#2
0
        public static IEnumerable <aabb2> Cell(vec2i s)
        {
            vec2 sp = -((vec2)s).Div(2.0f);

            for (int y = 0; y < s.y; y++)
            {
                for (int x = 0; x < s.x; x++)
                {
                    yield return(new aabb2(sp + new vec2(x, y), sp + new vec2(x + 1, y + 1)));
                }
            }

            yield break;
        }
示例#3
0
        public static IEnumerable <aabb2> Cell(vec2i s, vec2 d)
        {
            vec2 sp = -d.Mul(s).Div(2.0f).Sub(d.Div(2));
            vec2 p  = sp;

            for (int y = 0; y < s.y; y++, p = p.Add(0, d.y).X(sp.x))
            {
                for (int x = 0; x < s.x; x++, p = p.Add(d.x, 0))
                {
                    yield return(new aabb2(p - d / 2, p + d / 2));
                }
            }

            yield break;
        }
示例#4
0
 public static vec3i zxy(this vec2i v, int z)
 {
     return(new vec3i(z, v.x, v.y));
 }
示例#5
0
 public static vec3i xyz(this vec2i v, int z)
 {
     return(new vec3i(v.x, v.y, z));
 }
示例#6
0
 public static int Clamp(this vec2i v, int f)
 {
     return(MathExOps.Clamp(f, v.x, v.y));
 }
示例#7
0
 public static vec2i Y(this vec2i v, int y)
 {
     return(new vec2i(v.x, y));
 }
示例#8
0
 public static vec2i X(this vec2i v, int x)
 {
     return(new vec2i(x, v.y));
 }
示例#9
0
 public static vec2i Clamp(this vec2i v, vec2i min, vec2i max)
 {
     return(MathExOps.Clamp(v, min, max));
 }
示例#10
0
 public static Vector2 Div(this Vector2 l, vec2i r)
 {
     return(new Vector2(l.x / r.x, l.y / r.y));
 }
示例#11
0
 public static Vector2 Mul(this Vector2 l, vec2i r)
 {
     return(new Vector2(l.x * r.x, l.y * r.y));
 }
示例#12
0
 public static vec2i Max(vec2i a, vec2i b)
 {
     return(new vec2i(Math.Max(a.x, b.x), Math.Max(a.y, b.y)));
 }
示例#13
0
 public bool Equals(vec2i obj)
 {
     return(obj == this);
 }
示例#14
0
 public static vec3i yzx(this vec2i v, int z)
 {
     return(new vec3i(v.y, z, v.x));
 }
示例#15
0
 public Grid(vec2i size)
 {
     size_  = size;
     cells_ = new Dictionary <vec2, List <T> >(size.product);
 }
示例#16
0
 public static float Clamp(this vec2i v, float f)
 {
     return(MathExOps.Clamp(f, v.x, v.y));
 }
示例#17
0
 public static vec2 Div(this vec2 l, vec2i r)
 {
     return(new vec2(l.x / r.x, l.y / r.y));
 }
示例#18
0
 public static vec2 Mul(this vec2 l, vec2i r)
 {
     return(new vec2(l.x * r.x, l.y * r.y));
 }
示例#19
0
        public static IEnumerable <vec2i> Line(this vec2i a, vec2i b)
        {
            vec2i d = (b - a);

            if (d.isZero)
            {
                yield break;
            }
            if (d.x == 0)
            {
                int s = d.y.Sign();
                for (int i = a.y; i != b.y; i += s)
                {
                    yield return(new vec2i(a.x, i));
                }
                yield break;
            }
            if (d.y == 0)
            {
                int s = d.x.Sign();
                for (int i = a.x; i != b.x; i += s)
                {
                    yield return(new vec2i(i, a.y));
                }
                yield break;
            }
            if (d.x.meq(d.y))
            {
                int sx = d.x.Sign();
                int sy = d.y.Sign();
                for (int xi = a.x, yi = a.y; xi != b.x; xi += sx, yi += sy)
                {
                    yield return(new vec2i(xi, yi));
                }
                yield break;
            }

            var ot = octTransforms[d.oct];

            b = ot(b);
            d = ot(d);

            int D = 2 * d.y - d.x;
            int y = a.y;

            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;
        }