2013-06-16 2 views
3

나는이 질문을 몇 번 전에 물어 봤고 이것에 관한 여러 게시물을 읽었습니다. 그러나 나는 이것이 작동하도록 고심하고있다.회전 된 사각형 안에 점이 있는지 확인

bool isClicked() 
    { 
     Vector2 origLoc = Location; 
     Matrix rotationMatrix = Matrix.CreateRotationZ(-Rotation); 
     Location = new Vector2(0 -(Texture.Width/2), 0 - (Texture.Height/2)); 
     Vector2 rotatedPoint = new Vector2(Game1.mouseState.X, Game1.mouseState.Y); 
     rotatedPoint = Vector2.Transform(rotatedPoint, rotationMatrix); 

     if (Game1.mouseState.LeftButton == ButtonState.Pressed && 
      rotatedPoint.X > Location.X && 
      rotatedPoint.X < Location.X + Texture.Width && 
      rotatedPoint.Y > Location.Y && 
      rotatedPoint.Y < Location.Y + Texture.Height) 
     { 
      Location = origLoc; 
      return true; 
     } 
     Location = origLoc; 
     return false; 
    } 
+0

이것은 텍스처에 적용된 변환을 알지 못하면 확인할 수 없습니다. 새로운 매트릭스를 만드는 것은 코드 냄새입니다. 원래 텍스처에 사용 된 행렬을 사용해야합니다. 그리고 마우스 위치를 회전시키지 말고 텍스처를 다시 회전시켜 다시 사각형으로 만듭니다. –

답변

1

나는 Location이 직사각형의 회전 중심이라고 가정합니다. 그렇지 않은 경우 적절한 그림으로 답변을 업데이트하십시오.

원하는 것은 직사각형의 로컬 시스템에서 마우스 위치를 표현하는 것입니다. Therfore, 당신은 다음 작업을 수행 할 수 있습니다 :

bool isClicked() 
{ 
    Matrix rotationMatrix = Matrix.CreateRotationZ(-Rotation); 
    //difference vector from rotation center to mouse 
    var localMouse = new Vector2(Game1.mouseState.X, Game1.mouseState.Y) - Location; 
    //now rotate the mouse 
    localMouse = Vector2.Transform(localMouse, rotationMatrix); 

    if (Game1.mouseState.LeftButton == ButtonState.Pressed && 
     rotatedPoint.X > -Texture.Width/2 && 
     rotatedPoint.X < Texture.Width/2 && 
     rotatedPoint.Y > -Texture.Height/2 && 
     rotatedPoint.Y < Texture.Height/2) 
    { 
     return true; 
    } 
    return false; 
} 

또한, 마우스는 방법의 시작 누르면 검사를 이동할 수 있습니다. 그것을 누르지 않으면, 당신은 변환 등

7

하자 포인트 P(x,y)을 계산해야하고, A(x1,y1), B(x2,y2), C(x3,y3), D(x4,y4)을 직사각형하지 않습니다.

  • △APD, △DPC, △CPB, △PBA의 면적의 합을 계산한다.
  • 이 합은 직사각형의 면적보다 큰 경우

    :

    • 이어서 P(x,y)이 직사각형 인 외부 가리.
    • 기타 또는의 사각형입니다.

만을 사용하여 계산 될 수있는 각각의 삼각형의 면적이 화학식 좌표 : 세 점을 가정

같습니다 A(x,y), B(x,y), C(x,y)한다.

Area = abs((Bx * Ay - Ax * By) + (Cx * Bx - Bx * Cx) + (Ax * Cy - Cx * Ay))/2 
관련 문제