2

ポイントが300メートルの範囲内にある場合、実際にはそれらは広がっていますが、すべての関心のあるポイントを近づけています.viewPortの幅を0.5から変更しました0.17 (28.647889757 を 10.0 に変換した角度) で、実際の位置に対してすべての関心のあるポイントが適切に配置されるように提案することはできますか?

ARでポイントを計算する標準的な方法(Mixare、ARToolkit)は、

ARKitを使って計算する

double pointAzimuth = coordinate.coordinateAzimuth;

//our x numbers are left based.
double leftAzimuth = self.currentCoordinate.coordinateAzimuth - VIEWPORT_WIDTH_RADIANS / 2.0;

if (leftAzimuth < 0.0) {
    leftAzimuth = 2 * M_PI + leftAzimuth;
}

if (pointAzimuth < leftAzimuth) {
    //it's past the 0 point.
    point.x = ((2 * M_PI - leftAzimuth + pointAzimuth) / VIEWPORT_WIDTH_RADIANS) * 480.0;
} else {
    point.x = ((pointAzimuth - leftAzimuth) / VIEWPORT_WIDTH_RADIANS) * 480.0;
}

混合物で:

CGPoint point;
CGRect viewBounds = self.overlayView.bounds;
//NSLog(@"pointForCoordinate:   viewBounds.size.width = %.3f, height = %.3f", viewBounds.size.width, viewBounds.size.height );

double currentAzimuth = self.currentCoordinate.coordinateAzimuth;
double pointAzimuth = coordinate.coordinateAzimuth;


//NSLog(@"pointForCoordinate: location = %@, pointAzimuth = %.3f, pointInclination = %.3f, currentAzimuth = %.3f", coordinate.coordinateTitle, point.x, point.y, radiansToDegrees(pointAzimuth), radiansToDegrees(currentAzimuth), radiansToDegrees(pointInclination) );

double deltaAzimuth = [self deltaAzimuthForCoordinate:coordinate];
BOOL isBetweenNorth = [self isNorthForCoordinate:coordinate];

//NSLog(@"pointForCoordinate: (1) currentAzimuth = %.3f, pointAzimuth = %.3f, isNorth = %d", radiansToDegrees(currentAzimuth), radiansToDegrees(pointAzimuth), isBetweenNorth );

//  NSLog(@"pointForCoordinate: deltaAzimuth = %.3f", radiansToDegrees(deltaAzimuth));
//NSLog(@"pointForCoordinate: (2) currentAzimuth = %.3f, pointAzimuth = %.3f, isNorth = %d", radiansToDegrees(currentAzimuth), radiansToDegrees(pointAzimuth), isBetweenNorth );

if ((pointAzimuth > currentAzimuth && !isBetweenNorth) || 
    (currentAzimuth > degreesToRadians(360-self.viewRange) && 
     pointAzimuth < degreesToRadians(self.viewRange))) {

        // Right side of Azimuth            
        point.x = (viewBounds.size.width / 2) + ((deltaAzimuth / degreesToRadians(1)) * 12);  
    } else {

        // Left side of Azimuth
        point.x = (viewBounds.size.width / 2) - ((deltaAzimuth / degreesToRadians(1)) * 12);    
    }   
4

0 に答える 0