diff -r 181bbce78595 scripts/geometry/@scatteredInterpolant/scatteredInterpolant.m
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/geometry/@scatteredInterpolant/scatteredInterpolant.m	Mon Dec 16 00:49:30 2013 -0800
@@ -0,0 +1,74 @@
+## Copyright (C) 2013 Ben Kurtz
+##
+## This file is part of Octave.
+##
+## Octave is free software; you can redistribute it and/or modify it
+## under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 3 of the License, or (at
+## your option) any later version.
+##
+## Octave is distributed in the hope that it will be useful, but
+## WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+## General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+## -*- texinfo -*-
+## @deftypefn  {Function File} {@var{f} =} scatteredInterpolant (@var{X}, @var{z})
+## @deftypefnx {Function File} {@var{f} =} scatteredInterpolant (@var{x}, @var{y}, @var{z})
+## @deftypefnx {Function File} {@var{f} =} scatteredInterpolant (@dots{}, @var{method})
+##
+## Generate an interpolating function for the given dataset.  The returned function can be evaluated as any of
+## @example
+## @group
+## f (@var{xi}, @var{yi})
+## f ([@var{xi}(:), @var{yi}(:)])
+## f (@{@var{xi}, @var{yi}@})
+## @end group
+## @end example
+##
+## The first two of these are equivalent, while the third differs in that it passes @code{@var{xi}} and @code{@var{yi}} to @code{meshgrid} before using them.
+##
+## @code{scatteredInterpolant} is implemented as a wrapper around @code{griddata}, and is intended largely for matlab compatibility.
+## @seealso{griddata, TriScatteredInterp}
+## @end deftypefn
+
+## FIXME: at some point should implement the version of this where we call griddata3 if appropriate
+
+function si = scatteredInterpolant(varargin)
+	if(nargin < 2)
+		error('scatteredInterpolant:not_Enough_args', 'Two or more arguments required');
+	end
+	si = struct('Points',[],'Values',[],'Method','linear','ExtrapolationMethod','');
+	nargsleft = nargin;
+	if(ischar(varargin{nargin})) ## method specified
+		if(nargin < 3)
+			error('scatteredInterpolant:not_Enough_args', 'Point and value inputs required');
+		elseif(nargin >= 4 && ischar(varargin{nargin-1}))
+			si.ExtrapolationMethod = varargin{end};
+			si.Method = varargin{end-1};
+			nargsleft = nargin - 2;
+		else
+			si.Method = varargin{end};
+			nargsleft = nargin - 1;
+		end
+	end
+	## pick an extrapolation method if the user failed to specify one
+	if(isempty(si.ExtrapolationMethod))
+		if(strcmp(si.Method, 'nearest'))
+			si.ExtrapolationMethod = si.Method;
+		else
+			si.ExtrapolationMethod = 'linear';
+		end
+	else
+		warning('scatteredInterpolant:extrapolationMethodUnsup', 'Setting extrapolation method is currently unsupported');
+	end
+
+	si.Values = varargin{nargsleft};
+	nargsleft = nargsleft - 1;
+	si.Points = [varargin{1:nargsleft}];
+	si = class(si,'scatteredInterpolant');
+end
diff -r 181bbce78595 scripts/geometry/@scatteredInterpolant/subsref.m
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/geometry/@scatteredInterpolant/subsref.m	Mon Dec 16 00:49:30 2013 -0800
@@ -0,0 +1,19 @@
+function v = subsref(si,S)
+	if(strcmp(S(1).type,'()') && numel(S)==1)
+		## call griddata with the appropriate stuff
+		if(numel(S.subs)==1)
+			if(iscell(S.subs{1}))
+				[xi, yi] = meshgrid(S.subs{1}{:});
+			else
+				xi = S.subs{1}(:,1);
+				yi = S.subs{1}(:,2);
+			end
+		else
+			xi = S.subs{1};
+			yi = S.subs{2};
+		end
+		v = griddata(si.Points(:,1), si.Points(:,2), si.Values, xi, yi, si.Method);
+	else
+		v = builtin('subsref', si, S);
+	end
+end
diff -r 181bbce78595 scripts/geometry/TriScatteredInterp.m
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/geometry/TriScatteredInterp.m	Mon Dec 16 00:49:30 2013 -0800
@@ -0,0 +1,28 @@
+## Copyright (C) 2013 Ben Kurtz
+##
+## This file is part of Octave.
+##
+## Octave is free software; you can redistribute it and/or modify it
+## under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 3 of the License, or (at
+## your option) any later version.
+##
+## Octave is distributed in the hope that it will be useful, but
+## WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+## General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+## -*- texinfo -*-
+## @deftypefn  {Function File} {@var{f} =} TriScatteredInterp (@var{x}, @var{y}, @var{z}, @var{method})
+##
+## Is a thin wrapper around scatteredInterpolant.  It is intended mainly for compatibility.
+## @seealso{scatteredInterpolant, griddata}
+## @end deftypefn
+
+function F = TriScatteredInterp(varargin)
+  F = scatteredInterpolant(varargin{:});
+endfunction
