У меня проблема с TriScatteredInterp в MatLab. Я использую набор координатных точек с соответствующей температурой в этом месте. Все они указаны в градусах в форме (long, lat, temp). Я хочу сделать интерполяцию по этим точкам, чтобы узнать значения в других точках и построить сетку. Вот что я сделал до сих пор:
long = data(:,1)
lat = data(:,2)
values = data(:,3)
lat = lat.*(pi/180)
long = long.*(pi/180)
X = cos(lat).*cos(long)
Y = cos(lat).*sin(long)
Z = sin(lat)
F = TriScatteredInterp(X,Y,Z,values)
[long1 lat1] = meshgrid(-pi:pi/360:pi, -pi/2:pi/360:pi/2);
X1 = cos(lat1).*cos(long1)
Y1 = cos(lat1).*sin(long1)
Z1 = sin(lat1);
F.Method = 'natural'
InterpVals = F(X1,Y1,Z1);
mesh(long1, lat1, InterpVals)
Как видите, для каждой точки (долготы, широты) я вычислил соответствующую точку на сфере и использовал трехмерную версию TriScatteredInterp. Проблема в том, что интерполяция работает только для «ближайшего» метода, а линейный или естественный дает только NaN. Как я читал, это происходит, когда точки, которые я хочу интерполировать, находятся за пределами выпуклой оболочки триангуляции, но поскольку необходимые точки находятся точно на сфере, а входные точки охватывают весь диапазон (длина: от -180 до 180, широта: от -90 до 90), я просто не понимаю, как все точки могут быть вне выпуклой оболочки. Любая помощь будет оценена, ты.