gpt4 book ai didi

ios - 在增强现实应用程序中实现雷达 View

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:18:50 25 4
gpt4 key购买 nike

我的雷达 View 遇到了一些问题,我很接近找到解决方案,但我无法找出问题所在。为此,我创建了一个类 radarView。问题是,当我浏览周围的位置时,几个白色点代表的位置都散布在雷达 View 的对角线上,从左上角到右下角。

下面是我如何根据位置的方位角和我自己的方位角之间的差异计算点的坐标:

-(float)calculateDelta:(double*)currentAzimuth withLoc:(ARGeoLocation *)location{
double deltaAzimuth;
deltaAzimuth = ABS(location.locationAzimuth - *currentAzimuth);

if (*currentAzimuth < 0.0)
*currentAzimuth = 2*M_PI + *currentAzimuth;

else if (*currentAzimuth > 2*M_PI)
*currentAzimuth = *currentAzimuth - 2*M_PI;

deltaAzimuth = location.locationAzimuth - *currentAzimuth;

if (deltaAzimuth < 0.0)
deltaAzimuth = 2*M_PI + deltaAzimuth;

else if (deltaAzimuth > 2*M_PI)
deltaAzimuth = deltaAzimuth - 2*M_PI;

return deltaAzimuth;
}


-(float)calculateXPointWithLoc:(ARGeoLocation *)loc andDelta:(float)delta{
float angle = radiansToDegrees(delta);
float dpx = ([myPos distanceFromLocation:loc.geoLocation]*20)/DISTANCE_FILTER;

if(0<=angle<=90)
return self.center.x + sin(angle)*dpx;
else if(90<angle<=180)
return self.center.x + cos(angle-90)*dpx;
else if(180<angle<=270)
return self.center.x - cos(270-angle)*dpx;
else if(270<angle<360)
return self.center.x - sin(360-angle)*dpx;
}

-(float)calculateYPointWithLoc:(ARGeoLocation *)loc andDelta:(float)delta{
float angle = radiansToDegrees(delta);
float dpx = ([myPos distanceFromLocation:loc.geoLocation]*20)/DISTANCE_FILTER;

if(0<=angle<=90)
return self.center.y - cos(angle)*dpx;
else if(90<angle<=180)
return self.center.y + sin(angle-90)*dpx;
else if(180<angle<=270)
return self.center.y + sin(270-angle)*dpx;
else if(270<angle<360)
return self.center.y - cos(360-angle)*dpx;
}

上面的 dpx 表示该位置距雷达 View 中心的距离(以像素为单位)。最后,我用这些数据更新了雷达上的点,实际上 UIView 存储在类 radarView 的数组“plots”中:

-(void)updateRadar:(double*)currentAzimuth andRange:(float)range{
float x,y;
int i=0;
float deltaAz;
for(ARGeoLocation *loc in coordinates){
deltaAz = [self calculateDelta:currentAzimuth withLoc:loc andRange:range];

x = [self calculateXPointWithLoc:loc andDelta:deltaAz];
// NSLog(@"x: %f",x);
y = [self calculateXPointWithLoc:loc andDelta:deltaAz];
// NSLog(@"y: %f",y);
[[plots objectAtIndex:i] setFrame:CGRectMake(x, y, DIAMETER_PLOT, DIAMETER_PLOT)];
i++;
}
}

有没有人已经体验过创建雷达 View ?

最佳答案

对不起,我不应该问这个问题。我想我做的时候太累了,我的计算没有错,我没有意识到我做了一个愚蠢的复制和粘贴,所以而不是:

y = [self calculateXPointWithLoc:loc andDelta:deltaAz];

我应该写:

y = [self calculateYPointWithLoc:loc andDelta:deltaAz];

当调试器让我意识到这一点时,我真的很失望。

关于ios - 在增强现实应用程序中实现雷达 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13112050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com