我正在使用MATLAB代码,我想定义边界条件 我有存储在第3列的闪电纬度数据和存储在第4列的经度数据 此外,我有一个热带气旋眼睛坐标 现在我有3个区域需要分开,即:
我已经用度数纬度转换了距离,以便更容易处理
我想做的是在眼睛处于给定纬度和经度的瞬间,在旋风器的这3个区域中分别计算闪电发生次数。时间存储在第2栏中
我试图使用数学等效的圆形中心(a,b),对应旋风中心,r与中心距离:
(xa) 2 +(yb) 2 = r 2 ,x代表经度列4,y代表纬度列3。登记/>
我已经为特定情况提出了以下代码,但它似乎无法工作或编译:
M = A20121228;
lat = -10.6;
lon = 161.5;
hr = 0;
if ((M(:, 4) - lon)^2 + (M(:, 3) - lat)^2) <= 0.541^2
row_idx1 = (hr == M(:, 2) & lat == M(:, 3) & lon == M(:, 4));
filtered_M1 = M(row_idx1, :);
eyewall = filtered_M1;
end
if ((M(:, 4) - lon)^2 + (M(:, 3) - lat)^2) > 0.541^2 && ((M(:, 4) - lon)^2 + (M(:, 3) - lat)^2) <= 1.622^2
row_idx2 = (hr == M(:, 2) & lat == M(:, 3) & lon == M(:, 4));
filtered_M2 = M(row_idx2, :);
inner = filtered_M2;
end
if ((M(:, 4) - lon)^2 + (M(:, 3) - lat)^2) > 1.622^2 && ((M(:, 4) - lon)^2 + (M(:, 3) - lat)^2) <= 4.505^2
row_idx3 = (hr == M(:, 2) & lat == M(:, 3) & lon == M(:, 4));
filtered_M3 = M(row_idx3, :);
outer = filtered_M3;
end
答案 0 :(得分:1)
你应该用'公里'来形成你的大地测量数据,而不是用度数来转换范围(0,60,180,500),因为在你的情况下,在'公里'单位上工作会更方便。您可以使用geodetic2ned()
函数将大地测量数据转换为本地笛卡尔NED(Nort - East - Down - &gt;它们是Navigation Frame的轴)。在使用geodetic2ned()
时,如果您输入lat = -10.6
和lon = 161.5
(我将其命名为lat0
和lon0
)作为参考参考,那么它们将成为导航框架。因此,N
,E
(是geodetic2ned()
函数的输出,请检查下面的代码)将与lat
和lon
一起评估(在其他情况下)单词lat0
和lon0
)。通过这种方式,您可以直接写sqrt( N.^2 + E.^2 )
而不是sqrt( M(:, 4) - lon)^2 + (M(:, 3) - lat)^2 )
(顺便说一下,您应该使用Element-Wise Power)
现在检查以下代码:
SPHEROID = referenceEllipsoid('wgs84', 'km'); % // SPHEROID Reference
hr = 0;
lat0 = -10.6;
lon0 = 161.5;
[N, E, D] = geodetic2ned(M(:, 3), M(:, 4), -M(:, 2), lat0, lon0, hr, SPHEROID);
range = sqrt( N.^2 + E.^2 );
indEyewall = find( hr == D & range >= 0 & range < 60);
indInner = find( hr == D & range >= 60 & range < 180);
indOuter = find( hr == D & range >= 180 & range < 500);
eyewall = M(indEyewall, :);
inner = M(indInner, :);
outer = M(indOuter, :);
关键是,我将hr == D
部分包含在find()
函数中,因为您在代码中写了它,但我不确定是否包含它。您可能会从find()
函数中获得逻辑错误,因此,如果我是您,我会确保包含它。
我希望这会有用。祝你好运..