あなたの場所が長方形のグリッドで正確に 1m 離れて設定されていないと仮定すると (それは奇妙なオフィスになるでしょう...)、散在するデータポイントを介してサーフェスを補間しなければならないという問題に直面しています。TriScatteredInterp
そこで必要になるのが Matlab 関数です。リンクの例に従ってください。いくつかの変更があります。
x = [x values of your locations]
y = [y values of your locations]
z = [all heat readings for all x,y for a single timestamp]
F = TriScatteredInterp(x,y,z);
例のようにプロットします。すべてのタイムスタンプに対してこれを行う必要があるため、擬似コードでは次のようになります。
x = [x values of your locations]
y = [y values of your locations] % assuming they don't change
F = cell(numel(data{1}{1}),1);
for t = 1:numel(data{1}{1}) % loop through all time stamps
z = cellfun(@(p)p{1}(t), data);
F{t} = TriScatteredInterp(x,y,z);
end
次に、最初のものをプロットF{1}
し、Figure にスライダーを追加して別の時間を選択できます。
これは、すべてのノードが同じタイムスタンプでデータを収集することを前提としていることに注意してください。これが当てはまらない場合 (そうではないと思われます)、もう 1 つの手順を実行する必要があります。各 XY ポイントの時間の次元で補間を作成します。
を使えば簡単にできますspline
。例えば、
pp = spline(data{1}{1}, data{1}{2});
spline
最初の場所のすべてのデータを作成するため、
z = ppval(pp, [any random time within the interval])
間隔内の任意の時点での熱の補間値を提供します。発行することで、これを一度に行うことができます
z = spline(data{1}{1}, data{1}{2}, [any random vector of times] );
要約すると、次のようになります。
% interpolate over time
% NOTE: use the maximum first time, and the minimum last time,
% to ensure these endpoints are included in all splines.
minTime = max( cellfun(@(p)p{1}(1), data) );
maxTime = min( cellfun(@(p)p{1}(1), data) );
trange = minTime : [some step] : maxTime;
npts = size(data,1);
z = cell(npts,1);
for ii = 1:npts
% creates interpolation for H(t) at equal times
% trange for location ii
z{ii} = spline(data{ii}{1}, data{ii}{2}, trange);
end
% interpolate spatially
x = [x values of your locations]
y = [y values of your locations] % assuming they don't change
nts = numel(trange)
F = cell(nts,1);
for t = 1:nts
zed = cellfun(@(p)p(t),z);
F{t} = TriScatteredInterp(x,y, zed);
end
% ... and further plotting commands