⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zuobiaojulijisuan.cpp

📁 BeiJing54 coordinate system to Space Angle coordinate system
💻 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 + -