私は今、しばらくの間、これをいじってきたし、実際に働いた人はいません。ここでOPと同じように動作するC#関数があります.OP以外であれば、他の人が私のようにグーグルになります。
これを理解するのは頭痛でした。典型的な推測の多く。
bool PointIsInRotatedRectangle(Vector2 P, Rectangle rect, float rotation)
{
Matrix rotMat = Matrix.CreateRotationZ(-rotation);
Vector2 Localpoint = P - (rect.Location).ToVector2();
Localpoint = Vector2.Transform(Localpoint, rotMat);
Localpoint += (rect.Location).ToVector2();
if (rect.Contains(Localpoint)) { return true; }
return false;
}
ここでは1行のコードです。おそらくより速く使用する。
bool PointIsInRotatedRectangle(Vector2 P, Rectangle rect, float rotation)
{
if (
rect.Contains(Vector2.Transform(P - (rect.Location).ToVector2(), Matrix.CreateRotationZ(-rotation)) + (rect.Location).ToVector2())
) { return true; }
return false;
}
矩形は、原点、左上隅、または他の任意の点について回転していますか? – outis