private void fillSurface(Vector2 startBounds, Vector2 endBounds, int iterationsPerDim, SurfaceFunction func) { float deltaX = Math.Abs(endBounds.X - startBounds.X) / iterationsPerDim; float deltaZ = Math.Abs(endBounds.Y - startBounds.Y) / iterationsPerDim; float xVal = 0; float zVal = 0; Vector3 v1, v2, v3, v4; for (int x = 0; x < iterationsPerDim; x++) { for (int z = 0; z < iterationsPerDim; z++) { xVal = startBounds.X + (deltaX * x); zVal = startBounds.Y + (deltaZ * z); v1 = new Vector3(xVal, func(xVal, zVal), zVal); xVal = startBounds.X + (deltaX * (x+1)); v2 = new Vector3(xVal, func(xVal, zVal), zVal); zVal = startBounds.Y + (deltaZ * (z+1)); v3 = new Vector3(xVal, func(xVal, zVal), zVal); xVal = startBounds.X + (deltaX * x); v4 = new Vector3(xVal, func(xVal, zVal), zVal); primBatch.FillQuad(v1, v2, v3, v4, Color.Red); } } }
/// <summary> /// Handles the display /// </summary> /// <param name="maxDistance"></param> /// <param name="minDistance"></param> /// <param name="height"></param> protected override void HandleDisplay(double maxDistance, double minDistance, double height) { SurfaceFunction surface = Function as SurfaceFunction; if (surface != null) { ClearData(); if (double.IsNaN(height)) { if (!double.IsNaN(GraphVisualizer.MaxY)) { height = GraphVisualizer.MaxY; } } if (double.IsNaN(height)) { height = surface.MaxVal(); } foreach (ISurfaceSegment surfaceSegment in surface.Surface.Segments) { for (int i = 0; i < surfaceSegment.Graph.CountSegments(); i++) { ISegment segment = surfaceSegment.Graph.GetSegment(i); DrawLine(surfaceSegment.Start, height); DrawSegment(segment, Math.Max(surfaceSegment.Start, minDistance), Math.Min(surfaceSegment.End, maxDistance), height); } } } }
// Update is called once per frame void Update() { float t = Time.time; float step = 2f / resolution; SurfaceFunction f = functions[(int)function]; for (int i = 0, z = 0; z < resolution; z++) { float v = (z + 0.5f) * step - 1f; for (int x = 0; x < resolution; x++, i++) { float u = (x + 0.5f) * step - 1f; points[i].localPosition = f(u, v, t); } } }
public EfsSurfaceFunctionGraph(GraphVisualizer graphVisualizer, SurfaceFunction function, string functionName) : base(graphVisualizer, function) { InitializeProperties(SeriesChartType.Line, functionName, functionName); }
/// <summary> /// Constructor /// </summary> /// <param name="graphVisualizer"></param> /// <param name="function"></param> public SurfaceGraph(GraphVisualizer graphVisualizer, SurfaceFunction function) : base(graphVisualizer) { Function = function; }