📄 zuobiaojulijisuan.cpp
字号:
#define MY_DLL extern "C" _declspec(dllexport)
#include<windows.h>
#include "ZuoBiaoJuLiJiSuan.h"
#include <math.h>
#define pi 3.14159265
//实现从北京—54大地坐标到北京—54空间直角坐标的转换
void BJZ54GrdToSpaceAngle(double L,double B,double H,double *X,double *Y,double *Z)
{
int a=6378245;//椭球长轴
double ee=0.0069342162297;//椭球第一偏心率平方
double N=(double)a/sqrt(1-ee*sin(B*pi/180.0)*sin(B*pi/180.0));//被转换点的卯酉圈曲率半径
*X=(N+H)*cos(B*pi/180.0)*cos(L*pi/180.0);
*Y=(N+H)*cos(B*pi/180.0)*sin(L*pi/180.0);
*Z=(N*(1-ee)+H)*sin(B*pi/180.0);
}
//实现从北京—54空间直角坐标到北京—54大地坐标的转换
void BJZ54SpaceAngleToBJZ54Grd(double X,double Y,double Z,double *L,double *B,double *H)
{
//计算大地经度L
double ll=0.0;
if(X>=0&&Y>=0)
ll=atan2(Y,X)*180/pi;//
if(X>=0&&Y<0)
ll=atan2(Y,X)*180/pi;//
if(X<0&&Y>=0)
ll=atan2(Y,X)*180/pi;
if(X<0&&Y<0)
ll=atan2(Y,X)*180/pi;//-180
*L=ll;
//计算大地经度B和高度H
double a=6378245;//椭球长轴
double b=6356863;//椭球短轴
//用迭代的方法计算B和H,
double N0=a;//为NO,HO和BO设置迭代初始值
double H0=sqrt(X*X+Y*Y+Z*Z)-sqrt(a*b);
double B0=atan(Z/sqrt(X*X+Y*Y)/(1-0.0069342162297*N0/(N0+H0)));
double lastB0=0.0;//上一次迭代得到的BO的值
double newB0=10.0;//本次迭代得到的BO的值
double lastH0=0.0;
double newH0=10.0;
while((fabs(newB0-lastB0)>0.00000001)&&(fabs(newH0-lastH0)>0.000001))
{
lastB0=B0*180/pi;//上一次迭代得到的BO的值
lastH0=H0;//上一次迭代得到的HO的值
H0=sqrt(X*X+Y*Y)/cos(B0)-N0;
N0=a/sqrt(1-0.0069342162297*sin(B0)*sin(B0));
B0=atan(Z/sqrt(X*X+Y*Y)/(1-0.0069342162297*N0/(N0+H0)));
newH0=H0;//本次迭代得到的BO的值
newB0=B0*180/pi;//本次迭代得到的BO的值
}
*B=B0*180/pi;
*H=H0;
}
//以空间直角坐标系计算空间两点之间距离
double DistanceBetweenTwoPoint(double X1,double Y1,double Z1,double X2,double Y2,double Z2)
{
double distance=0.0;
distance=sqrt(pow((X1-X2),2)+pow((Y1-Y2),2)+pow((Z1-Z2),2));
return distance;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -