检查Vector2是否在Rectangle内的最佳方法是什么?
myRect.contains(myVector2)不起作用,因为它需要一个Point或一个Rectangle。
我知道我可以将Vector2转换为Point或甚至是大小为1/1的Rectangle,但我不确定性能。
您有什么经历?
答案 0 :(得分:4)
Contains
结构的Rectangle
的重载版本之一,采用X和Y坐标。
Rectangle rect = new Rectangle(-5, -5, 10, 10);
Vector2 myVector2 = Vector2.Zero;
rect.Contains((int)myVector2.X, (int)myVector2.Y)
我假设你在谈论代表一个点而不是一个距离或方向的myVector2
。
答案 1 :(得分:1)
虽然在施法中可能会有额外的执行时间与创建像Point这样的点(myVector2.X,myVector2.Y),但这种影响很可能太小而你无法注意到(通常应避免过早优化)
选择看起来最干净,更容易维护的东西。如果是我,我可能只是在方法调用中创建新点......
您也可以编写扩展方法。
public static Point Origin(this Vector2 v)
{
//original proposal
//return new Point( (int)v.X, (int)v.Y );
//better! does correctly round the values
return new Point( Convert.ToInt32(v.X), convert.ToInt32(v.Y));
}
然后你可以做这样的事情rect.Contains(vec.Origin)
要记住的事情:这个方法实际上不会检查向量是否包含在矩形中,这只会检查原点是否存在。请记住,矢量的方向是和幅度。