2

レーダービューでいくつかの問題が発生しています。解決策はもうすぐですが、何が問題なのかわかりません。この目的のためにクラスradarViewを作成しました。周囲の場所を閲覧していると、左上隅から右下隅にかけて、レーダービューの対角線上にいくつかの白い点で表される場所がすべて散らばっています。

場所の方位角と自分の方位角の差に応じて、ポイントの座標を計算する方法は次のとおりです。

-(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の上は、レーダービューの中心からの位置がピクセル単位で持つ必要がある距離を表します。そして最後に、これらのデータを使用してレーダー上のポイントを更新します。実際には、クラスradarViewの配列「プロット」にUIViewが格納されています。

-(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++;
}
}

レーダービューの作成をすでに経験した人はいますか?

4

1 に答える 1

2

残念ながら、この質問をするべきではありませんでした。私がそれをしたとき、私はあまりにも疲れていたと思います.私の計算は間違っていませんでした.

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

私は書くべきだった:

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

デバッガーがそれに気づいたとき、私は本当にがっかりしました。

于 2012-10-29T11:10:44.927 に答える