576 lines
18 KiB
C
576 lines
18 KiB
C
|
|
#pragma once
|
|||
|
|
#include <iostream>
|
|||
|
|
#include <memory>
|
|||
|
|
#include <vector>
|
|||
|
|
#include <future>
|
|||
|
|
#include <complex>
|
|||
|
|
#include "gdalwarper.h"
|
|||
|
|
|
|||
|
|
#define PI_180 180/3.141592653589793238462643383279;
|
|||
|
|
#define T180_PI 3.141592653589793238462643383279/180;
|
|||
|
|
|
|||
|
|
#define Radians2Degrees(Radians) Radians*PI_180
|
|||
|
|
#define Degrees2Radians(Degrees) Degrees*T180_PI
|
|||
|
|
|
|||
|
|
const long double PI=3.141592653589793238462643383279;
|
|||
|
|
const long double epsilon = 0.000000000000001;
|
|||
|
|
const long double pi = 3.14159265358979323846;
|
|||
|
|
const long double d2r = pi / 180;
|
|||
|
|
const long double r2d = 180 / pi;
|
|||
|
|
|
|||
|
|
const long double a = 6378137.0; //<2F><><EFBFBD><EFBFBD><F2B3A4B0><EFBFBD>
|
|||
|
|
const long double f_inverse = 298.257223563; //<2F><><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD>
|
|||
|
|
const long double b = a - a / f_inverse;
|
|||
|
|
const long double e = sqrt(a * a - b * b) / a;
|
|||
|
|
const long double eSquare = e*e;
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
int testPP();
|
|||
|
|
|
|||
|
|
using namespace std;
|
|||
|
|
///
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
///
|
|||
|
|
|
|||
|
|
struct point // <20><> SARӰ<52><D3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ꣻ
|
|||
|
|
{
|
|||
|
|
long double x; // γ<><CEB3> lat pixel_row
|
|||
|
|
long double y; // <20><><EFBFBD><EFBFBD> lon pixel_col
|
|||
|
|
long double z; // <20>߳<EFBFBD> ati pixel_time
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
struct VectorPoint {
|
|||
|
|
long double x;
|
|||
|
|
long double y;
|
|||
|
|
long double z;
|
|||
|
|
};
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD>γ<EFBFBD><CEB3>ת<EFBFBD><D7AA>Ϊ<EFBFBD>ع̲<D8B9><CCB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="XYZP"><3E><>γ<EFBFBD>ȵ<EFBFBD>--degree</param>
|
|||
|
|
/// <returns>ͶӰ<CDB6><D3B0><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5></returns>
|
|||
|
|
inline point LLA2XYZ(point& LLA) {
|
|||
|
|
long double L = LLA.x * d2r;
|
|||
|
|
long double B = LLA.y * d2r;
|
|||
|
|
long double H = LLA.z;
|
|||
|
|
|
|||
|
|
long double sinB = sin(B);
|
|||
|
|
long double cosB = cos(B);
|
|||
|
|
|
|||
|
|
//long double N = a / sqrt(1 - e * e * sin(B) * sin(B));
|
|||
|
|
long double N = a / sqrt(1 - eSquare * sinB * sinB);
|
|||
|
|
point result = { 0,0,0 };
|
|||
|
|
result.x = (N + H) * cosB * cos(L);
|
|||
|
|
result.y = (N + H) * cosB * sin(L);
|
|||
|
|
//result.z = (N * (1 - e * e) + H) * sin(B);
|
|||
|
|
result.z = (N * (1 - eSquare) + H) * sinB;
|
|||
|
|
return result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD>ع̲<D8B9><CCB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵת<CFB5><D7AA>Ϊ<EFBFBD><CEAA>γ<EFBFBD><CEB3>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="XYZ"><3E>̲<EFBFBD><CCB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ</param>
|
|||
|
|
/// <returns><3E><>γ<EFBFBD><CEB3>--degree</returns>
|
|||
|
|
point XYZ2LLA(point& XYZ);
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD>XYƽ<59><C6BD>ŷʽ<C5B7><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="p1"></param>
|
|||
|
|
/// <param name="p2"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
inline long double caldistanceXY(point& p1, point& p2) {
|
|||
|
|
//return pow(p1.x - p2.x, 2) + pow(p1.y - p2.y, 2);
|
|||
|
|
return (p1.x - p2.x)* (p1.x - p2.x) + (p1.y - p2.y)* (p1.y - p2.y);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㣬<EFBFBD><E3A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> p1-->p2
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="p1">p1</param>
|
|||
|
|
/// <param name="p2">p2</param>
|
|||
|
|
/// <returns><3E><><EFBFBD><EFBFBD></returns>
|
|||
|
|
inline VectorPoint getVector(point& p1, point& p2) {
|
|||
|
|
VectorPoint result = { 0,0,0 };
|
|||
|
|
result.x = p2.x - p1.x;
|
|||
|
|
result.y = p2.y - p1.y;
|
|||
|
|
result.z = p2.z - p1.z;
|
|||
|
|
return result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="vector1"><3E><><EFBFBD><EFBFBD></param>
|
|||
|
|
/// <returns><3E><><EFBFBD><EFBFBD>ģ</returns>
|
|||
|
|
inline long double getModule(VectorPoint& vector1) {
|
|||
|
|
//return sqrt(pow(vector1.x, 2) + pow(vector1.y, 2) + pow(vector1.z, 2));
|
|||
|
|
return sqrt(vector1.x* vector1.x + vector1.y* vector1.y + vector1.z* vector1.z);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
inline long double getModuleV1V2(VectorPoint& v1, VectorPoint& v2)
|
|||
|
|
{
|
|||
|
|
return sqrt((v1.x * v1.x + v1.y * v1.y + v1.z * v1.z) * (v2.x * v2.x + v2.y * v2.y + v2.z * v2.z));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD>нǵĽǶ<C4BD>( <20>Ƕȣ<C7B6>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="vector1"><3E><><EFBFBD><EFBFBD></param>
|
|||
|
|
/// <returns><3E><><EFBFBD><EFBFBD><EFBFBD>нǵĽǶ<C4BD></returns>
|
|||
|
|
inline long double getVectorAngle(VectorPoint& vector1,VectorPoint& vector2) {
|
|||
|
|
//return Radians2Degrees( acos((vector1.x * vector2.x + vector1.y * vector2.y + vector1.z * vector2.z) / (getModule(vector1) * getModule(vector2))));
|
|||
|
|
return Radians2Degrees(acos((vector1.x * vector2.x + vector1.y * vector2.y + vector1.z * vector2.z) / (getModuleV1V2(vector1, vector2))));
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD>ļн<C4BC>ֵ
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="vector1"><3E><><EFBFBD><EFBFBD></param>
|
|||
|
|
/// <returns><3E><><EFBFBD><EFBFBD><EFBFBD>нǵĽǶ<C4BD></returns>
|
|||
|
|
inline long double getVectorAngleValue(VectorPoint& vector1, VectorPoint& vector2) {
|
|||
|
|
//return (vector1.x * vector2.x + vector1.y * vector2.y + vector1.z * vector2.z) / (getModule(vector1) * getModule(vector2));
|
|||
|
|
return (vector1.x * vector2.x + vector1.y * vector2.y + vector1.z * vector2.z) / (getModuleV1V2(vector1, vector2));
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="V1"><3E><><EFBFBD><EFBFBD>1</param>
|
|||
|
|
/// <param name="v2"><3E><><EFBFBD><EFBFBD>2</param>
|
|||
|
|
/// <returns><3E><><EFBFBD><EFBFBD>ֵ</returns>
|
|||
|
|
inline long double Vectordot(VectorPoint& V1, VectorPoint& v2) {
|
|||
|
|
return V1.x * v2.x + V1.y * v2.y + V1.z * v2.z;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="V1"><3E><><EFBFBD><EFBFBD>1</param>
|
|||
|
|
/// <param name="lamda">ϵ<><CFB5>ֵ</param>
|
|||
|
|
/// <returns><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD>IJ<EFBFBD>ֵ</returns>
|
|||
|
|
inline VectorPoint VectordotNumber(VectorPoint& V1, long double lamda) {
|
|||
|
|
V1.x = V1.x * lamda;
|
|||
|
|
V1.y = V1.y * lamda;
|
|||
|
|
V1.z = V1.z * lamda;
|
|||
|
|
return V1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// <20><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>v1->v2
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="v1">v1</param>
|
|||
|
|
/// <param name="v2">v2</param>
|
|||
|
|
/// <returns><3E><><EFBFBD>˵Ľ<CBB5><C4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></returns>
|
|||
|
|
inline VectorPoint VectorFork(VectorPoint &v1, VectorPoint& v2) {
|
|||
|
|
VectorPoint result{ 0,0,0 };
|
|||
|
|
result.x = v1.y * v2.z - v1.z * v2.y;
|
|||
|
|
result.y =v1.z*v2.x -v1.x * v2.z;
|
|||
|
|
result.z = v1.x * v2.y - v1.y * v2.x;
|
|||
|
|
return result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><D7BC>ʽ
|
|||
|
|
// <20>ļ<EFBFBD>ֵ <20><><EFBFBD><EFBFBD> <20><>Ӧ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
|
|||
|
|
// DEM<45>ļ<EFBFBD><C4BC><EFBFBD>·<EFBFBD><C2B7> str dem_path
|
|||
|
|
// ģ<><C4A3>Ӱ<EFBFBD><D3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7> str sar_sim_path
|
|||
|
|
// ģ<><C4A3>Ӱ<EFBFBD><D3B0><EFBFBD>Ŀ<EFBFBD> int
|
|||
|
|
// ģ<><C4A3>Ӱ<EFBFBD><D3B0><EFBFBD>ĸ<EFBFBD> int
|
|||
|
|
// ģ<><C4A3>Ӱ<EFBFBD><D3B0><EFBFBD><EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7> str sar_sim_match_point_x_path
|
|||
|
|
// ģ<><C4A3>Ӱ<EFBFBD><D3B0><EFBFBD><EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD>·<EFBFBD><C2B7> str sar_sim_match_point_x_path
|
|||
|
|
// ģ<><C4A3>Ӱ<EFBFBD><D3B0><EFBFBD><EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Y<EFBFBD><59><EFBFBD><EFBFBD>·<EFBFBD><C2B7> str sar_sim_match_point_y_path
|
|||
|
|
// ģ<><C4A3>Ӱ<EFBFBD><D3B0><EFBFBD><EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Z<EFBFBD><5A><EFBFBD><EFBFBD>·<EFBFBD><C2B7> str sar_sim_match_point_z_path
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> long double sample_f
|
|||
|
|
// <20><>б<EFBFBD><D0B1> long double R0
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼʱ<CABC><CAB1> long double starttime ---UTC ʱ<><CAB1>
|
|||
|
|
// <20><><EFBFBD><EFBFBD> long double
|
|||
|
|
// <20><><EFBFBD><EFBFBD> long double
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ղο<D5B2>ʱ<EFBFBD><CAB1> long double TO ---UTC ʱ<><CAB1>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>Ƶ<EFBFBD><C6B5> long double PRF
|
|||
|
|
// б<><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> long double delta_R
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> int
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>1 long double
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>2 long double
|
|||
|
|
// ....
|
|||
|
|
// <20><><EFBFBD>ǹ<EFBFBD><C7B9><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ʽģ<CABD><C4A3> int 1 <20>ǡ<EFBFBD>0 <20><><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD>ǹ<EFBFBD><C7B9><EFBFBD>ģ<EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD> int 4 5
|
|||
|
|
// <20><><EFBFBD>ǹ<EFBFBD><C7B9><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>ʼʱ<CABC><CAB1> long double
|
|||
|
|
// <20><><EFBFBD>ǹ<EFBFBD><C7B9><EFBFBD>ģ<EFBFBD><C4A3>Xֵϵ<D6B5><CFB5>1 long double
|
|||
|
|
// ....
|
|||
|
|
// <20><><EFBFBD>ǹ<EFBFBD><C7B9><EFBFBD>ģ<EFBFBD><C4A3>Yֵϵ<D6B5><CFB5>1 long double
|
|||
|
|
// ...
|
|||
|
|
// <20><><EFBFBD>ǹ<EFBFBD><C7B9><EFBFBD>ģ<EFBFBD><C4A3>Zֵϵ<D6B5><CFB5>1 long double
|
|||
|
|
// ...
|
|||
|
|
// <20><><EFBFBD>ǹ<EFBFBD><C7B9><EFBFBD>ģ<EFBFBD><C4A3>Vxֵϵ<D6B5><CFB5>1 long double
|
|||
|
|
// ...
|
|||
|
|
// <20><><EFBFBD>ǹ<EFBFBD><C7B9><EFBFBD>ģ<EFBFBD><C4A3>Vyֵϵ<D6B5><CFB5>1 long double
|
|||
|
|
// ...
|
|||
|
|
// <20><><EFBFBD>ǹ<EFBFBD><C7B9><EFBFBD>ģ<EFBFBD><C4A3>Vzֵϵ<D6B5><CFB5>1 long double
|
|||
|
|
// ...
|
|||
|
|
//
|
|||
|
|
//
|
|||
|
|
|
|||
|
|
class ParameterInFile
|
|||
|
|
{
|
|||
|
|
public:
|
|||
|
|
ParameterInFile(std::string infile_path);
|
|||
|
|
ParameterInFile(const ParameterInFile& paras);
|
|||
|
|
~ParameterInFile();
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
std::string dem_path; //dem ·<><C2B7>
|
|||
|
|
std::string out_sar_sim_path; // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>sar
|
|||
|
|
std::string out_sar_sim_dem_path; // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>sar
|
|||
|
|
std::string out_sar_sim_resampling_path; // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>sar
|
|||
|
|
std::string out_sar_sim_resampling_rc;
|
|||
|
|
int sim_height; // ģ<><C4A3>Ӱ<EFBFBD><D3B0><EFBFBD>ĸ<EFBFBD>
|
|||
|
|
int sim_width;
|
|||
|
|
long double widthspace;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>
|
|||
|
|
std::string sar_sim_match_point_path; //<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>Ӱ<EFBFBD><D3B0><EFBFBD>ĵص<C4B5>x
|
|||
|
|
std::string sar_sim_match_point_xyz_path; //<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>Ӱ<EFBFBD><D3B0><EFBFBD>ĵص<C4B5>x
|
|||
|
|
int sample_f; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
long double R0; //<2F><>б<EFBFBD><D0B1>
|
|||
|
|
long double LightSpeed;//<2F><><EFBFBD><EFBFBD>
|
|||
|
|
long double lamda;//<2F><><EFBFBD><EFBFBD>
|
|||
|
|
long double refrange;// <20>ο<EFBFBD>б<EFBFBD><D0B1>
|
|||
|
|
|
|||
|
|
long double delta_R; // б<><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
long double imgStartTime; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼʱ<CABC><CAB1>
|
|||
|
|
long double PRF;// <20><><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
|||
|
|
long double delta_t;// ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
int doppler_paramenter_number;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
long double* doppler_para;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
|
|||
|
|
//<2F><><EFBFBD>ǹ<EFBFBD><C7B9><EFBFBD>ģ<EFBFBD><C4A3>
|
|||
|
|
int polySatelliteModel;// <20>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
|
|||
|
|
int polynum;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
long double SatelliteModelStartTime;
|
|||
|
|
long double* polySatellitePara;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ݹ<EFBFBD><DDB9><EFBFBD>ģ<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿռ<C7BF>λ<EFBFBD><CEBB>
|
|||
|
|
struct SatelliteSpacePoint {
|
|||
|
|
long double x=0;
|
|||
|
|
long double y=0;
|
|||
|
|
long double z=0;
|
|||
|
|
long double vx=0;
|
|||
|
|
long double vy=0;
|
|||
|
|
long double vz=0;
|
|||
|
|
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǹ<EFBFBD><C7B9><EFBFBD>ģ<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="satelliteTime"><3E><><EFBFBD>ǹ<EFBFBD><C7B9><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1></param>
|
|||
|
|
/// <param name="SatelliteModelStartTime"><3E><><EFBFBD>ǹ<EFBFBD><C7B9><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>ʼʱ<CABC><CAB1></param>
|
|||
|
|
/// <param name="polySatellitePara"><3E><><EFBFBD>ǹ<EFBFBD><C7B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD></param>
|
|||
|
|
/// <param name="polynum"><3E><><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
inline SatelliteSpacePoint getSatellitePostion(long double satelliteTime,long double SatelliteModelStartTime,long double* polySatellitePara,int polynum);
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><>ֵģ<D6B5>ⷨ<EFBFBD><E2B7A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>ֵ
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="R">б<><D0B1></param>
|
|||
|
|
/// <param name="LightSpeed"><3E><><EFBFBD><EFBFBD></param>
|
|||
|
|
/// <param name="T0"><3E><><EFBFBD><EFBFBD><EFBFBD>ղο<D5B2>ʱ<EFBFBD><CAB1></param>
|
|||
|
|
/// <param name="doppler_para"><3E><><EFBFBD><EFBFBD><EFBFBD>ղ<EFBFBD><D5B2><EFBFBD></param>
|
|||
|
|
/// <returns><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>ֵ</returns>
|
|||
|
|
inline long double calNumericalDopplerValue(long double R,long double LightSpeed,long double T0, long double* doppler_para,int doppler_paramenter_number);
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>ֵ
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="R">б<><D0B1></param>
|
|||
|
|
/// <param name="lamda"><3E><><EFBFBD><EFBFBD></param>
|
|||
|
|
/// <param name="R_sl"><3E><><EFBFBD><EFBFBD>-><3E><><EFBFBD>ǵĿռ<C4BF><D5BC><EFBFBD><EFBFBD><EFBFBD></param>
|
|||
|
|
/// <param name="V_sl"><3E><><EFBFBD><EFBFBD>-><3E><><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD></param>
|
|||
|
|
/// <returns><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>ֵ</returns>
|
|||
|
|
inline long double calTheoryDopplerValue(long double R, long double lamda, VectorPoint R_sl, VectorPoint V_sl);
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>sarӰ<72><D3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="landpoint"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>--<2D>ع<EFBFBD><D8B9><EFBFBD><EFBFBD><EFBFBD>ϵ</param>
|
|||
|
|
/// <param name="Starttime">ӰƬ<D3B0><C6AC>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1></param>
|
|||
|
|
/// <param name="lamda"><3E><><EFBFBD><EFBFBD></param>
|
|||
|
|
/// <param name="T0"><3E><><EFBFBD><EFBFBD><EFBFBD>ղο<D5B2>ʱ<EFBFBD><CAB1></param>
|
|||
|
|
/// <param name="LightSpeed"><3E><><EFBFBD><EFBFBD></param>
|
|||
|
|
/// <param name="delta_t">ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
|
|||
|
|
/// <param name="R0"><3E><>б<EFBFBD><D0B1></param>
|
|||
|
|
/// <param name="delta_R">б<><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
|
|||
|
|
/// <param name="SatelliteModelStartTime"><3E><><EFBFBD>ǹ<EFBFBD><C7B9><EFBFBD>ģ<EFBFBD><C4A3>ʱ<EFBFBD><CAB1></param>
|
|||
|
|
/// <param name="polySatellitePara"><3E><><EFBFBD>ǹ<EFBFBD><C7B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD></param>
|
|||
|
|
/// <param name="polynum"><3E><><EFBFBD>ǹ<EFBFBD><C7B9><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
|
|||
|
|
/// <param name="doppler_paramenter_number"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD></param>
|
|||
|
|
/// <returns>Ӱ<><D3B0><EFBFBD><EFBFBD><EFBFBD>꣨x:<3A>кţ<D0BA>y:<3A>кţ<D0BA>z<EFBFBD><7A><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>̣<EFBFBD></returns>
|
|||
|
|
inline point PSTN(point& landpoint, long double Starttime, long double lamda, long double T0, long double* doppler_para, long double LightSpeed, long double delta_t, long double R0, long double delta_R, long double SatelliteModelStartTime, long double* polySatellitePara, int polynum = 4, int doppler_paramenter_number = 5);
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
struct translateArray {
|
|||
|
|
long double a0, a1, a2;
|
|||
|
|
long double b0, b1, b2;
|
|||
|
|
};
|
|||
|
|
/// <summary>
|
|||
|
|
/// ת<><D7AA>Ӱ<EFBFBD><D3B0>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="row_ids"></param>
|
|||
|
|
/// <param name="col_ids"></param>
|
|||
|
|
/// <param name="value"></param>
|
|||
|
|
/// <param name="gt"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
inline point Translation(long double row_ids,long double col_ids,long double value,translateArray& gt) {
|
|||
|
|
|
|||
|
|
point result{ 0,0,0 };
|
|||
|
|
result.x = gt.a0 + gt.a1 * col_ids + gt.a2 * row_ids;
|
|||
|
|
result.y = gt.b0 + gt.b1 * col_ids + gt.b2 * row_ids;
|
|||
|
|
result.z = value;
|
|||
|
|
return result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
inline int Translation(long double& x, long double& y, long double& r, long double& c, translateArray& gt) {
|
|||
|
|
|
|||
|
|
c = gt.a0 + gt.a1 * x + gt.a2 * y;
|
|||
|
|
r = gt.b0 + gt.b1 * x + gt.b2 * y;
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// dem<65><6D>
|
|||
|
|
/// </summary>
|
|||
|
|
class dem_block {
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
dem_block(int all_start_row,int all_start_col,int start_row, int end_row, int start_col, int end_col, int height, int width,int sample_f);
|
|||
|
|
dem_block(const dem_block& demblocks);
|
|||
|
|
~dem_block();
|
|||
|
|
dem_block resample_dem();
|
|||
|
|
//dem_block resample_dem_cudic();
|
|||
|
|
int rowcol2blockids(int row_ids, int col_ids);
|
|||
|
|
point getpointblock(int row_ids, int col_ids);
|
|||
|
|
int setpointblock(int row_ids, int col_ids, point& value);
|
|||
|
|
point getpointblock(int ids);
|
|||
|
|
int setpointblock(int ids, point& value);
|
|||
|
|
int UpdatePointCoodinarary();
|
|||
|
|
VectorPoint getslopeVector(int row_ids, int col_ids);
|
|||
|
|
public:
|
|||
|
|
int all_start_row;
|
|||
|
|
int all_start_col;
|
|||
|
|
int start_row; // Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD>к<EFBFBD>
|
|||
|
|
int end_row; //
|
|||
|
|
int start_col; // Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD>к<EFBFBD>
|
|||
|
|
int end_col;
|
|||
|
|
int height;
|
|||
|
|
int width;
|
|||
|
|
int size;
|
|||
|
|
int sample_f;
|
|||
|
|
point* pointblock; // ԭʼ<D4AD><CABC>
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
inline point bilineadInterpolation(point& p,point& p11,point& p12,point& p21,point& p22);
|
|||
|
|
|
|||
|
|
inline point cubicInterpolation(point& p, point& p11, point& p12,point& p13,point& p14, point& p21, point& p22,point& p23,point& p24,point& p31,point& p32,point& p33,point& p34,point& p41,point& p42,point& p43,point& p44);
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// ˫<><CBAB><EFBFBD>Բ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="p"></param>
|
|||
|
|
/// <param name="p11"></param>
|
|||
|
|
/// <param name="p12"></param>
|
|||
|
|
/// <param name="p21"></param>
|
|||
|
|
/// <param name="p22"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
inline point SARbilineadInterpolation(point& p, point& p11, point& p12, point& p21, point& p22) {
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
struct IncidenceAngle
|
|||
|
|
{
|
|||
|
|
long double incidenceAngle; // <20>״<EFBFBD><D7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
long double localincidenceAngle; // <20>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
struct matchPoint {
|
|||
|
|
long double r, c, ti;
|
|||
|
|
long double land_x, land_y, land_z;
|
|||
|
|
long double distance;
|
|||
|
|
long double incidenceAngle, localincidenceAngle;
|
|||
|
|
};
|
|||
|
|
/// <summary>
|
|||
|
|
/// ģ<><C4A3>sar <20>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD>飬<EFBFBD>ۼ<EFBFBD>ģ<EFBFBD><C4A3>Ĭ<EFBFBD><C4AC>ʹ<EFBFBD><CAB9>short <20><><EFBFBD><EFBFBD>(<28>ۼ<EFBFBD><DBBC><EFBFBD><EFBFBD>ޣ<EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
class sim_block {
|
|||
|
|
public:
|
|||
|
|
sim_block(int start_row,int end_row,int start_col,int end_col,int height,int width);
|
|||
|
|
sim_block(const sim_block& sim_blocks);
|
|||
|
|
~sim_block();
|
|||
|
|
|
|||
|
|
int rowcol2blockids(int row_ids, int col_ids);
|
|||
|
|
short getsimblock(int row_ids, int col_ids);
|
|||
|
|
int setsimblock(int row_ids,int col_ids, short value);
|
|||
|
|
int addsimblock(int row_ids, int col_ids,short value);
|
|||
|
|
matchPoint getpointblock(int row_ids,int col_ids);
|
|||
|
|
int setpointblock(int row_ids, int col_ids, matchPoint value);
|
|||
|
|
//
|
|||
|
|
long double getdistanceblock(int row_ids, int col_ids);
|
|||
|
|
int setdistanceblock(int row_ids, int col_ids, long double value);
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
int start_row;
|
|||
|
|
int end_row;
|
|||
|
|
int start_col;
|
|||
|
|
int end_col;
|
|||
|
|
int height;
|
|||
|
|
int width;
|
|||
|
|
int size;
|
|||
|
|
short* block;
|
|||
|
|
long double* distanceblock;
|
|||
|
|
matchPoint* pointblock;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>꣬<EFBFBD><EAA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>꣬<EFBFBD><EAA3AC><EFBFBD>淨<EFBFBD><E6B7A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>״<EFBFBD><D7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǻ;ֵ<CDBE><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="satellitepoint"><3E><><EFBFBD>ǿռ<C7BF><D5BC><EFBFBD><EFBFBD><EFBFBD></param>
|
|||
|
|
/// <param name="landpoint"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
|
|||
|
|
/// <param name="slopvector"><3E><><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD></param>
|
|||
|
|
/// <returns><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD></returns>
|
|||
|
|
inline IncidenceAngle calIncidence(point satellitepoint,point landpoint,VectorPoint slopvector) {
|
|||
|
|
|
|||
|
|
IncidenceAngle result;
|
|||
|
|
VectorPoint R_ls = getVector(landpoint, satellitepoint);
|
|||
|
|
result.localincidenceAngle = getVectorAngleValue(R_ls, slopvector);
|
|||
|
|
VectorPoint R_s{ satellitepoint.x,satellitepoint.y,satellitepoint.z };
|
|||
|
|
result.incidenceAngle = getVectorAngleValue(R_s, R_ls);
|
|||
|
|
return result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
int SimProcessBlock(dem_block demblock, ParameterInFile paras, matchPoint* result_shared, int* Pcount);
|
|||
|
|
|
|||
|
|
int ResamplingSim(ParameterInFile paras);
|
|||
|
|
int ResampleGDAL(const char* pszSrcFile, const char* pszOutFile, float fResX, float fResY, GDALResampleAlg eResample);
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// ģ<><C4A3>sar<61>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>㷨ģ<E3B7A8>顣
|
|||
|
|
/// Ϊ<>˿<EFBFBD><CBBF><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>ȡ<EFBFBD><C8A1>
|
|||
|
|
/// <20>߳<EFBFBD><DFB3><EFBFBD><EFBFBD><EFBFBD>8 --<2D>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>--ʹ<>ö<EFBFBD><C3B6>еķ<D0B5><C4B7><EFBFBD>
|
|||
|
|
/// <20>߳<EFBFBD><DFB3>ڴ棺dem_block_size*sample_f*sample_f< 1 G
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="paras"><3E><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD></param>
|
|||
|
|
/// <param name="thread_num"><3E>߳<EFBFBD><DFB3><EFBFBD>Ĭ<EFBFBD><C4AC>Ϊ8</param>
|
|||
|
|
/// <returns>ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD></returns>
|
|||
|
|
int SimProcess(ParameterInFile paras, int thread_num);
|
|||
|
|
int SimProcess_LVY(ParameterInFile paras, int thread_num);
|
|||
|
|
int WriteMatchPoint(string path, std::vector<matchPoint>* matchps);
|
|||
|
|
// <20><><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD>ӿ<EFBFBD>
|
|||
|
|
|
|||
|
|
int testPTSN(ParameterInFile paras);
|
|||
|
|
|
|||
|
|
|
|||
|
|
///
|
|||
|
|
///
|
|||
|
|
/// <20><><EFBFBD><EFBFBD>Ӱ<EFBFBD><D3B0><EFBFBD>IJ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
|||
|
|
///
|
|||
|
|
///
|
|||
|
|
|
|||
|
|
class ConvertResampleParameter {
|
|||
|
|
public:
|
|||
|
|
ConvertResampleParameter(string path);
|
|||
|
|
ConvertResampleParameter(const ConvertResampleParameter& para);
|
|||
|
|
~ConvertResampleParameter();
|
|||
|
|
public:
|
|||
|
|
string in_ori_dem_path;
|
|||
|
|
string ori_sim;
|
|||
|
|
string out_sar_xyz_path;
|
|||
|
|
string out_sar_xyz_incidence_path;
|
|||
|
|
string out_orth_sar_incidence_path;
|
|||
|
|
string out_orth_sar_local_incidence_path;
|
|||
|
|
string outFolder_path;
|
|||
|
|
int file_count;
|
|||
|
|
std::vector<string> inputFile_paths;
|
|||
|
|
std::vector<string> outFile_paths;
|
|||
|
|
std::vector<string> outFile_pow_paths;
|
|||
|
|
int ori2sim_num;
|
|||
|
|
long double* ori2sim_paras;
|
|||
|
|
int sim2ori_num;
|
|||
|
|
long double* sim2ori_paras;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
inline int ori2sim(long double ori_x,long double ori_y,long double& sim_x,long double& sim_y,long double* conver_paras) {
|
|||
|
|
long double xy = ori_x * ori_y;
|
|||
|
|
long double x2 = ori_x * ori_x;
|
|||
|
|
long double y2 = ori_y * ori_y;
|
|||
|
|
|
|||
|
|
sim_x = conver_paras[0] + ori_x * conver_paras[1] + ori_y * conver_paras[2] + x2 * conver_paras[3] + y2 * conver_paras[4] + xy * conver_paras[5];
|
|||
|
|
sim_y = conver_paras[6] + ori_x * conver_paras[7] + ori_y * conver_paras[8] + x2 * conver_paras[9] + y2 * conver_paras[10] + xy * conver_paras[11];
|
|||
|
|
return 1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>ת<EFBFBD><D7AA>ΪĿ<CEAA><C4BF><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="sim_r">ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD></param>
|
|||
|
|
/// <param name="sim_c">ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD></param>
|
|||
|
|
/// <param name="ori_r"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>к<EFBFBD></param>
|
|||
|
|
/// <param name="ori_c"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>к<EFBFBD></param>
|
|||
|
|
/// <param name="conver_paras"><3E>任<EFBFBD><E4BBBB><EFBFBD><EFBFBD></param>
|
|||
|
|
/// <returns>Ĭ<>ϣ<EFBFBD>0 <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></returns>
|
|||
|
|
inline int sim2ori(long double sim_r,long double sim_c,long double& ori_r,long double& ori_c, long double* conver_paras) {
|
|||
|
|
long double xy = sim_r * sim_c;
|
|||
|
|
long double x2 = sim_r * sim_r;
|
|||
|
|
long double y2 = sim_c * sim_c;
|
|||
|
|
ori_r = conver_paras[0] + sim_r * conver_paras[1] + sim_c * conver_paras[2] + x2 * conver_paras[3] + y2 * conver_paras[4] + xy * conver_paras[5];
|
|||
|
|
ori_c = conver_paras[6] + sim_r * conver_paras[7] + sim_c * conver_paras[8] + x2 * conver_paras[9] + y2 * conver_paras[10] + xy * conver_paras[11];
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><>ѯ<EFBFBD><D1AF>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
point GetOriRC(point& landp, ParameterInFile& paras, ConvertResampleParameter& convparas);
|
|||
|
|
|
|||
|
|
int SimProcessBlock_CalXYZ(dem_block demblock, ParameterInFile paras, ConvertResampleParameter converParas, matchPoint* result_shared, int* Pcount);
|
|||
|
|
int SimProcess_CalXYZ(ParameterInFile paras, ConvertResampleParameter conveparas, int thread_num);
|
|||
|
|
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>˼·
|
|||
|
|
dem->sim->ori(r,c) <-<EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>-> ori
|
|||
|
|
step1: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>dem <EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD> ori <EFBFBD><EFBFBD><EFBFBD>꣬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-> ori_sim.tif (r,c,incidence,localincidence)
|
|||
|
|
step2: <EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD>a,b
|
|||
|
|
|
|||
|
|
*/
|
|||
|
|
int SimProcess_Calsim2ori(ParameterInFile paras, ConvertResampleParameter conveparas, int thread_num); // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
|
|||
|
|
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
<EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
step1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡĿ<EFBFBD><EFBFBD>դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD>դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
step2:
|
|||
|
|
*/
|
|||
|
|
int SimProcess_ResamplingOri2Orth(ParameterInFile paras, ConvertResampleParameter conveparas, int thread_num);
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><EFBFBD>ͼ
|
|||
|
|
*/
|
|||
|
|
int SimProcess_Calspow(ParameterInFile paras, ConvertResampleParameter conveparas, int thread_num); // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
|