I feel like bicubic interpolation should result in images like: http://en.wikipedia.org/wiki/Bicubic_interpolation
But, here I'm getting something different: import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Random; import javax.imageio.ImageIO; import org.apache.commons.math3.analysis.interpolation.BicubicSplineInterpolatingFunction; import org.apache.commons.math3.analysis.interpolation.BicubicSplineInterpolator; public class Draw { static final int STEP = 128; public static void main(String[] args) throws IOException { final int width = 1024; final int height = 512; final int totalHt = height + 64; // Constructs a BufferedImage of one of the predefined image types. final BufferedImage bufferedImage = new BufferedImage(width, totalHt, BufferedImage.TYPE_INT_RGB); // Create a graphics which can be used to draw into the buffered image final Graphics2D g2d = bufferedImage.createGraphics(); final Random rand = new Random(123); final double vx[][] = new double[width / STEP][height / STEP]; for (int i = 0; i < width / STEP; i++) { for (int j = 0; j < height / STEP; j++) { final double val = 2 * rand.nextDouble() - 1; vx[i][j] = val; } } final double x[] = new double[width / STEP]; for (int i = 0; i < width / STEP; i++) { x[i] = i * STEP; } final double y[] = new double[height / STEP]; for (int j = 0; j < height / STEP; j++) { y[j] = j * STEP; } //(1 - yfrac) * [(1 - xfrac)*s00 + xfrac*s01] + //yfrac * [(1 - xfrac)*s10 + xfrac*s11] final BicubicSplineInterpolatingFunction fun = new BicubicSplineInterpolator().interpolate(x, y, vx); for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) { if (fun.isValidPoint(i, j)) { final float val = (float) fun.value(i, j); final float bx = (float) Math.abs(val); final float hue = val > 0 ? 0.666f : 1; final Color myRGBColor = Color.getHSBColor(hue, bx, 1f); g2d.setColor(myRGBColor); g2d.fillRect(i, j, 1, 1); } } } // Disposes of this graphics context and releases any system resources that it is using. g2d.dispose(); // Save as JPEG final File file = new File(System.getProperty("user.home") +"/myimage.jpg"); ImageIO.write(bufferedImage, "jpg", file); } }