2016-06-18 4 views
0

현재 내 프로그램에서는 사각형 격자의 사각형을 왼쪽 위 모서리로 정의했습니다. 정의를 변경하여 정사각형이 중심으로 정의되도록하고 싶습니다. 그러나 사각형의 X 및 Y 값은 반드시 라운드 숫자 여야합니다.점이있는 정사각형의 중심 찾기

점이되어 정방형의 상부 좌측 코너를 발견하기위한 방법

public Vector2 InSquare(Vector2 vector) 
{ 
    int x = (int)vector.X, y = (int)vector.Y;//floor of vector coordinates 
    x -= x % SquareSize; 
    y -= y % SquareSize; 
    return new Vector2(x, y); 
} 

SquareSize int 형식의 속성된다 (그것은 홀수하고있다). Vector2는 float X 및 Y 속성이있는 XNA 벡터입니다. SquareSize는 사각형의 가장자리 길이입니다.

정사각형의 정의를 중심점으로 변경할 수 있지만 중심점을 둥근 좌표로 유지하려면 어떻게해야합니까?

감사를

은 (는 이해하기 XNA 경험을 필요로하지 않기 때문에 나는 XNA로이 질문에 태그를하지 않았다).

는 편집 : 내가해야 할 노력은 무엇

는 균일 한 사각형 격자와 게임의 수준을 표현하는 것입니다. 그리드의 사각형은 왼쪽 위 모서리에 의해 정의되었습니다. 그러나 어느 사각형이 레벨의 텍스처를 반복하여 차단되었는지, 각 점에 행렬을 적용한 다음 점이있는 사각형을 차단했는지, 왼쪽 위 모서리로 정의 된 사각형은 각 차단 된 사각형이 약간 벗어 났음을 의미합니다. 그것이 예정되었던 곳에서 왼쪽으로. 각 정사각형을 중심점으로 정의하면 장애물이있는 위치에 가까운 각 정사각형을 가질 수 있습니다.

문제가 더 잘 설명되기를 바랍니다.

그/그녀의 대답에 대해 고맙습니다. 현재 방법 :

public Vector2 InSquare(Vector2 vector) 
    { 
     float x = vector.X, y = vector.Y;//floor of vector coordinates 
     x -= x % SquareSize - (SquareSize/2); 
     y -= y % SquareSize - (SquareSize/2); 
     return new Vector2(x, y); 
    } 

저는 Square 크기를 float로 변경했습니다.

+3

난 정말 당신이 달성하려고 무엇을 이해하지 못하고는, 할 수있다 당신은 질문을 다시 형식화하는데 약간의 노력을 기울여야합니까? –

+0

포인트는 정수일 수 있지만 PointF는 부동 소수점 숫자 일 수 있습니다. – jdweng

+0

@WillemVanOnsem 불쌍한 질문을 보내서 유감입니다. 나는 졸리면서 스트레스를 받으면서 그것을 썼다. 그리고 다시 그것을함으로써 누군가의 시간을 낭비하지 않을 것이다. – user1461837

답변

1

사각형의 길이가 SquareSize 인 경우 SquareSize의 절반이 정확한 중간입니다. SquareSize가 홀수 인 경우

public Vector2 InSquare(Vector2 vector) 
{ 
    int x = (int)vector.X, y = (int)vector.Y;//floor of vector coordinates 
    x -= x % SquareSize - (SquareSize/2); 
    y -= y % SquareSize - (SquareSize/2); 
    return new Vector2(x, y); 
} 

그러나 정수로 광장의 정확한 중심을 저장할 수 없습니다. SquareSize/2의 결과는 실제 센터보다 0.5 작은 것입니다.

(예를 들어, 2분의 9 = 4)

당신이 정확한 좌표를 필요로하는 경우, 대신에 정수의 플로트 변수를 사용하는 것이 좋습니다 또는 사각형의 모서리 가리키는 좌표를 유지한다.

편집 : 당신은 여전히 ​​쉽게 광장의 모든면의 위치를 ​​계산하기에 충분히 좋은 얻을 다운 반올림 번호 :

int left = x - (SquareSize/2); 
int top  = y - (SquareSize/2); 
int right = left + SquareSize; 
int bottom = top + SquareSize; 
+0

저는 솔루션을 수정하고 SquareSize를 int로 변경했습니다. 메모리가 어쨌든 내 현재 문제가 아닙니다. 고맙습니다! – user1461837