float GetTimeNormalised(TimeUnit Min, TimeUnit Max, TimeUnit Value) { var Norm = PopMath.Range(Min.Time, Max.Time, Value.Time); // gr: clip here? return(Norm); }
public void AddBlock(List <Vector3> Positions, List <Color> Colours, Bounds BoundingBox, bool Normalise) { // convert into colour data to put into the texture var PositionsAsColour = new List <Color>(); Color PosColour; foreach (var Position in Positions) { var NormPosition = new Vector3(); if (Normalise) { NormPosition.x = PopMath.Range(BoundingBox.min.x, BoundingBox.max.x, Position.x); NormPosition.y = PopMath.Range(BoundingBox.min.y, BoundingBox.max.y, Position.y); NormPosition.z = PopMath.Range(BoundingBox.min.z, BoundingBox.max.z, Position.z); } else { NormPosition = Position; } PosColour.r = NormPosition.x; PosColour.g = NormPosition.y; PosColour.b = NormPosition.z; PosColour.a = 1; PositionsAsColour.Add(PosColour); } AddBlock(BoundingBox, PositionsAsColour, Colours); }
// returns 0-1 for each component inside a min/mac public static Vector2 Range(this Vector2 Value, Vector2 Min, Vector2 Max) { var x = PopMath.Range(Min.x, Max.x, Value.x); var y = PopMath.Range(Min.y, Max.y, Value.y); return(new Vector2(x, y)); }
// returns 0-1 for each component inside a min/mac public static Vector3 Range(this Vector3 Value, Vector3 Min, Vector3 Max) { var x = PopMath.Range(Min.x, Max.x, Value.x); var y = PopMath.Range(Min.y, Max.y, Value.y); var z = PopMath.Range(Min.z, Max.z, Value.z); return(new Vector3(x, y, z)); }
float GetLocalHeight(float WorldHeight, float HeightScalar) { var HalfHeight = GetHeightRange(HeightScalar) / 2.0f; var Mid = GetMidHeight(); var Top = Mid - HalfHeight; var Bottom = Mid + HalfHeight; return(PopMath.Range(Bottom, Top, WorldHeight)); }
// returns 0-1 for each component inside a min/mac public static Vector4 Range(this Vector4 Value, Vector4 Min, Vector4 Max) { var x = PopMath.Range(Min.x, Max.x, Value.x); var y = PopMath.Range(Min.y, Max.y, Value.y); var z = PopMath.Range(Min.z, Max.z, Value.z); var w = PopMath.Range(Min.w, Max.w, Value.w); return(new Vector4(x, y, z, w)); }
// triangle packing! public static List <Triangle2> AllocateTriangleAtlases(List <Triangle3> MeshTriangles) { var TriangleCount = MeshTriangles.Count; var AtlasWidth = (int)Mathf.Ceil(Mathf.Sqrt((float)TriangleCount)); var AtlasHeight = AtlasWidth; var AtlasTriangles = new List <Triangle2>(); for (int ti = 0; ti < MeshTriangles.Count; ti++) { var MeshTriangle = MeshTriangles[ti]; // get atlas quad var AtlasX = ti % AtlasWidth; var AtlasY = ti / AtlasWidth; var AtlasMinu = PopMath.Range(0, AtlasWidth, AtlasX); var AtlasMaxu = PopMath.Range(0, AtlasWidth, AtlasX + 1); var AtlasMinv = PopMath.Range(0, AtlasHeight, AtlasY); var AtlasMaxv = PopMath.Range(0, AtlasHeight, AtlasY + 1); // todo: get triangle position on it's plane (ie, it's ortho) var AtlasTriangle = new Triangle2(); AtlasTriangle.a = MeshTriangle.a.xz(); AtlasTriangle.b = MeshTriangle.b.xz(); AtlasTriangle.c = MeshTriangle.c.xz(); // fit triangle to quad var AtlasTriangleBounds = new Bounds2(); AtlasTriangleBounds.Min = PopMath.Min(AtlasTriangle.a, AtlasTriangle.b, AtlasTriangle.c); AtlasTriangleBounds.Max = PopMath.Max(AtlasTriangle.a, AtlasTriangle.b, AtlasTriangle.c); AtlasTriangle.a = PopMath.Range(AtlasTriangleBounds.Min, AtlasTriangleBounds.Max, AtlasTriangle.a); AtlasTriangle.b = PopMath.Range(AtlasTriangleBounds.Min, AtlasTriangleBounds.Max, AtlasTriangle.b); AtlasTriangle.c = PopMath.Range(AtlasTriangleBounds.Min, AtlasTriangleBounds.Max, AtlasTriangle.c); // now put it in it's atlas pos AtlasTriangle.a.x = Mathf.Lerp(AtlasMinu, AtlasMaxu, AtlasTriangle.a.x); AtlasTriangle.a.y = Mathf.Lerp(AtlasMinv, AtlasMaxv, AtlasTriangle.a.y); AtlasTriangle.b.x = Mathf.Lerp(AtlasMinu, AtlasMaxu, AtlasTriangle.b.x); AtlasTriangle.b.y = Mathf.Lerp(AtlasMinv, AtlasMaxv, AtlasTriangle.b.y); AtlasTriangle.c.x = Mathf.Lerp(AtlasMinu, AtlasMaxu, AtlasTriangle.c.x); AtlasTriangle.c.y = Mathf.Lerp(AtlasMinv, AtlasMaxv, AtlasTriangle.c.y); AtlasTriangles.Add(AtlasTriangle); } return(AtlasTriangles); }
TimeUnit?PositionToTime(Rect Canvas, Vector2 Position, out float NormalisedY) { var xf = PopMath.Range(Canvas.xMin, Canvas.xMax, Position.x); var yf = PopMath.Range(Canvas.yMin, Canvas.yMax, Position.y); NormalisedY = yf; if (xf < 0 || xf > 1 || yf < 0 || yf > 1) { //Debug.Log ("xf = " + xf + " yf = " + yf); return(null); } // convert to time var MinTime = ScrollTimeLeft.Time; var MaxTime = ScrollTimeRight.Time; var Timef = Mathf.Lerp(MinTime, MaxTime, xf); var TimeMs = (int)Timef; return(new TimeUnit(TimeMs)); }
TimeUnit?PositionToTime(Rect Canvas, Vector2 Position, List <DataStreamMeta> Streams, out int?StreamIndex) { var xf = PopMath.Range(Canvas.xMin, Canvas.xMax, Position.x); var yf = PopMath.Range(Canvas.yMin, Canvas.yMax, Position.y); if (xf < 0 || xf > 1 || yf < 0 || yf > 1) { //Debug.Log ("xf = " + xf + " yf = " + yf); StreamIndex = null; return(null); } // convert to time var MinTime = ScrollTimeLeft.Time; var MaxTime = ScrollTimeRight.Time; var Timef = Mathf.Lerp(MinTime, MaxTime, xf); var TimeMs = (int)Timef; // work out which stream this is StreamIndex = GetStreamIndexOnCanvas(yf); return(new TimeUnit(TimeMs)); }
public static Color NormalToRedGreen(float Normal, Color?OOBColour) { if (Normal < 0.0f && OOBColour.HasValue) { return(OOBColour.Value); } else if (Normal < 0.5f) { Normal = Mathf.Max(Normal, 0); Normal /= 0.5f; return(new Color(1, Normal, 0)); } else if (Normal > 1 && OOBColour.HasValue) { return(OOBColour.Value); } else // >= 0.5f { Normal = Mathf.Min(Normal, 1); float Yellow = PopMath.Range(1.0f, 0.5f, Normal); return(new Color(Yellow, 1, 0)); } }