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