teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

コードを追加

2016/10/06 09:49

投稿

Nariyoshi
Nariyoshi

スコア10

answer CHANGED
@@ -1,2 +1,36 @@
1
1
  線分ABの距離 = 線分ACの距離+線分BCの距離
2
- この条件をみたすときは線分上に点Cが存在すると思われますが、いかがでしょうか?
2
+ この条件をみたすときは線分上に点Cが存在すると思われますが、いかがでしょうか?
3
+
4
+ 実装例を以下に示します。
5
+
6
+ ```C
7
+ #include<stdio.h>
8
+ #include<stdbool.h>
9
+ #include<math.h>
10
+
11
+ double pow2(double x) {
12
+ return x * x;
13
+ }
14
+
15
+ // 線分ABの距離
16
+ double dist(double Ax,double Ay, double Bx, double By) {
17
+ return sqrt( pow2(Ax-Bx) + pow2(Ay-By) );
18
+ }
19
+
20
+ // 点Cが線分AB上であれば true (端点を含む), それ以外は false
21
+ bool onSegment(double Ax,double Ay, double Bx, double By, double Cx, double Cy) {
22
+ return dist(Ax,Ay,Bx,By) == ( dist(Ax,Ay,Cx,Cy) + dist(Bx,By,Cx,Cy) );
23
+ }
24
+
25
+ int main(){
26
+ double Ax = 0, Ay = 0;
27
+ double Bx = 5, By = 0;
28
+ double Cx = 2, Cy = 0;
29
+ if( onSegment(Ax,Ay,Bx,By,Cx,Cy) ) {
30
+ puts("on");
31
+ } else {
32
+ puts("off");
33
+ }
34
+ return 0;
35
+ }
36
+ ```