MATLAB Examples

Contents

% This demo was rewritten from the RegularizeData3D examples.

% This demonstrates that linear interpolation and cubic interpolation
% produce different results.

clear; close all;

Input points.

inputPoints =[
	1,  0.5, 0.5;
	1,    2,   1;
	1,  3.5, 0.5;
	3, 0.75, 0.5;
	3,  1.5,   1;
	3, 2.25, 0.5;
	3,    3,   1;
	3,    4, 0.5];

Calculate surface with linear and cubic interpolation methods

% Change the spacing to test each axis or both axes. You get the same
% surface profile whether the spacing is 0.5 or 0.01 on either or both
% axes.
x = 0:0.2:4;
y = 0:0.2:4;

% Set the smoothness.  See the help for details about the
% smoothness setting.
smoothness = 0.003;

% Calculate surface using cubic interpolation
zCubic = regularizeNd(inputPoints(:, 1:2), inputPoints(:, 3), {x, y}, smoothness, 'cubic');
% Other equivalent calls
% zCubic = regularizeNd(inputPoints(:, 1:2), inputPoints(:, 3), {x, y}, smoothness, 'cubic',[]);
% zCubic = regularizeNd(inputPoints(:, 1:2), inputPoints(:, 3), {x, y}, smoothness, 'cubic', 'normal');

% Calculate surface using linear interpolation
zLinear = regularizeNd(inputPoints(:, 1:2), inputPoints(:, 3), {x, y}, smoothness);
% Other equivalent calls. If you use [] for smoothness, interp, or solver,
% the default argument is used. See the help
% zLinear = regularizeNd(inputPoints(:, 1:2), inputPoints(:, 3), {x, y}, smoothness, 'linear');
% zLinear = regularizeNd(inputPoints(:, 1:2), inputPoints(:, 3), {x, y}, smoothness, []);
% zLinear = regularizeNd(inputPoints(:, 1:2), inputPoints(:, 3), {x, y}, smoothness, [], []);
% zLinear = regularizeNd(inputPoints(:, 1:2), inputPoints(:, 3), {x, y}, smoothness, 'linear', []);
% zLinear = regularizeNd(inputPoints(:, 1:2), inputPoints(:, 3), {x, y}, smoothness, 'linear', 'normal');

Plots

screenSize = get(0, 'screenSize');
figure('color', 'w', 'position', [screenSize(3:4)*0.1 800 1600])

% Plot this figure on the left.
subplot1 = subplot(2, 1, 1);
view(subplot1,[-74.5, 14]);
grid(subplot1, 'on');
hold(subplot1, 'all');

% Note that surf uses the meshgrid format for plotting surfaces using
% vectors for x and y. regularizeNd outputs in the ndgrid format. In 2d,
% meshgrid is the transpose of the ndgrid format.
surf(x, y, zCubic', 'facealpha', 0.75);
scatter3(inputPoints(:, 1), inputPoints(:, 2), inputPoints(:, 3),[], 'r', 'filled');

xlabel('x', 'FontSize', 12);
ylabel('y', 'FontSize', 12);
zlabel('z', 'FontSize', 12);
title(sprintf('Regularized output surface generated with cubic Interpolation\nOriginal, scattered input points in red'));
axis([0, 4, 0, 4, 0, 1.1]);


% Plot this figure on the right.
subplot2 = subplot(2, 1, 2);
view(subplot2,[-74.5, 14]);
grid(subplot2, 'on');
hold(subplot2, 'all');

% Note that surf uses the meshgrid format for plotting surfaces using
% vectors for x and y. regularizeNd outputs in the ndgrid format. In 2d,
% meshgrid is the transpose of the ndgrid format.
surf(x, y, zLinear', 'facealpha', 0.75);
scatter3(inputPoints(:, 1), inputPoints(:, 2), inputPoints(:, 3), [], 'r', 'filled');

xlabel('x', 'FontSize', 12);
ylabel('y', 'FontSize', 12);
zlabel('z', 'FontSize', 12);
title(sprintf('Regularized Output Surface generated with linear Interpolation.\nOriginal, scattered input points in red'));
axis([0, 4, 0, 4, 0, 1.1]);