Rectangle
축이 정렬되어 있다는 것을 알고 있습니다. 좋습니다. 사각형을 만드는 방법을 알 수 없으므로 회전에 관계없이 항상 전체 스프라이트를 포함합니다. 나는 모든 곳에서 답을 찾고 있었지만 어디에서도 똑 바른 답을 얻을 수 없습니다.
예를 들면 :
원점이 텍스처의 중간이라고 가정하면 어떻게해야합니까?
편집하다
조금만 꼼꼼히 살펴보면 여기까지 왔습니다.
public Rectangle BoundingBox
{
get
{
var cos = Math.Cos(SpriteAngle);
var sin = Math.Cos(SpriteAngle);
var t1_opp = Width * cos;
var t1_adj = Math.Sqrt(Math.Pow(Width, 2) - Math.Pow(t1_opp, 2));
var t2_opp = Height * sin;
var t2_adj = Math.Sqrt(Math.Pow(Height, 2) - Math.Pow(t2_opp, 2));
int w = Math.Abs((int)(t1_opp + t2_opp));
int h = Math.Abs((int)(t1_adj + t2_adj));
int x = Math.Abs((int)(Position.X) - (w / 2));
int y = Math.Abs((int)(Position.Y) - (h / 2));
return new Rectangle(x, y, w, h);
}
}
너무 늦어서 미안하지만 얼마 전에 이것을 알아 냈고 답변을 게시하는 것을 잊었습니다.
public virtual Rectangle BoundingBox
{
get
{
int x, y, w, h;
if (Angle != 0)
{
var cos = Math.Abs(Math.Cos(Angle));
var sin = Math.Abs(Math.Sin(Angle));
var t1_opp = Width * cos;
var t1_adj = Math.Sqrt(Math.Pow(Width, 2) - Math.Pow(t1_opp, 2));
var t2_opp = Height * sin;
var t2_adj = Math.Sqrt(Math.Pow(Height, 2) - Math.Pow(t2_opp, 2));
w = (int)(t1_opp + t2_opp);
h = (int)(t1_adj + t2_adj);
x = (int)(Position.X - (w / 2));
y = (int)(Position.Y - (h / 2));
}
else
{
x = (int)Position.X;
y = (int)Position.Y;
w = Width;
h = Height;
}
return new Rectangle(x, y, w, h);
}
}
여기입니다. 편집에서 내 작품에서 나는 실수했다 Math.Cos
에 sin
도움이되지 않았다 변수.
그래서 그것은 기본적인 삼각법입니다. 텍스처 각도가 0이 아닌 경우 너비와 높이로 형성된 두 삼각형의 변을 계산하고 변을 너비와 높이 값으로 사용한 다음 사각형을 텍스처 중심에 배치합니다. 그게 말이된다면.
설명하는 데 도움이되는 사진은 다음과 같습니다.
다음은 최종 결과의 gif입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다