2011-12-12 4 views
1

두 개의 직사각형의 교차에 의해 정의 된 직육면체를 반환하는 내 Cuboid 클래스의 메소드를 작성하고 싶습니다.두 직육면체의 교점을 계산하는 방법

직육면체는 원점과 종점이 모든 차원에서 반드시 양의 값을 갖도록 원점과 끝점으로 내부적으로 표현됩니다.

시작 지점 (아마도 도움이되지 않을 수도 있음)으로 다음 두 가지 직사각형이 교차하는지 여부가 루비의 다음 메소드에 의해 결정됩니다. ... 어떤 아이디어를

def intersects? other_cuboid 
    return not(self.top < other_cuboid.bottom || 
       self.bottom > other_cuboid.top || 
       self.left > other_cuboid.right || 
       self.right < other_cuboid.left || 
       self.front < other_cuboid.back || 
       self.back > other_cuboid.front)  
end 

은 직관적으로는이 문제에 상당히 인색 솔루션이 있어야한다 보인다하지만 난 그것을 생각할 수 없다?

참고 : 직육면체가 반드시 축

+0

투표 닫으십시오. Cuboid 생성자 메서드가 어떤 매개 변수를 사용하는지 알지 못하면 어떻게 Cuboid의 새 인스턴스를 반환해야합니까? – sawa

+1

"직육면체"는 항상 축 방향으로 정렬됩니까? – andand

답변

1

로는 직육면체의 당신의 정의이 기준의 최초의 선택에 따라 달라 괜찮 정렬?

모든 직육면체가 원점에서 시작하여 각 축의 양의 방향으로 이동하면 각 방향의 모든 좌표가 최소가 아닌 교차가됩니까? 즉 intersection = min (left1, left2), min (right1, right2) 등등. 여러분의 직육면체가 무엇인지, 아니면 여러분이 원했던 부분을 정확히 이해하고 있는지 확신 할 수 없습니다.

(그들이 당신의 정의에서있는 것처럼 보이는) 당신의 직육면체가 각각의 방향으로 정렬하는 경우 또는

, 다음, 당신은 새 입방을 수행 할 수 있습니다 등

bottom = max(bottom1, bottom2) 
top = min(top1, top2) 
left = right_most(left1, left2) 

...

관련 문제