- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
我正开始构建一个增强现实应用程序,您可以在其中将图像放在屏幕上的增强现实相机 View 中,它会停留在地球上的那个位置,这样其他拥有相机 View 的人就可以过来看看它在增强现实相机 View 上。为此,我知道我需要计算某种距离因子以及方位角和仰角。
所以,我已经想出了如何将对象的图形发送到服务器并取回它,但如何才能将它放回相对于地球的原始位置。我知道我需要计算它:
但是我将如何计算这些并解释它们/将它们拼凑在一起。我希望你明白我的意思。
为了加深您的理解,让我给您一个简短的应用程序演示:
一个人在他的房子里,他决定在他的一面墙上放置一幅画的图像。他打开默认显示增强现实屏幕的应用程序,按下加号按钮并从他的照片库中添加一张图片。在幕后,它会将位置和位置数据保存到服务器上,有人使用应用程序和增强现实屏幕来时,它会上到服务器并找到附近保存的图像,然后下载图像并将其放置在卡在墙上,这样当他移动它时,另一个人可以用他的手机看到它。
我应该采取什么方法来实现这一目标?任何大纲、链接、资源、教程、想法、经验等。谢谢!这是一个一般很难写下来的问题,我希望你能理解。如果不是请告诉我,我会改写。
罗汉
最佳答案
我正在开发两个 AR iOS 应用程序,它们执行以下操作:将方位角(罗盘、水平角)和仰角(陀螺仪、垂直角)转换为 3D 空间中的位置(例如球面到笛卡尔)。
您需要的框架是:
获取纬度、经度和高度的地理位置(坐标)非常简单。您可以在多个在线资源中轻松找到此信息,但这是您在调用 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
后使用与位置相同的委托(delegate):
- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading
{
azimuth = (float) manager.heading.magneticHeading;
}
高程是从陀螺仪中提取的,陀螺仪没有委托(delegate),但也很容易设置。调用看起来像这样(注意:这适用于我在横向模式下运行的应用程序,检查你的):
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, y, z);
}
对于最后一部分,请非常注意角度和轴的命名约定,因为它们因来源而异。在我的系统中,θ 是水平面的角度,φ 是垂直面的角度,x 是左右,y 是上下,z 是前后。
至于距离,我不确定您是否真的需要使用它,但如果您需要,只需将它替换为“半径”即可。
希望对你有帮助
关于iphone - iOS - 计算距离、方位角、仰角和相对位置(增强现实),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14070931/
我正在尝试找出如何计算从移动的飞行器模拟到地面上某个点的方位角和仰角。 我有车辆的位置向量 P 及其方向四元数 vehQ。我有目标位置 T,并且我通过从 T 中减去 P 构建了差异向量 dPT。 如何
PyEphem 有没有一种方法可以在不使用 python 循环的情况下有效地将大量视坐标转换为赤道赤经/赤纬?任何提示表示赞赏,谢谢! 最佳答案 您可以将 for 循环隐藏在函数内部,这样您就不需要考
我正在尝试编写一个基本的 python 脚本,该脚本将从给定位置跟踪用 tle 定义的给定卫星。我不是一个 asto/orbital 的人,但我正在努力变得更聪明。 当我尝试将方位角、仰角、距离值转换
package my.pack; import java.util.Iterator; import android.app.Activity; import android.conten
我试图重做这个已经回答的问题Matplotlib - plot_surface : get the x,y,z values written in the bottom right corner ,但
我是一名优秀的程序员,十分优秀!