前回の課題の解答例
2. 点が長方形の内部に含まれるか
#include <stdio.h>
#include <stdlib.h>
struct rectangle {
double x1, y1;
double x2, y2;
};
struct point {
double x, y;
};
double read_double(void){
char buffer[256];
gets(buffer);
return atof(buffer);
}
int contains(struct rectangle r, struct point p){
if((((r.x1 < p.x) && (p.x < r.x2)) ||
((r.x2 < p.x) && (p.x < r.x1))) &&
(((r.y1 < p.y) && (p.y < r.y2)) ||
((r.y2 < p.y) && (p.y < r.y1)))){
return 1;
} else {
return 0;
}
}
int main(void){
struct rectangle rect;
struct point pt;
rect.x1 = read_double();
rect.y1 = read_double();
rect.x2 = read_double();
rect.y2 = read_double();
pt.x = read_double();
pt.y = read_double();
if(contains(rect, pt) == 1){
printf("yes\n");
} else {
printf("no\n");
}
return 0;
}
補足説明.
- 浮動小数点数をひとつ読み込むのに, 毎回 gets と atof を
呼び出すのも手間がかかるので,
そのための関数 read_double を作って利用している.
これを使うことで, main が簡潔になっていることがわかる.
- 長方形に点が含まれるかを判定する関数 contains は,
引数として struct rectangle と struct point のデータを
ひとつずつ受け取る.
実際の判定は, 長方形のふたつの x座標,
ふたつの y座標の大小が定まっていないので,
繁雑な記述になってしまった.
たとえば, x1 < x2 といった条件が守られているなら,
もっと簡潔に書くことができただろう.
[page 2]
prev
index
next