00001 #include <math.h>
00002
00003 int img2helioVector (double bxImg, double byImg, double bzImg, double *bxHelio,
00004 double *byHelio, double *bzHelio, double lon, double lat,
00005 double lonc, double latc, double pAng) {
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 static double raddeg = M_PI / 180.;
00024 double a11, a12, a13, a21, a22, a23, a31, a32, a33;
00025
00026 a11 = -sin(latc) * sin(pAng) * sin(lon - lonc) + cos(pAng) * cos(lon - lonc);
00027 a12 = sin(latc) * cos(pAng) * sin(lon - lonc) + sin(pAng) * cos(lon - lonc);
00028 a13 = -cos(latc) * sin(lon - lonc);
00029 a21 = -sin(lat) * (sin(latc) * sin(pAng) * cos(lon - lonc) + cos(pAng) * sin(lon - lonc))
00030 - cos(lat) * cos(latc) * sin(pAng);
00031 a22 = sin(lat) * (sin(latc) * cos(pAng) * cos(lon - lonc) - sin(pAng) * sin(lon - lonc))
00032 + cos(lat) * cos(latc) * cos(pAng);
00033 a23 = -cos(latc) * sin(lat) * cos(lon - lonc) + sin(latc) * cos(lat);
00034 a31 = cos(lat) * (sin(latc) * sin(pAng) * cos(lon - lonc) + cos(pAng) * sin(lon - lonc))
00035 - sin(lat) * cos(latc) * sin(pAng);
00036 a32 = -cos(lat) * (sin(latc) * cos(pAng) * cos(lon - lonc) - sin(pAng) * sin(lon - lonc))
00037 + sin(lat) * cos(latc) * cos(pAng);
00038 a33 = cos(lat) * cos(latc) * cos(lon - lonc) + sin(lat) * sin(latc);
00039
00040 *bxHelio = a11 * bxImg + a12 * byImg + a13 * bzImg;
00041 *byHelio = a21 * bxImg + a22 * byImg + a23 * bzImg;
00042 *bzHelio = a31 * bxImg + a32 * byImg + a33 * bzImg;
00043
00044 return 0;
00045 }