Unity3D经纬度与三维坐标相互转化
1.坐标分析
假设经度⾓AOB⽤ Lng 表⽰,纬度⾓DOB⽤ Lat 表⽰,半径OD⽤ R 表⽰。
坐标点D为 (X,Y,Z),这⾥假设 R 已知,实际也是很容易算得。
2.经纬度转空间坐标
转换公式:
3.空间坐标转经纬度
转换公式:
⾸先,实际上这⾥ Lng 和 Lat 是有正负的,这个可以⽤来区分南纬北纬,和东经西经。
举世无双
4.Unity3D程序
(由于之前太忙,隔了好久终于来补了)
这⾥代码我放⼀个demo(如下图,这⾥假设⽩球为地球,红⾊⼩球为绕着转的物体)。代码中东西经度和南北纬度的判断,可能需要根据⾃⼰实际需要来调整,这⾥坐标最好统⼀化,让地球为原点;
对于经度匹配,可以旋转地球,使得地球的实际经度位置与求得的经度相同即可。
using System.Collections;痛风的症状表现
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class coordinate : MonoBehaviour {
public GameObject Earth; //地球
提高智商的书
public GameObject Sphere1; //绕地物体
float myRadius;//距离
float myLatitude; //纬度
int myLatDegree;//度
float myLatMinute;//分
float myLatSecond;//秒春草年年绿
char LatDire;
float myLonitude; //经度
int myLonDegree;//度
float myLonMinute;//分
float myLonSecond;//秒
char LonDire;
void Update () {
GetComponent<Text>().text = myCalculate(Earth,Sphere1);
//Debug.Log(myCalculate());
}
string myCalculate(GameObject myEarth, GameObject mySphere){
myRadius = Vector3.ansform.position, ansform.position);
myLatitude = Mathf.ansform.position.y / myRadius) * Mathf.Rad2Deg;//求纬度,并转成弧度
//注:这⾥我是以 x,z 为⽔平⾯,即 y = 0 的轨道为⾚道,在Unity中可以很直观地看出
myLatDegree = (int)Mathf.Abs(myLatitude);//纬度均为正数,取绝对值,然后判断南北纬
myLatMinute = (int)(Mathf.Abs(myLatitude) * 60) % 60;
myLatSecond = (Mathf.Abs(myLatitude) * 3600) % 60;
LatDire = myLatitude < 0 ? 'S' : 'N';
myLonitude = Mathf.ansform.position.z, ansform.position.x) * Mathf.Rad2Deg;//求经度 myLonDegree = (int)Mathf.Abs(myLonitude);中小学生综合素质评价平台
myLonMinute = (int)(Mathf.Abs(myLonitude) * 60) % 60;玄阮隆
myLonSecond = (Mathf.Abs(myLonitude) * 3600) % 60;
LonDire = myLonitude < 0 ? 'W' : 'E';
挑三拣四return string.Format("{0}°{1}'{2:F0}\"{3} {4}°{5}'{6:F0}\"{7}" , myLatDegree, myLatMinute, myLatSecond,LatDire,
myLonDegree, myLonMinute, myLonSecond,LonDire);
//关于string.Format⽤法可见这篇博客 blog.csdn/weixin_42513339/article/details/8305764
8
}
我最喜爱的植物
}