iphone – iOS – 计算距离,方位角,仰角和相对位置(增强现实)
我开始构建一个增强现实应用程序,您可以在屏幕上将图像放置在增强现实摄像机视图上,并且它保持在地球上的那个位置,因此其他有摄像机视图的人可以通过增强现实看到它现实相机视图.为此我知道我需要计算某种距离因子以及方位角和仰角.
所以,我已经想出如何将对象的图形发送到服务器并将其检索回来,但是如何将其放回到相对于地球的原始位置.我知道我需要计算它: >海拔高度 但是我如何计算这些并将它们计算在一起/将它们拼凑在一起.我希望你明白我的意思. 为了完善您的理解,让我给您一个应用程序的简短演示: 一个男人在他家里,他决定在他的一面墙上画一幅画.他打开了默认为增强现实屏幕的应用程序,按下加号按钮并从他的照片库中添加图像.在幕后,它将位置和位置数据保存到服务器,有应用程序及其增强现实屏幕的人来到,它上升到服务器并找到附近保存的图像,然后下载图像并将其放置在墙上所以当他移动它时,另一个人可以用手机看到它. 我应该采取什么方法来实现这一目标?任何大纲,链接,资源,教程,想法,经验等谢谢!这是一个写下来的难题,希望你能理解.如果没有,请告诉我,我会改写. 罗汉 解决方法
我正在开发两个AR iOS应用程序,它们执行以下操作:将方位角(罗盘,水平角度)和高程(陀??螺仪,垂直角度)转换为3D空间中的位置(例如球形到笛卡尔).
您需要的框架是: > CoreLocation 获取地理位置(坐标)对于纬度,经度和海拔非常简单.您可以在多个在线源中轻松找到此信息,但这是您在调用startUpdatingLocation后从CLLocationManagerDelegate中需要的主要调用: - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { latitude = (float) manager.location.coordinate.latitude; longitude = (float) manager.location.coordinate.longitude; altitude = (float) manager.location.altitude; } 获得方位角也非常简单,在调用startUpdatingHeading后使用相同的委托作为位置: - (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading { azimuth = (float) manager.heading.magneticHeading; } 从陀螺仪中提取高程,陀螺仪没有代表,但也很容易设置.电话看起来像这样(注意:这适用于我在景观模式下运行的应用,请检查你的): elevation = fabsf(self.motionManager.deviceMotion.attitude.roll); 最后,您可以将方向坐标转换为3D点,如下所示: - (GLKVector3)sphericalToCartesian:(float)radius azimuth:(float)theta elevation:(float)phi { // Convert Coordinates: Spherical to Cartesian // Spherical: Radial Distance (r),Azimuth (θ),Elevation (φ) // Cartesian: x,y,z float x = radius * sinf(phi) * sinf(theta); float y = radius * cosf(phi); float z = radius * sinf(phi) * cosf(theta); return GLKVector3Make(x,z); } 对于最后一部分,要非常警惕角度和轴命名约定,因为它们在源与源之间变化很大.在我的系统中,θ是水平面上的角度,φ是垂直平面上的角度,x是左右,y是下行,z是前后. 至于距离,我不确定你真的需要使用它,但如果你这样做,那么只需将其替换为“半径”. 希望有所帮助 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ruby-on-rails – SemiFixed:缺少’secret_key_base`用于’
- 使用expat开发xml分析器
- UML中的泛化、实现、依赖、关联、聚合、组合6种关系
- 在React Native iOS的图像顶部渲染透明背景文本框
- cvc-complex-type.2.4.a: Invalid content was found start
- c# – InstallShield LE 1001错误/在Windows XP上安装Windo
- Vue.js组件tree实现省市多级联动
- Flash编程中的域、安全域、应用域和安全沙箱等
- c# – 用功能组合推断泛型类型
- 如何使用.net编程语言开始使用NOSQL?