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) )); }
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; }
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; }
public static vec3i zxy(this vec2i v, int z) { return(new vec3i(z, v.x, v.y)); }
public static vec3i xyz(this vec2i v, int z) { return(new vec3i(v.x, v.y, z)); }
public static int Clamp(this vec2i v, int f) { return(MathExOps.Clamp(f, v.x, v.y)); }
public static vec2i Y(this vec2i v, int y) { return(new vec2i(v.x, y)); }
public static vec2i X(this vec2i v, int x) { return(new vec2i(x, v.y)); }
public static vec2i Clamp(this vec2i v, vec2i min, vec2i max) { return(MathExOps.Clamp(v, min, max)); }
public static Vector2 Div(this Vector2 l, vec2i r) { return(new Vector2(l.x / r.x, l.y / r.y)); }
public static Vector2 Mul(this Vector2 l, vec2i r) { return(new Vector2(l.x * r.x, l.y * r.y)); }
public static vec2i Max(vec2i a, vec2i b) { return(new vec2i(Math.Max(a.x, b.x), Math.Max(a.y, b.y))); }
public bool Equals(vec2i obj) { return(obj == this); }
public static vec3i yzx(this vec2i v, int z) { return(new vec3i(v.y, z, v.x)); }
public Grid(vec2i size) { size_ = size; cells_ = new Dictionary <vec2, List <T> >(size.product); }
public static float Clamp(this vec2i v, float f) { return(MathExOps.Clamp(f, v.x, v.y)); }
public static vec2 Div(this vec2 l, vec2i r) { return(new vec2(l.x / r.x, l.y / r.y)); }
public static vec2 Mul(this vec2 l, vec2i r) { return(new vec2(l.x * r.x, l.y * r.y)); }
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; }