亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

ios實現簡單隨便移動的AR功能

2019-10-21 18:41:42
字體:
來源:轉載
供稿:網友

先上個最終的效果動態圖,

ios,AR

1、首先我們要自定義一個相機界面,可以用AVCaptureSession來自定義,不需要其他按鈕,只有一個預覽的界面;

2、我們要畫一個簡單的雷達圖,可以用CGContextRef來簡單實現,雷達圖用來顯示你跟你附近的用戶(物體)的距離,通過跟實際物體的經緯度來算兩點之間的距離,通過一定的比例來映射到雷達圖上,兩點之間的距離計算公式如下:

//兩點的經緯度計算距離 -(float) DistanceFromCoordinates:(CLLocationCoordinate2D) myDot other:(CLLocationCoordinate2D)otherDot {    double EARTH_RADIUS = 6378137.0;    double radLat1 = (myDot.latitude * M_PI / 180.0);  double radLat2 = (otherDot.latitude * M_PI / 180.0);  double a = radLat1 - radLat2;  double b = (myDot.longitude - otherDot.longitude) * M_PI / 180.0;  double s = 22 * asin(sqrt(pow(sin(a / 2), 2)         + cos(radLat1) * cos(radLat2)         * pow(sin(b / 2), 2)));  s = s * EARTH_RADIUS;  s = round(s * 10000) / 10000;    return s;   } 

要算物體在雷達圖上的顯示位置,根據三角函數,sinA=對邊/斜邊,cosA=鄰邊/斜邊,斜邊我們已經有了,就是兩點之間的距離,那么我們就需要知道一個角度,才能算出一條邊,通過這條邊跟半徑的加減,就可以算出這個物體在雷達圖上的位置。所以我們先要算兩點的方位角,看下面的一張圖:

ios,AR

這個維基上的一張方位角的解釋圖,我們可以同通過tan2函數來計算,公式如下:

- (float)getHeadingForDirectionFromCoordinate:(CLLocationCoordinate2D)fromLoc toCoordinate:(CLLocationCoordinate2D)toLoc {  float fLat = DegreesToRadians(fromLoc.latitude);  float fLng = DegreesToRadians(fromLoc.longitude);  float tLat = DegreesToRadians(toLoc.latitude);  float tLng = DegreesToRadians(toLoc.longitude);    float degree = RadiansToDegrees(atan2(sin(tLng-fLng)*cos(tLat), cos(fLat)*sin(tLat)-sin(fLat)*cos(tLat)*cos(tLng-fLng)));    if (degree >= 0) {   return degree;  } else {   return (360+degree);  }  } 

3、要實現雷達圖跟隨手機旋轉而轉動,這里我們要用到指南針的原理,通過CLLocationManager管理類,里面有個CLHeading類,我們可以實現指南針,看這個類的結構:

ios,AR

里面有真北,磁北,還有磁力值在x,y,z三軸上的磁力值,不過當我用到這三個值的時候,發現有問題,在前后移動手機的時候,發現這個值變化有停頓,如果用這個值來實現移動會導致不流暢,所以我又用了陀螺儀數據,通過CMMotionManager這個管理類來獲取手機移動擺動的角度,用來計算手機前后移動的時候,物體在手機界面上下的位置。

 

-(void) startMotion {    if (![_mgr isDeviceMotionActive] && [_mgr isDeviceMotionAvailable])  {     //設置采樣間隔   _mgr.deviceMotionUpdateInterval = 0.1;   NSOperationQueue *queue = [[NSOperationQueue alloc] init];    [_mgr startDeviceMotionUpdatesToQueue:queue    withHandler:^(CMDeviceMotion * _Nullable motion,       NSError * _Nullable error) {                 double gravityX = motion.gravity.x;       double gravityY = motion.gravity.y;       double gravityZ = motion.gravity.z;                        if (gravityY<=0 && gravityY>=-1)    {             //獲取手機的傾斜角度(zTheta是手機與水平面的夾角, xyTheta是手機繞自身旋轉的角度):   zTheta = atan2(gravityZ,sqrtf(gravityX*gravityX+gravityY*gravityY))/M_PI*180.0;  }   [[NSOperationQueue mainQueue] addOperationWithBlock:^{         [self updataPoint];      }];          //[self performSelectorOnMainThread:@selector(updataPoint) withObject:nil waitUntilDone:NO];         }];       } } 

4、通過計算角度區間來顯示手機上的物體顯示還隱藏,也就是說在雷達圖上的點進入扇形可見的區域就顯示出物體并且移動,超出就隱藏起來。還有一點,就是要算碰撞檢測的手機上物體與物體如果太多,就不能疊在一起,通過錯位錯開來,可以通過CGRectIntersectsRect來寫個算法檢測兩個矩形是否碰到了。

簡單說了下我實現的原理,當然實際做的時候會遇到很多問題。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
尤物yw午夜国产精品视频明星| 欧美网站在线观看| 亚洲国产中文字幕久久网| 亚洲欧洲自拍偷拍| 97婷婷大伊香蕉精品视频| 日本久久亚洲电影| 亚洲va久久久噜噜噜久久天堂| 成人黄色免费在线观看| 欧美性videos高清精品| 欧美韩国理论所午夜片917电影| 国产亚洲欧洲在线| 亚洲影视中文字幕| 欧美黑人一级爽快片淫片高清| 日韩最新免费不卡| 国产精品27p| 久久久久久久999精品视频| 国产精品国产三级国产专播精品人| 中文国产亚洲喷潮| 欧美激情小视频| 久久国产一区二区三区| 亚洲免费成人av电影| 国产婷婷97碰碰久久人人蜜臀| 国产一区二区三区丝袜| 波霸ol色综合久久| 黄色一区二区三区| 精品国产一区二区三区久久狼黑人| 亚洲a中文字幕| 精品久久久久久久久中文字幕| 亚洲一区美女视频在线观看免费| 69av成年福利视频| 精品福利樱桃av导航| 亚洲国内精品视频| 欧美日韩成人黄色| 欧美日韩亚洲天堂| 国产精品一区二区三| 秋霞成人午夜鲁丝一区二区三区| 国产91在线高潮白浆在线观看| 91精品国产免费久久久久久| 欧美激情视频一区二区| 亚洲成avwww人| 九九热这里只有精品6| 中文字幕亚洲综合久久筱田步美| 国产精品免费久久久久久| 一区二区三区四区精品| 91久久久亚洲精品| 91精品久久久久久久久中文字幕| 欧美激情视频一区二区三区不卡| 动漫精品一区二区| 久久成人国产精品| 成人亚洲综合色就1024| 欧美黑人一级爽快片淫片高清| 欧美日韩午夜激情| 久久久在线观看| 久久99青青精品免费观看| 亚洲美女精品久久| 日韩综合视频在线观看| 色综合伊人色综合网站| 91精品国产高清久久久久久| 日韩精品福利在线| 欧美又大粗又爽又黄大片视频| 欧美日韩国产精品| 久久香蕉国产线看观看网| 国产精品最新在线观看| 免费av一区二区| 中文字幕在线看视频国产欧美在线看完整| 91高清视频免费| 欧美精品第一页在线播放| 岛国视频午夜一区免费在线观看| 亚洲成人av中文字幕| 国产精品视频网| 日韩av在线看| 色多多国产成人永久免费网站| 亚洲一区二区三区乱码aⅴ| 在线观看日韩av| 成人精品aaaa网站| 亚洲天天在线日亚洲洲精| 成人精品视频久久久久| 精品中文视频在线| 久久天天躁日日躁| 亚洲美女中文字幕| 亚洲一区第一页| 国产欧美日韩免费| 久久久噜噜噜久久久| 久久久久久久久久久免费精品| 一本色道久久综合狠狠躁篇怎么玩| 国产欧美一区二区三区久久人妖| 欧美激情一级精品国产| 亚洲a成v人在线观看| 国产精品亚发布| 亚洲最大的免费| 亚洲精品国产综合区久久久久久久| 欧美高清一级大片| 国产精品热视频| 亚洲精品影视在线观看| 亚洲男人天堂久| 亚洲一区二区三区视频播放| 九九视频直播综合网| 欧美电影免费观看高清完整| 色偷偷av一区二区三区乱| 2018国产精品视频| 国产精品福利网站| 亚洲深夜福利网站| 亚洲精品一区av在线播放| 色噜噜久久综合伊人一本| 亚洲欧美国产精品专区久久| 亚洲最大av在线| 米奇精品一区二区三区在线观看| 国产视频在线一区二区| 日韩网站在线观看| 91成人免费观看网站| 亚洲人成毛片在线播放| 日韩欧美在线视频免费观看| 亚洲欧美一区二区三区久久| 国产日韩在线播放| 亚洲国产成人精品电影| 九九热99久久久国产盗摄| 亚洲视频欧洲视频| 97久久久免费福利网址| 欧美情侣性视频| 国产一区二区在线免费| 国产精品扒开腿做爽爽爽男男| 亚洲欧洲激情在线| 国产亚洲精品综合一区91| 亚洲成人激情小说| 国产精品你懂得| 亚洲综合精品伊人久久| 懂色av中文一区二区三区天美| 日韩高清电影免费观看完整| 91免费精品国偷自产在线| 精品国产电影一区| 色樱桃影院亚洲精品影院| 亚洲国产一区自拍| 中文字幕亚洲字幕| 色偷偷av亚洲男人的天堂| 国产精品一区二区久久精品| 国产不卡av在线免费观看| 欧美高清在线视频观看不卡| 九九精品视频在线观看| 日韩成人av在线| 亚洲人成亚洲人成在线观看| 日韩中文字幕精品| 亚洲国产福利在线| 欧美自拍视频在线观看| 精品国产91久久久久久老师| 国产丝袜一区二区三区免费视频| 久久97精品久久久久久久不卡| 中文字幕日韩在线视频| 精品久久久久久电影| 日韩av一区二区在线| 欧美色道久久88综合亚洲精品| 国产精品久久久久久中文字| 国产这里只有精品| 久久九九精品99国产精品| 国产91|九色| 日韩精品视频三区| 国产在线观看精品| 日韩精品免费在线观看| 曰本色欧美视频在线| 亚洲激情第一页| 亚洲国内精品在线| 性色av一区二区三区免费| 亚洲成人在线网| 日韩视频欧美视频| 欧美午夜影院在线视频|