public Obb2i(vector center, vector extents, vector ax, vector ay) { Center = center; Extents = extents; Ax = ax; Ay = ay; }
public Obb2i(aabb aabb) { Center = aabb.Center; Extents = aabb.Extents; Ax = vector.AxisX; Ay = vector.AxisY; }
public Obb2i(Obb2d v) { Center = new vector(v.Center); Extents = new vector(v.Extents); Ax = new vector(v.Ax); Ay = new vector(v.Ay); }
public void ElementWiseMaxSelf(vector v) { if (v.X > X) { X = v.X; } if (v.Y > Y) { Y = v.Y; } }
public void ElementWiseMinSelf(vector v) { if (v.X < X) { X = v.X; } if (v.Y < Y) { Y = v.Y; } }
public bool Intersects(volume obb2) { volume obb1; if (this.IsAabb) { obb1 = obb2; obb2 = this; } else { obb1 = this; } var d = new vector(); var v = obb1.Center - obb2.Center; var eax = obb2.Ax * obb2.Extents.X; var eay = obb2.Ay * obb2.Extents.Y; var e1 = eax + eay; var e2 = eay - eax; d.X = Math.Abs(obb1.Ax.Dot(e1)); d.Y = Math.Abs(obb1.Ax.Dot(e2)); if (obb1.Extents.X + d.Max() < Math.Abs(obb1.Ax.Dot(v))) { return(false); } d.X = Math.Abs(obb1.Ay.Dot(e1)); d.Y = Math.Abs(obb1.Ay.Dot(e2)); if (obb1.Extents.Y + d.Max() < Math.Abs(obb1.Ay.Dot(v))) { return(false); } eax = obb1.Ax * obb1.Extents.X; eay = obb1.Ay * obb1.Extents.Y; e1 = eax + eay; e2 = eay - eax; d.X = Math.Abs(obb2.Ax.Dot(e1)); d.Y = Math.Abs(obb2.Ax.Dot(e2)); if (obb2.Extents.X + d.Max() < Math.Abs(obb2.Ax.Dot(v))) { return(false); } d.X = Math.Abs(obb2.Ay.Dot(e1)); d.Y = Math.Abs(obb2.Ay.Dot(e2)); if (obb2.Extents.Y + d.Max() < Math.Abs(obb2.Ay.Dot(v))) { return(false); } return(true); }
static public vector ElementWiseMax(vector v1, vector v2) { if (v2.X < v1.X) { v2.X = v1.X; } if (v2.Y < v1.Y) { v2.Y = v1.Y; } return(v2); }
public Range2i(vector min, vector max, bool normalize) { if (normalize) { vector.ElementWiseMinMax(min, max, out Min, out Max); } else { Min = min; Max = max; } }
public Range2i(IEnumerable <vector> positions) { vector min = vector.MaxValue, max = vector.MinValue; foreach (var p in positions) { min.ElementWiseMinSelf(p); max.ElementWiseMaxSelf(p); } Min = min; Max = max; }
public Range2i(IEnumerable <volume> volumes) { vector min = vector.MaxValue, max = vector.MinValue; foreach (var v in volumes) { min.ElementWiseMinSelf(v.Min); max.ElementWiseMaxSelf(v.Max); } Min = min; Max = max; }
public static void ElementWiseMinMax(vector v1, vector v2, out vector min, out vector max) { if (v2.X < v1.X) { var t = v1.X; v1.X = v2.X; v2.X = t; } ; if (v2.Y < v1.Y) { var t = v1.Y; v1.Y = v2.Y; v2.Y = t; } ; min = v1; max = v2; }
public void ClipSelf(vector min, vector max) { if (X < min.X) { X = min.X; } else if (max.X < X) { X = max.X; } if (Y < min.Y) { Y = min.Y; } else if (max.Y < Y) { Y = max.Y; } }
public bool LessIdThan(vector v) { if (X < v.X) { return(true); } if (X > v.X) { return(false); } if (Y < v.Y) { return(true); } if (Y > v.Y) { return(false); } return(false); }
public vector Clip(vector min, vector max) { vector v = this; if (v.X < min.X) { v.X = min.X; } else if (max.X < v.X) { v.X = max.X; } if (v.Y < min.Y) { v.Y = min.Y; } else if (max.Y < v.Y) { v.Y = max.Y; } return(v); }
/// <summary> /// コンストラクタ、管理する範囲と分割数を指定して初期化する /// </summary> /// <param name="range">管理する範囲</param> /// <param name="division">分割数</param> public GridSpace2f(range range, vectori division) { var size = range.Size; if (size.HasZero) { throw new InvalidOperationException("\"range\" must be non zero size."); } if (division.HasZero) { throw new InvalidOperationException("\"division\" must be non zero."); } var divisionf = new vector(division); _Range = range; _Division = division; _CellMax = division - 1; _Cells = new List <T> [division.Y * division.X]; _CellExtent = size / (divisionf * 2); _TransformScale = divisionf / size; _TransformTranslate = -range.Min; _InvTransformScale = size / divisionf; }
public Range2i(Range2d v) { Min = new vector(v.Min); Max = new vector(v.Max); }
public bool Contains(vector v) { v.SubSelf(Center); return(Math.Abs(v.X) <= Extents.X && Math.Abs(v.Y) <= Extents.Y); }
public void DivSelf(vector v) { X /= v.X; Y /= v.Y; }
public void MulSelf(vector v) { X *= v.X; Y *= v.Y; }
public Range2i(vector min, vector max) { Min = min; Max = max; }
public element Dot(vector v) { return(X * v.X + Y * v.Y); }
public void ExpandSelf(vector v) { Min.SubSelf(v); Max.AddSelf(v); }
public Range2i(vector position) { Min = position; Max = position; }
public void MergeSelf(vector v) { Min.ElementWiseMinSelf(v); Max.ElementWiseMaxSelf(v); }
public volume Expand(vector v) { return(new volume(Min - v, Max + v)); }
public volume Merge(vector v) { return(new volume(vector.ElementWiseMin(Min, v), vector.ElementWiseMax(Max, v))); }
public bool Contains(vector v) { return(Min <= v && v <= Max); }
public Aabb2i(Aabb2d v) { Center = new vector(v.Center); Extents = new vector(v.Extents); }
public Aabb2i(vector center, vector extents) { Center = center; Extents = extents; }
public vector Cross(vector v) { return(new vector(Y * v.X - X * v.Y, X * v.Y - Y * v.X)); }