我正在开发一个显示太阳围绕当前位置的轨道路径的应用程序。
遵循这些步骤。
使用 CLLocationManager 获取当前位置
获取关于当前日期时间和位置详细信息的太阳方位角和仰角详细信息
将方位角和仰角球坐标转换为笛卡尔 XYZ 坐标以在 ARKit 上显示。
在 Arkit 上显示最终坐标并绘制路径
我已经使用参考应用程序验证了方位角和仰角的详细信息,并且非常完美。
但是在将其转换为笛卡尔坐标后,它永远不会显示在 ARKit 中的正确位置。
转换代码:
public Vector3 PerformCalculations(BRSunSphericalPosition sphericalPosition)
{
Vector3 vector = new Vector3();
vector.X = (float)(radius * Math.Cos(DegreeToRadians(sphericalPosition.Elevation)) * Math.Cos(DegreeToRadians(sphericalPosition.Azimuth)));
vector.Y = (float)(radius * Math.Cos(DegreeToRadians(sphericalPosition.Elevation)) * Math.Sin(DegreeToRadians(sphericalPosition.Azimuth)));
vector.Z = (float)(radius * Math.Sin(DegreeToRadians(sphericalPosition.Elevation)));
return vector;
}
并在 ARKit 上显示:
System.Numerics.Vector3 sunPosition = coordinateCalculator.PerformCalculations(position);
var sphereNode = new SCNNode();
sphereNode.Geometry = SCNSphere.Create(0.05f);
sphereNode.Geometry.FirstMaterial.Diffuse.Contents = TimeView(time);
sphereNode.Position = new SCNVector3(sunPosition.X, sunPosition.Y, sunPosition.Z);
arSCNView.Scene.RootNode.AddChildNode(sphereNode);
但是这段代码从未显示过太阳上方的球体,它与确切的点非常偏离。
例如:当它在下午 12:30 左右时,它应该在顶部,而在晚上 12:30 时,太阳的位置应该在底部。
这里我使用了 Xamarin C# 语言,但原生 iOS 中的解决方案也可以。