2016-06-22 5 views
-1

ポリゴンのポイントを見つけることは一般的な問題ですが、なぜ多くのものが本来の子午線、赤道および国際日付ラインのエッジケースを作成したのか理解できません。元子午線の西側の点の負の値と元の子午線の東の点の正の値は問題を処理しませんか?C:矩形内の点を見つけるための辺のケース(主子午線、赤道など)?

以下の関数は、矩形内にポイントが存在するかどうかを確認しようとします(つまり、矩形を決定するために2つのポイントを使用します)。本来の子午線または赤道をチェックすることはありません。これまでのところ、私の関数が失敗した単一の辺のケースはまだ見つかりませんでした。私は何かを見逃しているのですか、あるいは多くのプログラマーがこの不具合に不必要に対処しようとしましたか?

誰かが次の関数がtrue/falseを返すようなエッジケースを見つけられますか?私は、もし誰かがそれを見つけたら、元の子午線、赤道または国際日付の間のポイントを扱うと仮定しています。

#include <stdio.h> 
#include <stdlib.h> 
#include <stdbool.h> 

typedef struct point_s 
{ 
    long latitude; 
    long longitude; 
} point_t; 

bool find_point_on_plane(point_t *, point_t *, point_t *); 
int main(int argc, char * argv[]) 
{ 
    point_t * london = (point_t *) malloc(sizeof(point_t)); 
    point_t * cambridge = (point_t *) malloc(sizeof(point_t)); 
    point_t * x   = (point_t *) malloc(sizeof(point_t)); 

    london->latitude = 51.5074; 
    london->longitude = -.1278; 
    cambridge->latitude = 52.2053; 
    cambridge->longitude = 0.1218; 
    x->latitude = 52.0; 
    x->longitude = 0.0; 

    find_point_on_plane(london, cambridge, x) ? printf("True.\n") : printf("False.\n"); 
    return 0; 
} 

bool find_point_on_plane(point_t * lower_left, point_t * upper_right, point_t * x) 
{ 
    if(x->latitude <= upper_right->latitude && 
     x->latitude >= lower_left->latitude && 
     x->longitude <= upper_right->longitude && 
     x->longitude >= lower_left->longitude) 
    { 
     return true; 
    } 
    return false; 
} 
+1

長い51.5074?確かに??? –

+0

何が問題なのですか? – MrPickles

+0

"long"は浮動小数点型ではなく整数型です。 –

答えて

1

の問題は、このようなウィンドウで発生する:

enter image description here

+0

それでは、経度がゼロよりも大きいか、またはゼロよりも小さいかどうかをチェックし、それに応じてケースを処理するだけですか? – MrPickles

+0

まず、そのようなウィンドウをどのように表現するか自分に尋ねます。 –

+0

私はこれまでのように2点(左下と右上)を使って表現することはできませんか? – MrPickles

関連する問題