Surface Plot

The Surface class is used to draw a surface. Surfaces can be specified either by an interface defining a function over a rectangle or by a set of points in three dimensions.

If a function defined over a rectangle is used, the function is evaluated on a rectangular grid of points. The resulting quadrilaterals are plotted.

Shaded Surface

This example shades a surface with a user-specified function, instead of using shading. The same function is used as in the previous example: z = 2sin (x + y) - cos (2x - 3y) over the square [-1,1] by [-1,1].

The shade Color function uses a Colormap object from the com.imsl.chart package. This maps a parameter to a Color. In this example the surface is colored using the function t = x2 + y2 + z2.

The function value is scaled to a Colormap parameter using s = t1/4 / 1.8.

The chart also includes a ColormapLegend, which is drawn on the background. It is positioned 5 pixels from the right edge and 5 pixels from the top edge of the canvas (see Canvas3DChart).

(Download Code)

 

import com.imsl.chart3d.*;

import com.imsl.chart.Colormap;

 

public class SampleShadedSurface extends JFrameChart3D

        implements Surface.ZFunction, ColorFunction {

   

    private Colormap colormap = Colormap.GREEN_RED_BLUE_WHITE;

 

    public SampleShadedSurface() {

        Chart3D chart = getChart3D();

        AxisXYZ axis = new AxisXYZ(chart);

        Surface surface =

            new Surface(axis, this, -1.0, 1.0, -1.0, 1.0);

        surface.setColorFunction(this);

        surface.setSurfaceType(Surface.SURFACE_TYPE_NICEST);

 

        double maxColor = Math.pow(1.8,4);

        ColormapLegend colormapLegend =

                new ColormapLegend(chart, colormap, 0., maxColor);

        colormapLegend.setTitle("Color");

        colormapLegend.setPosition(-5, 5);

        render();

    }

   

    public double f(double x, double y) {

        return 2*Math.sin(x+y) - Math.cos(2*x-3*y);

    }

   

    public java.awt.Color color(double x, double y, double z) {

        double t = x*x + y*y + z*z ;

        double s = Math.pow(t, 0.25) / 1.8;

        return colormap.color(s);

    }

 

    public static void main(String args[]) {

        new SampleShadedSurface().setVisible(true);

    }

}

 

 



Visual Numerics - Developers of IMSL and PV-WAVE
http://www.vni.com/
PHONE: 713.784.3131
FAX:713.781.9260