Presentation is loading. Please wait.

Presentation is loading. Please wait.

演習12.

Similar presentations


Presentation on theme: "演習12."— Presentation transcript:

1 演習12

2 問題 xy平面上の3点A、B、Cで表される三角形ABCが原点を内部に含むかどうかを判定するプログラムを作りなさい。 原点を含む
原点を含まない

3 判定方法 原点Zを頂点とする三角形ZAB、ZAC、ZBCの面積の和とABCの面積を比較する 原点を含む場合

4 判定方法 原点Zを頂点とする三角形ZAB、ZAC、ZBCの面積の和とABCの面積を比較する 原点を含まない場合

5 判定方法 原点Zを頂点とする三角形ZAB、ZAC、ZBCの面積の和とABCの面積を比較する
面積をSabc、Szab、Szac、Szbcとすると if (Sabc < Szab+Szac+Szbc) printf("原点を含まない\n"); else printf("原点を含む\n");

6 注意点 Sabc == Szab+Szac+Szbc Sabc != Szab+Szac+Szbc
double型の数(浮動小数点数)の比較は大小関係を含んだ形で行う Sabc == Szab+Szac+Szbc Sabc != Szab+Szac+Szbc 等しい→差の絶対値がとても小さな値

7 三角形の面積(1) Szab、Szac、SzbcについてはCが原点であると考える

8 三角形の面積(2) Szab、Szac、SzbcについてはCが原点であると考える 結果がdouble型になる
Sabc = 0.5*fabs((Xa-Xc)*(Yb-Yc)-(Ya-Yc)*(Xb-Xc)); 1/2 と書くとint型の演算になり0になる Szab = 0.5*fabs(Xa*Yb-Ya*Xb); Szac = 0.5*fabs(Xa*Yc-Ya*Xc); Szbc = 0.5*fabs(Xb*Yc-Yb*Xc); Szab、Szac、SzbcについてはCが原点であると考える

9 部分をまとめてプログラムにする (1)変数の定義 (2)座標の入力 (3)三角形の面積の計算 (4)原点が内側に含まれるかの判定

10 テストデータ 原点を含むもの (-1,4) (2,-3) (-4,0) 原点を含まないもの (-1,4) (5,5) (6,-3)

11 実行例 -1 4 2 -3 -4 0 -1 4 5 5 6 -3 A(-1,4) A(-1,4) B(2,-3) B(5,5)
C(-4,0) Sabc 16.5 Szab 2.5 Szbc 6 Szac 8 Szab+Szbc+Szac 16.5 原点は三角形ABCの中に含まれる A(-1,4) B(5,5) C(6,-3) Sabc 24.5 Szab 12.5 Szbc 22.5 Szac 10.5 Szab+Szbc+Szac 45.5 原点は三角形ABCの中に含まれない


Download ppt "演習12."

Similar presentations


Ads by Google