Changeset 1932 for GTP/trunk/Lib/Vis/Preprocessing/src/Triangle3.cpp
- Timestamp:
- 01/03/07 01:36:35 (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/Lib/Vis/Preprocessing/src/Triangle3.cpp
r1867 r1932 185 185 } 186 186 187 } 187 188 bool Triangle3::IntersectPlane(const Plane3 &plane, 189 Vector3 &intersectA, 190 Vector3 &intersectB) const 191 { 192 int side[3]; 193 194 // compute distance from plane 195 for (int i = 0; i < 3; ++ i) 196 { 197 side[i] = plane.Side(mVertices[i], Limits::Small); 198 } 199 200 ///// 201 // no intersection => early exit 202 if (((side[0] > 0) && (side[1] > 0) && (side[2] > 0)) || 203 ((side[0] < 0) && (side[1] < 0) && (side[2] < 0))) 204 { 205 return false; 206 } 207 208 ///////////// 209 // at least 2 triangle vertices lie in plane => early exit 210 211 for (int i = 0; i < 3; ++ i) 212 { 213 if (!side[i] && !side[(i + 1) % 3]) 214 { 215 intersectA = mVertices[i]; 216 intersectB = mVertices[(i + 1) % 3]; 217 218 return true; 219 } 220 } 221 222 bool foundA = false; 223 224 // compute intersection points 225 for (int i = 0; i < 3; ++ i) 226 { 227 const int i_2 = (i + 1) % 3; 228 229 // intersection found 230 if ((side[i] >= 0) && (side[i_2] <= 0)) 231 { 232 const float t = plane.FindT(mVertices[i], mVertices[i_2]); 233 234 if (!foundA) 235 { 236 intersectA = mVertices[i] + t * (mVertices[i_2] - mVertices[i]); 237 foundA = true; 238 } 239 else 240 { 241 intersectB = mVertices[i] + t * (mVertices[i_2] - mVertices[i]); 242 return true; 243 } 244 } 245 } 246 247 cout << "warning! wrong triangle - plane intersection" << endl; 248 return false; // something went wrong! 249 } 250 251 252 }
Note: See TracChangeset
for help on using the changeset viewer.