当前位置: 首页 > article >正文

c++ 常用函数 集锦 整理中

 c++ 常用函数集锦

目录

 c++ 常用函数集锦

 1、string和wstring之间转换

 2、经纬度转 xyz 值 互转

 3 、获取 根目录下的文件地址



 1、string和wstring之间转换

std::string convertWStringToString(std::wstring wstr)
{
	std::string str;
	if (!wstr.empty())
	{
		std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
		str = converter.to_bytes(wstr);
	}
	return str;
}

std::wstring convertStringToWString(std::string wstr)
{
	std::wstring str;
	if (!wstr.empty())
	{
		std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
		str = converter.from_bytes(wstr);
	}
	return str;
}

  2、经纬度转 xyz 值 互转

//经纬度 转 xyz
XYZ LBtoXYZ(double lontitude, double latitude, double height)
{
	double f = 1 / 298.25722293287;  //地球扁率
	double Re = 6378137.0;         //长半轴,单位:m
	double Rp = 6356752.3142;      //短半轴,单位:m
	double PI = 3.14159265;
	double R = 0;  //当量半径
	double Rdenominator = 0;
	Rdenominator = (1 - f)*(1 - f)*sin(latitude)*sin(latitude) + cos(latitude)*cos(latitude);
	//if(Rdenominator<=0)
	//	return ;

	R = Re / (sqrt(Rdenominator));  //

	XYZ res = { 0 };
	res.X = (R + height)*cos(latitude)*cos(lontitude);
	res.Y = (R + height)*cos(latitude)*sin(lontitude);
	res.Z = (R*(1 - f)*(1 - f) + height)*sin(latitude);
	return res;
}

// xyz 转 经纬度
BLH XYZtoLB(double X, double Y, double Z)
{
	double a, f, e2, B = 0.0, N = 0.0, H = 0.0, R0, R1, deltaH, deltaB;
	a = 6378137.0, f = (1.0 / 298.257223563), e2 = f*(2 - f);
	BLH res = { 0 };
	R0 = sqrt(pow(X, 2) + pow(Y, 2));
	R1 = sqrt(pow(X, 2) + pow(Y, 2) + pow(Z, 2));
	//经度直接求解
	res.L = atan2(Y, X);
	//迭代求大地维度和大地高
	N = a;
	H = R1 - a;
	B = atan2(Z * (N + H), R0 * (N * (1 - e2) + H));
	do
	{
		deltaH = N;//判断收敛所用
		deltaB = B;
		N = a / sqrt(1 - e2 * pow(sin(B), 2));
		H = R0 / cos(B) - N;
		B = atan2(Z * (N + H), R0 * (N * (1 - e2) + H));
	} while (fabs(deltaH - H) > 1.0e-3 && fabs(deltaB - B) > 1.0e-9);
	res.B = B;
	res.H = H;
	return res;
}

3 、获取 根目录下的文件地址

QString xxxxx::getConfigPath(QString fileName)
{
	QString appDirPath = QCoreApplication::applicationDirPath();
	return appDirPath + "/config/" + fileName;
}


http://www.kler.cn/a/274708.html

相关文章:

  • 【自动化】Python SeleniumUtil 工具 开启开发者模式 自动安装油猴用户脚本等
  • 【LeetCode】394、字符串解码
  • Azure虚拟机非托管磁盘大小调整
  • 基于LabVIEW的USRP信道测量开发
  • 题海拾贝:力扣 86.分隔链表
  • MySQL数据库——门诊管理系统数据库数据表
  • vue3 使用element-plus 如何再次封装table组件
  • 31-Java前端控制器模式(Front Controller Pattern)
  • LabVIEW NV色心频率扫描
  • 云原生:重塑未来应用的基石
  • DevEco Studio 项目创建
  • 解锁编程潜能:ChatGPT如何革新软件开发
  • 【RabbitMQ | 第一篇】消息队列基础知识
  • 海外社交营销为什么用云手机?不用普通手机?
  • 图像处理学习笔记(一)
  • LLM不仅仅是聊天应用,它们也可以提升制药销售团队的客户触达。
  • 【微服务】Gateway服务网关
  • [Python人工智能] 四十三.命名实体识别 (4)利用bert4keras构建Bert+BiLSTM-CRF实体识别模型
  • Python实战:TensorFlow与Keras
  • unity 学习笔记 4.坐标系
  • springboot2.7集成es8 https方式绕过证书访问集群
  • 32串口学习
  • 【图论】【深度优先搜索】【换根法】2858. 可以到达每一个节点的最少边反转次数
  • SpringMVC的执行原理
  • 「实战应用」如何用DHTMLX构建自定义JavaScript甘特图(二)
  • React简介