2014-03-05 3 views
0

그래서 pyglet (opengl)을 사용하여 파이썬에서 약간의 프로젝트를하고 있습니다. 화면의 한 점을 클릭하면 좌표에서 동일하게 확장되는 Square가 생성됩니다.사각형이 다른 사각형에 포함되어 있는지 확인하십시오.

예를 들어 (100,100)을 클릭하면 변의 길이가 3 인 (99,99)에서 정사각형이 그려집니다. 왼쪽 하단의 점은 각 세대와 (-1, -1) 길이가 2 씩 증가합니다.

내가 원하는 것은 정사각형이 창 테두리 밖에 있는지 감지하여 사각형 모음에서 삭제할 수있는 방법입니다.

지금 내가하고있는 일은 모든 모서리가 창 안에 있는지 확인하는 것입니다.하지만이 작업을 수행하는 더 좋은 방법이 있어야합니까? 나는 측면 길이, 광장의 중심과 하단 왼쪽 지점을 처리 할 수 ​​있습니다.

여기 제 사각형 클래스입니다.보고있는 메소드는 in_bounds 메소드입니다. 지금은 사실로 돌아가고 있습니다. 이전에는 각 코너를 계산했지만 길이가있는 단일 포인트를 사용하는 것이 더 낫다고 생각했습니다.

class Square: 

    def __init__(self, x, y, x_max, y_max): 
     self.center = (x,y) 
     self.point = (x-1, y-1) 
     self.length = 3 
     self.x_bound = x_max 
     self.y_bound = y_max 

    def next(self): 
     self.point = (self.point[0] - 1, self.point[1] - 1) 
     self.length += 2 

    def in_bounds(self): 
     return True 
     #return not (self.top_left[0] < 0 and self.top_right[0] > self.xbound and self.bot_left[1] < 0 and self.top_left[1] > self.ybound) 

편집 : 내 경계는 직사각형입니다.

답변

1

3 단계로만 할 수 있습니다. 경계 안쪽에 포인트가 있으면 (위 왼쪽), 오른쪽 상단 점이 양수 x 방향의 경계를 초과하지 않고 왼쪽 하단 점이 음수 y 방향을 초과하지 않는지 확인할 수 있습니다.

이것은 경계가 정사각형이라고 가정합니다. 네 번째 점은 이미 측정 된 점의 길이 (x, y)를 초과 할 수 없습니다.

+0

죄송합니다. 내 경계가 사각형임을 잊어 버려서 죄송합니다. – Igglyboo

+0

그건 괜찮을거야. 모든 사각형은 직사각형입니다. 따라서 사각형이 한 모서리에서 경계선의 값을 초과하면 다른 모서리에 나타납니다. 나는 더 일반적 이었음에 틀림 없다. – sten

관련 문제