ºÝºÝߣ

ºÝºÝߣShare a Scribd company logo
3D Collision
?? ?????? ??
chapter 18
???? ?? ??
? ?? ??
??? ??? ?? ??
chapter 22
??? ?? ?? ??
??
????? ????? ?? ??
????? Cuboid ?? ???? ????
class Cuboid {
int mX, mY, mZ; // ????? ??
int mHalfSizeX, mHalfSizeY, mHalfSizeZ; // ? ?? ?? / 2
bool isIntersect ( const Cuboid& b)
}
?? ?????? ???? ?? isIntersect()? ????? ?????? ?? ??? ??
??.
? ??? ????? ???? ?? ????? ??? ????, ?? ? ????? ?? ?
??
?? ???? ???? ??.
???? ????
< 2???? ???? x??? ?????? ?? ? ? y?? ?????? ????? ? >
??? ?? ??
X?, Y?, Z?? ?? ??? ???? ??. (???? ? ?? ??? ????? ?? ??
????) ??? ??? ?? ??, x, y, z, xy, yz, xz ? ?? ?? ??? ?? ??? ??
??.(xyz? ???)
* ?? ??
1. object?? ?? ??? ??
2. ?? frame??? ??? ??
3. ???? ????? ??? ???, ??? ?? ????? ??? ??
???? ?? ??? ?? ??? ???.
?? ??? ??? ????? ???.
(??? ???? ?? ?????? ???? ???? ??? ?)
???? ????
x
z
x
z
x
z
< y? ?? ??? ???? ¨Cy? ???? ? ?. ?? ??? ??? ???? ?? ???? ???? >
?? ?? ?? ??
? ?? ????? ??? ??? ??? ?? ??? ??? ??.
????? ??? ???? ? ? ??!!
? ????
< ? ??? >
?? ?? ?? ??
?? ?? ?? ? ??? ?? ???? ??? ???? ??. ?? ????? v???? ?
? ??? ?? ??? ??, ????? a? ???? ?? ????.
?? ???? a??? v???? d??? ?? ?? ? ??. d??? v * cos ? ? ???
?? ? ?? cos ?? ??
???
? |?|
?? ?? ? ??.
? ?? ???? ??? ?? ?? ?? ?????? ?? ??? ??? ??? ?? ???
?.
? ????
< ? ??? ? ??? ?? ? >
? = ? ? ? ? ?
? = ? ?
?
?
? |?| ? cos ?
??? ???
??? ?? ????? ????? ???? ?????? ??? ????? ?? ?? ??
???.
??? ?????? object? ?? ????, ??? ? ?? ??? ???? ?? ?? ??
??? ??.
??? ? ??? ?? ? ?? ?? ? ?? ?? ???? ??? ?? ???? ??? ??
??
???? ?????? ???? ??.
??? ???? ????
???? ?? ?? ?? ??
?? ???
? = ? + ?? , ? a? ??? b, ???? t? ?? ? p? ???? ?. t? ?? p? ????
??
t = [0,1]? ???? a?? a+b? ?? ??? ??.
??? ???
? = ? + ?? + ?? , ????? ? c? ??? d, e ???? u,v? ??? ? ??.
q? ? ? c, c+d, c+e? ??? ??? ????.
? ?, u,v? [0, 1] ??? ???? ?????? ?? u+v<1? ??? ???? ????
??.
?? ??
? ??? ??? ???? ?? ??? ???!
? + ?? = ? + ?? + ??
?? ????? x,y,z? ??? ?? ?? ??? ??? t,u,v? ?? ? ??
??? ???? ??(??? ?? 0? ????? )? ???? ?? ??? ??
?? ??? ??? ???? ? ?? ??
??? ???? ????
?? ?? ?? (??)
1. ? ?? ??? ?? ?? ? p? ??? ???? ? ? ? ??? ?c? ?p? ??? ??
? ??? normal ??? ???? ???? ? p? ??? ??? ??? ???? t? ??
? ? t? [0,1]???? ?????? ??? ??? ?? ??? ? ??.
2. ???? ? ?? d,e?? ??? ???? ???? ????? u,v ? ? ?? ??? ?
?? ?? p? ?????? ?????? ??? ????.
??? ???? ????
< ?? ??? ???(? ?)? ??? ????? ? ?,
???? ???? ??, t? [0,1] ??? ???? ?
??, ???? ?? ??????? ? ???? ???
? ????? ??? ???? ???.>
? = ? + ?? + ?? ?
? ? ? = ?? + ?? ? ???? (??? p-c
? ? ??? ? ???) ?? d, e ???
?? ?????? u,v? ?? ? ??.
u+v<1??? ??? ?? ?? ??? ?
?? ? ??.
??? ??
u, v? 0 ?? 1??? ? ???? ???? ?? ?? ? ??. ??? ? ??? ?? ??
? ?? ?? ?????? ???? ?? ?????
????? ??? ? ?????? ? ?? ??? ? ??.
??? ???? ????
?? ??? ?? ??? ???
??? 1600?? ?? ??? ??? ?? ?? ??? ?? ??
?? ??? 128? ? ????? ?? ??? 4000? ???? ????.
?? ??? ?? ??? ? ??? ?? ??? ??? 320?? 1? ??? ?.
????? ???? ????? ??? ??? ?? ??? ???? ?? ? ??.
??? ?? ?? ??
0
1
2
3
4
< ?? ?? ?? ??? ? ? ??? ?? ????? ??? 4+3+2+1=10??.
?!
?!?!
?? ??. >
? ?? ???? ???? ??
? ? ???? ??? ?? ???? ?? 0,1 ? ?? 3,2,4 ? ?? ? ??? ???. 1+3
?? 4?? ??????? ????.
??? ??? ?? ??
??? ?? ?? ???? ?? ??? ??? ?? ?? ??? ?? ? ?? ? ???? ?
?? ?.
??? ?? 0? 1 ?? 2? ?? 3,4 ?? ?? 2?? ??????? ????.
??? ??? ?? ??? ? ?? ?? ?? ?? ??? ??? ?? ??? ???.
??? ?? ?? ??
< ??? ??? ?? >
0
1
2
3
4
0
1
2
3
4
< ???? ?? >
0 1 3 2 4
? ?? ???? ???? ??
??? ?? ??? ???? ?? ?????? ??? ? ??.(?? ? ?? ???..)
??? ?? ?? ? ?? ? ? ???? ????.
?? ??? ?? ?? ?? ? ????? ??? ???.
? ?? ??? ??? ? ??? ?? ??? ??? ? ??.
if (????.) {
????
?????.
} else if (?????.) {
if (?? ?? ??.) { ???? ?? ?????.}
else if (?? ???.) { ????.}
}
??? ?? ?? ??
< ? 2? ????? ?? ?? [1? ????? ?? ? ???? ???? ?? 1]? ??? ????? ??
??. 0]? ?? ????? ???? ??? ???? ??? ?? ???. >
[0 0]
[1 1]
[2 2]
[3 3]
? ?? ???? ???? ??
?? ??? ??? ?? ?? ? ??? O(N2)? ???? ? ?? ? ?? ?? ???? ?
?? ???? ?? ?? ???? ??? ? ?? ??. ??? ?? ???? ?? ?? ??
?? ?? ?? ?????? ??? ?? ???? ??? ??? ?? ??? ? ? ??.
? ? ?? ??? ???? ? ?? ??? ???, ??? ??? ?? O(N)??? ????
????? ????? ?? ??? ? ? ?? ???.
??? ?? ?? ??
??? ??? ?? ?? (?? ??)
xyz ?? ??? ???? ??? ?? ?, ? ??? ?? ??? ???? ? ???? ??
?? ????? ?? ????. ??? ??? ?? ??? ??? ???. (? ??? ???
? ??? ???? ???? 3?? ????? ?? ?? ?? ?? 6? ???? ?? ??.)
?? ?? ??? ??? ? ??? ????? ?? ????? ?? ??? std::list? ??
? ?? ?? new?? ??? ?? ??? ??? ??? ??. ??? ???? ???? ?
??? ???? ???? ??? ? ??? ??? ??? ?? ?????? ??? ?? ?
??.
?? ???? ? ?? ???? ??, ? ??? ???? ?? ?? ?? ?? ??? ???
? ??? ??? ???? ????? ?? ??? ?? ?? ??? ??? ??? ??? ?
? O(N2)? ??.
?? ?? ??? ??? ??(?? ?)?? ???? ?? ??? ??.
??? ?? ?? ??
< ??? ?? ??? ??? ??> < ???? ? ??? ??? ??>
0 1 3
0
1
23
4
??? ??? ?? ?? (??? ?? ??)
K-d tree : ????? ??? ?? ? ?? ???? ? ???? xyz? ? ??? ????
??
1. ?? ??? ???? ? ??? ??? ?? ??
2. ?? ??? ???? xy? ?? ??? ???? ??
3. ?? ??? ? ? ??? ??? ???.
4. ?? ??? ?? 2?? ??
??? ????? ??? ???? ?? ??? ?? ??? ???? ????? ??? ?
?? ??? ??? ?? ??.
??? ?? ?? ??

More Related Content

??????

  • 2. ?? ?????? ?? chapter 18 ???? ?? ?? ? ?? ?? ??? ??? ?? ?? chapter 22 ??? ?? ?? ?? ??
  • 3. ????? ????? ?? ?? ????? Cuboid ?? ???? ???? class Cuboid { int mX, mY, mZ; // ????? ?? int mHalfSizeX, mHalfSizeY, mHalfSizeZ; // ? ?? ?? / 2 bool isIntersect ( const Cuboid& b) } ?? ?????? ???? ?? isIntersect()? ????? ?????? ?? ??? ?? ??. ? ??? ????? ???? ?? ????? ??? ????, ?? ? ????? ?? ? ?? ?? ???? ???? ??. ???? ???? < 2???? ???? x??? ?????? ?? ? ? y?? ?????? ????? ? >
  • 4. ??? ?? ?? X?, Y?, Z?? ?? ??? ???? ??. (???? ? ?? ??? ????? ?? ?? ????) ??? ??? ?? ??, x, y, z, xy, yz, xz ? ?? ?? ??? ?? ??? ?? ??.(xyz? ???) * ?? ?? 1. object?? ?? ??? ?? 2. ?? frame??? ??? ?? 3. ???? ????? ??? ???, ??? ?? ????? ??? ?? ???? ?? ??? ?? ??? ???. ?? ??? ??? ????? ???. (??? ???? ?? ?????? ???? ???? ??? ?) ???? ???? x z x z x z < y? ?? ??? ???? ¨Cy? ???? ? ?. ?? ??? ??? ???? ?? ???? ???? >
  • 5. ?? ?? ?? ?? ? ?? ????? ??? ??? ??? ?? ??? ??? ??. ????? ??? ???? ? ? ??!! ? ???? < ? ??? >
  • 6. ?? ?? ?? ?? ?? ?? ?? ? ??? ?? ???? ??? ???? ??. ?? ????? v???? ? ? ??? ?? ??? ??, ????? a? ???? ?? ????. ?? ???? a??? v???? d??? ?? ?? ? ??. d??? v * cos ? ? ??? ?? ? ?? cos ?? ?? ??? ? |?| ?? ?? ? ??. ? ?? ???? ??? ?? ?? ?? ?????? ?? ??? ??? ??? ?? ??? ?. ? ???? < ? ??? ? ??? ?? ? > ? = ? ? ? ? ? ? = ? ? ? ? ? |?| ? cos ?
  • 7. ??? ??? ??? ?? ????? ????? ???? ?????? ??? ????? ?? ?? ?? ???. ??? ?????? object? ?? ????, ??? ? ?? ??? ???? ?? ?? ?? ??? ??. ??? ? ??? ?? ? ?? ?? ? ?? ?? ???? ??? ?? ???? ??? ?? ?? ???? ?????? ???? ??. ??? ???? ????
  • 8. ???? ?? ?? ?? ?? ?? ??? ? = ? + ?? , ? a? ??? b, ???? t? ?? ? p? ???? ?. t? ?? p? ???? ?? t = [0,1]? ???? a?? a+b? ?? ??? ??. ??? ??? ? = ? + ?? + ?? , ????? ? c? ??? d, e ???? u,v? ??? ? ??. q? ? ? c, c+d, c+e? ??? ??? ????. ? ?, u,v? [0, 1] ??? ???? ?????? ?? u+v<1? ??? ???? ???? ??. ?? ?? ? ??? ??? ???? ?? ??? ???! ? + ?? = ? + ?? + ?? ?? ????? x,y,z? ??? ?? ?? ??? ??? t,u,v? ?? ? ?? ??? ???? ??(??? ?? 0? ????? )? ???? ?? ??? ?? ?? ??? ??? ???? ? ?? ?? ??? ???? ????
  • 9. ?? ?? ?? (??) 1. ? ?? ??? ?? ?? ? p? ??? ???? ? ? ? ??? ?c? ?p? ??? ?? ? ??? normal ??? ???? ???? ? p? ??? ??? ??? ???? t? ?? ? ? t? [0,1]???? ?????? ??? ??? ?? ??? ? ??. 2. ???? ? ?? d,e?? ??? ???? ???? ????? u,v ? ? ?? ??? ? ?? ?? p? ?????? ?????? ??? ????. ??? ???? ???? < ?? ??? ???(? ?)? ??? ????? ? ?, ???? ???? ??, t? [0,1] ??? ???? ? ??, ???? ?? ??????? ? ???? ??? ? ????? ??? ???? ???.> ? = ? + ?? + ?? ? ? ? ? = ?? + ?? ? ???? (??? p-c ? ? ??? ? ???) ?? d, e ??? ?? ?????? u,v? ?? ? ??. u+v<1??? ??? ?? ?? ??? ? ?? ? ??.
  • 10. ??? ?? u, v? 0 ?? 1??? ? ???? ???? ?? ?? ? ??. ??? ? ??? ?? ?? ? ?? ?? ?????? ???? ?? ????? ????? ??? ? ?????? ? ?? ??? ? ??. ??? ???? ????
  • 11. ?? ??? ?? ??? ??? ??? 1600?? ?? ??? ??? ?? ?? ??? ?? ?? ?? ??? 128? ? ????? ?? ??? 4000? ???? ????. ?? ??? ?? ??? ? ??? ?? ??? ??? 320?? 1? ??? ?. ????? ???? ????? ??? ??? ?? ??? ???? ?? ? ??. ??? ?? ?? ?? 0 1 2 3 4 < ?? ?? ?? ??? ? ? ??? ?? ????? ??? 4+3+2+1=10??. ?! ?!?! ?? ??. >
  • 12. ? ?? ???? ???? ?? ? ? ???? ??? ?? ???? ?? 0,1 ? ?? 3,2,4 ? ?? ? ??? ???. 1+3 ?? 4?? ??????? ????. ??? ??? ?? ?? ??? ?? ?? ???? ?? ??? ??? ?? ?? ??? ?? ? ?? ? ???? ? ?? ?. ??? ?? 0? 1 ?? 2? ?? 3,4 ?? ?? 2?? ??????? ????. ??? ??? ?? ??? ? ?? ?? ?? ?? ??? ??? ?? ??? ???. ??? ?? ?? ?? < ??? ??? ?? > 0 1 2 3 4 0 1 2 3 4 < ???? ?? > 0 1 3 2 4
  • 13. ? ?? ???? ???? ?? ??? ?? ??? ???? ?? ?????? ??? ? ??.(?? ? ?? ???..) ??? ?? ?? ? ?? ? ? ???? ????. ?? ??? ?? ?? ?? ? ????? ??? ???. ? ?? ??? ??? ? ??? ?? ??? ??? ? ??. if (????.) { ???? ?????. } else if (?????.) { if (?? ?? ??.) { ???? ?? ?????.} else if (?? ???.) { ????.} } ??? ?? ?? ?? < ? 2? ????? ?? ?? [1? ????? ?? ? ???? ???? ?? 1]? ??? ????? ?? ??. 0]? ?? ????? ???? ??? ???? ??? ?? ???. > [0 0] [1 1] [2 2] [3 3]
  • 14. ? ?? ???? ???? ?? ?? ??? ??? ?? ?? ? ??? O(N2)? ???? ? ?? ? ?? ?? ???? ? ?? ???? ?? ?? ???? ??? ? ?? ??. ??? ?? ???? ?? ?? ?? ?? ?? ?? ?????? ??? ?? ???? ??? ??? ?? ??? ? ? ??. ? ? ?? ??? ???? ? ?? ??? ???, ??? ??? ?? O(N)??? ???? ????? ????? ?? ??? ? ? ?? ???. ??? ?? ?? ??
  • 15. ??? ??? ?? ?? (?? ??) xyz ?? ??? ???? ??? ?? ?, ? ??? ?? ??? ???? ? ???? ?? ?? ????? ?? ????. ??? ??? ?? ??? ??? ???. (? ??? ??? ? ??? ???? ???? 3?? ????? ?? ?? ?? ?? 6? ???? ?? ??.) ?? ?? ??? ??? ? ??? ????? ?? ????? ?? ??? std::list? ?? ? ?? ?? new?? ??? ?? ??? ??? ??? ??. ??? ???? ???? ? ??? ???? ???? ??? ? ??? ??? ??? ?? ?????? ??? ?? ? ??. ?? ???? ? ?? ???? ??, ? ??? ???? ?? ?? ?? ?? ??? ??? ? ??? ??? ???? ????? ?? ??? ?? ?? ??? ??? ??? ??? ? ? O(N2)? ??. ?? ?? ??? ??? ??(?? ?)?? ???? ?? ??? ??. ??? ?? ?? ?? < ??? ?? ??? ??? ??> < ???? ? ??? ??? ??> 0 1 3 0 1 23 4
  • 16. ??? ??? ?? ?? (??? ?? ??) K-d tree : ????? ??? ?? ? ?? ???? ? ???? xyz? ? ??? ???? ?? 1. ?? ??? ???? ? ??? ??? ?? ?? 2. ?? ??? ???? xy? ?? ??? ???? ?? 3. ?? ??? ? ? ??? ??? ???. 4. ?? ??? ?? 2?? ?? ??? ????? ??? ???? ?? ??? ?? ??? ???? ????? ??? ? ?? ??? ??? ?? ??. ??? ?? ?? ??