2010-07-06 5 views
3

현재이 문제에 대해 전체적으로 공백이 있습니다.3d 벡터와 큐브의 교차 위치

중심점과 너비, 높이 및 깊이 1로 정의되는 입방체 (보셀)가 있습니다. 상자 중심에서 원점을 가진 벡터가있는 경우 (예 : -0.7, - 0.7, -0.7)) 벡터가 상자 외부와 교차하는 점은 어떻게 계산합니까?

편집 : 상자는 항상 축에 정렬됩니다. 문제는 3d입니다.

감사

+0

(이해하지 못하는 죄송합니다)는 큐브의 얼굴을 교차 경우 확실히 당신은 알 수 없다 :이 같은

뭔가 작동 할 수 있습니다. –

+0

Liang-Barsky 알고리즘을 사용하고 싶습니다. 참조 : http://en.wikipedia.org/wiki/Liang%E2%80%93Barsky 및 http://www.siggraph.org/education/materials/HyperGraph/scanline/clipping/cliplb.htm – jts

+0

죄송합니다. 2D에서 먼저 작업 한 다음 3D로 변경하려고했습니다. 3D 벡터 여야합니다. – paintstripper

답변

2

이됩니다 상자의 표면에 어떤 점에서 적어도 하나의 0.5 -0.5에 동일하게 조정하고 다른 모든 -0.5 < = C < = 0.5이 될 것입니다.

따라서 절대 값이 가장 큰 좌표를 찾은 다음 해당 벡터가 +/- 0.5와 같도록 벡터를 조정합니다. 당신의 상자가 3D하지만 당신의 벡터가 2D 인 경우,

if (fabs(x) > fabs(y) && fabs(x) > fabs(z)) 
    y *= 0.5/fabs(x) 
    z *= 0.5/fabs(x) 
    x *= 0.5/fabs(x) 
else if (fabs(y) > fabs(z)) 
    x *= 0.5/fabs(y) 
    z *= 0.5/fabs(y) 
    y *= 0.5/fabs(y) 
else 
    x *= 0.5/fabs(z) 
    y *= 0.5/fabs(z) 
    z *= 0.5/fabs(z) 
+0

이것은 벡터가 정규화되었다고 가정합니까? – paintstripper

+0

아니요. 정규화 할 필요가 없습니다. –

+0

좋습니다. 작동하는 것 같습니다. 멋지고 단순합니다 - 고마워요, 제가 정확히 필요한 것입니다. – paintstripper

관련 문제