我用java重写了MATLAB的“areaint”函数,得到了完全相同的结果。
“areaint”计算“每单位表面”,所以我把答案乘以地球的表面积(5.10072e14平方米)。private double area(ArrayList lats,ArrayList lons)
{
double sum=0;
double prevcolat=0;
double prevaz=0;
double colat0=0;
double az0=0;
for (int i=0;i
{
double colat=2*Math.atan2(Math.sqrt(Math.pow(Math.sin(lats.get(i)yxdhy/180/2), 2)+ Math.cos(lats.get(i)yxdhy/180)*Math.pow(Math.sin(lons.get(i)yxdhy/180/2), 2)),Math.sqrt(1- Math.pow(Math.sin(lats.get(i)yxdhy/180/2), 2)- Math.cos(lats.get(i)yxdhy/180)*Math.pow(Math.sin(lons.get(i)yxdhy/180/2), 2)));
double az=0;
if (lats.get(i)>=90)
{
az=0;
}
else if (lats.get(i)0 && i
{
sum=sum+(1-Math.cos(prevcolat + (colat-prevcolat)/2))yxdhy*((Math.abs(az-prevaz)/Math.PI)-2*Math.ceil(((Math.abs(az-prevaz)/Math.PI)-1)/2))* Math.signum(az-prevaz);
}
prevcolat=colat;
还没有评论,来说两句吧...