예제 #1
0
        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);
                }
            }
        }
예제 #2
0
        /// <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);
                    }
                }
            }
        }
예제 #3
0
    // 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);
            }
        }
    }
예제 #4
0
 public EfsSurfaceFunctionGraph(GraphVisualizer graphVisualizer, SurfaceFunction function, string functionName)
     : base(graphVisualizer, function)
 {
     InitializeProperties(SeriesChartType.Line, functionName, functionName);
 }
예제 #5
0
 /// <summary>
 ///     Constructor
 /// </summary>
 /// <param name="graphVisualizer"></param>
 /// <param name="function"></param>
 public SurfaceGraph(GraphVisualizer graphVisualizer, SurfaceFunction function)
     : base(graphVisualizer)
 {
     Function = function;
 }