読者です 読者をやめる 読者になる 読者になる

ぽちぽち歩くと下に落ちてる物に気がつくよね

思いついたことを書き留めておく場所なのです。意味はあまりないんじゃないかな

その範囲にあるか、無しか。

などという事をやっていたので。

例えば「この範囲から外に出たらgpsなどで調べて警告したい」とか合った場合のことなんですが。
範囲の点を複数書きます。ぽちぽちぽちぽちぽち。と。4画でもスタートとエンドも指定するので5点ね。んで、それを指定したら


-(bool)InsidePolygonLat:(float)lati Long:(float)longi {
    int i;
    double angle=0;
   
    NSArray* polygonLati = [NSArray arrayWithObjects:@"1点目",@"2点目",@"3点目",@"4点目",@"5点目(終端は始点と同じ)", nil];
    NSArray* polygonLongi = [NSArray arrayWithObjects:@"1点目",@"2点目",@"3点目",@"4点目",@"5点目(終端は始点と同じ)", nil];
    float p1h,p1v,p2h,p2v;
   
    for (i=0;i<[polygonLati count];i++) {
        p1h = [[polygonLati objectAtIndex:i] floatValue] - lati;
        p1v = [[polygonLongi objectAtIndex:i] floatValue] - longi;
        p2h = [[polygonLati objectAtIndex:(i+1)%20] floatValue] - lati;
        p2v = [[polygonLongi objectAtIndex:(i+1)%20] floatValue] - longi;
        angle += [self angle2Dx1:p1h y1:p1v x2:p2h y2:p2v];
    }
    if (ABS(angle) < 3.141592)
        return(FALSE);
    else return(TRUE);
}

- (float)angle2Dx1:(float)x1 y1:(float)y1 x2:(float)x2 y2:(float)y2 {
    double dtheta,theta1,theta2;
   
    theta1 = atan2(y1,x1);
    theta2 = atan2(y2,x2);
    dtheta = theta2 - theta1;
    while (dtheta > 3.141592)
        dtheta -= 3.141592 * 2;
    while (dtheta < -3.141592)
        dtheta += 3.141592 * 2;
   
    return(dtheta);
}

 

こんな事をして、今居るpointを [self InsidePolygonLat:lat Long:longt]; なんかでcheckすると 1か0が返ってきますので、それでcheck出来ます。

中に居れば1。外に出れば0ね。

 

他にも良い方法ありそうだけど、まぁとりあえずw