Mercurial > hg > old > magoroku_racing
comparison col.c @ 20:b1ba4dad7f6e
*** empty log message ***
author | gongo |
---|---|
date | Sat, 04 Nov 2006 12:31:22 +0000 |
parents | 0fae5658fb0b |
children | 9ec616de33a8 |
comparison
equal
deleted
inserted
replaced
19:8ab79a86aa73 | 20:b1ba4dad7f6e |
---|---|
5 #include"libps2.h" | 5 #include"libps2.h" |
6 #include"ps2util.h" | 6 #include"ps2util.h" |
7 #include"col.h" | 7 #include"col.h" |
8 #include"mytype.h" | 8 #include"mytype.h" |
9 | 9 |
10 /* | 10 /** |
11 * v0, v1が描く三角形と点pの内外判定(approx detection) | 11 * v0, v1が描く三角形と点pの内外判定(approx detection) |
12 * 点pはv0, v1が描く面のどこかに位置している。 | 12 * 点pはv0, v1が描く面のどこかに位置している。 |
13 * pが面の三角形の外側にあるときTRUEを戻し、 | 13 * pが面の三角形の外側にあるときTRUEを戻し、 |
14 * そうでなければFALSEを戻す。境界は含む。 | 14 * そうでなければFALSEを戻す。境界は含む。 |
15 */ | 15 */ |
16 static Bool | 16 static Bool |
17 col_detect_approx(FVECTOR p, FVECTOR v0, FVECTOR v1) | 17 col_detect_approx(FVECTOR p, FVECTOR v0, FVECTOR v1) |
18 { | 18 { |
19 float v_r1, v_r2, r1_r2, r1_r1, r2_r2; | 19 float v_r1, v_r2, r1_r2, r1_r1, r2_r2; |
20 float a, b, r; | 20 float a, b, r; |
21 | 21 |
22 v_r1 = ps2_vu0_inner_product( p, v0 ); | 22 v_r1 = ps2_vu0_inner_product( p, v0 ); |
23 v_r2 = ps2_vu0_inner_product( p, v1 ); | 23 v_r2 = ps2_vu0_inner_product( p, v1 ); |
24 r1_r2 = ps2_vu0_inner_product( v0, v1 ); | 24 r1_r2 = ps2_vu0_inner_product( v0, v1 ); |
25 r1_r1 = ps2_vu0_inner_product( v0, v0 ); | 25 r1_r1 = ps2_vu0_inner_product( v0, v0 ); |
26 r2_r2 = ps2_vu0_inner_product( v1, v1 ); | 26 r2_r2 = ps2_vu0_inner_product( v1, v1 ); |
27 | 27 |
28 a = (v_r1 * r2_r2 - v_r2 * r1_r2); | 28 a = (v_r1 * r2_r2 - v_r2 * r1_r2); |
29 b = (v_r2 * r1_r1 - v_r1 * r1_r2); | 29 b = (v_r2 * r1_r1 - v_r1 * r1_r2); |
30 r = (r1_r1 * r2_r2 - r1_r2 * r1_r2); | 30 r = (r1_r1 * r2_r2 - r1_r2 * r1_r2); |
31 | 31 |
32 return (a>=0 && b>=0 && a+b-r<=0) ? TRUE : FALSE; | 32 return (a>=0 && b>=0 && a+b-r<=0) ? TRUE : FALSE; |
33 } | 33 } |
34 | 34 |
35 /** | 35 /** |
36 * 垂心oの算出. 点pからv0, v1が描く面へ垂線を引いたときの交点oを | 36 * 垂心oの算出. 点pからv0, v1が描く面へ垂線を引いたときの交点oを |
37 * 垂心(orthocenter)と呼ぶ。 | 37 * 垂心(orthocenter)と呼ぶ。 |
79 if (col_detect_approx(o0, col_face[i].v0, col_face[i].v1)==TRUE) { | 79 if (col_detect_approx(o0, col_face[i].v0, col_face[i].v1)==TRUE) { |
80 goto NOCOLLISION; | 80 goto NOCOLLISION; |
81 } | 81 } |
82 } | 82 } |
83 return FALSE; | 83 return FALSE; |
84 NOCOLLISION: | 84 NOCOLLISION: |
85 ps2_vu0_copy_vector(p, o); | 85 ps2_vu0_copy_vector(p, o); |
86 ps2_vu0_copy_vector(pose, col_face[i].normal); | 86 ps2_vu0_copy_vector(pose, col_face[i].normal); |
87 return TRUE; | 87 return TRUE; |
88 } | 88 } |
89 | 89 |