현재이 문제에 대해 전체적으로 공백이 있습니다.3d 벡터와 큐브의 교차 위치
중심점과 너비, 높이 및 깊이 1로 정의되는 입방체 (보셀)가 있습니다. 상자 중심에서 원점을 가진 벡터가있는 경우 (예 : -0.7, - 0.7, -0.7)) 벡터가 상자 외부와 교차하는 점은 어떻게 계산합니까?
편집 : 상자는 항상 축에 정렬됩니다. 문제는 3d입니다.
감사
현재이 문제에 대해 전체적으로 공백이 있습니다.3d 벡터와 큐브의 교차 위치
중심점과 너비, 높이 및 깊이 1로 정의되는 입방체 (보셀)가 있습니다. 상자 중심에서 원점을 가진 벡터가있는 경우 (예 : -0.7, - 0.7, -0.7)) 벡터가 상자 외부와 교차하는 점은 어떻게 계산합니까?
편집 : 상자는 항상 축에 정렬됩니다. 문제는 3d입니다.
감사
이됩니다 상자의 표면에 어떤 점에서 적어도 하나의 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)
이것은 벡터가 정규화되었다고 가정합니까? – paintstripper
아니요. 정규화 할 필요가 없습니다. –
좋습니다. 작동하는 것 같습니다. 멋지고 단순합니다 - 고마워요, 제가 정확히 필요한 것입니다. – paintstripper
(이해하지 못하는 죄송합니다)는 큐브의 얼굴을 교차 경우 확실히 당신은 알 수 없다 :이 같은
뭔가 작동 할 수 있습니다. –
Liang-Barsky 알고리즘을 사용하고 싶습니다. 참조 : http://en.wikipedia.org/wiki/Liang%E2%80%93Barsky 및 http://www.siggraph.org/education/materials/HyperGraph/scanline/clipping/cliplb.htm – jts
죄송합니다. 2D에서 먼저 작업 한 다음 3D로 변경하려고했습니다. 3D 벡터 여야합니다. – paintstripper