【发布时间】:2013-03-03 06:23:16
【问题描述】:
我目前有代码,当用户单击多个锚点时,该代码会根据鼠标移动调整矩形的大小,这些锚点对应于以下区域:Left、Top、Right、Bottom、TopLeft、TopRight、BottomLeft、BottomRight。
因此用户可以单击并拖动顶部锚点,它将根据鼠标所在的位置调整矩形的顶部坐标。其他所有锚点都一样。
事实上,我想通过根据动作捕捉矩形的适当边来强制执行固定比例(例如 2:3 或 5:7)。我已经为左、上、右和下锚做了这个,因为它很容易,如果我调整宽度,我只需要根据比例自动调整高度,反之亦然。
我遇到的困难是当用户拖动一个角时,例如右下角或左上角锚点。我需要弄清楚如何选择拍摄哪一面。我有鼠标坐标和矩形的左上右下。
这是我尝试过的代码:
case Anchor.BottomRight:
float maxRight = CursorPosition.X;
float maxBottom = CursorPosition.Y;
float newRight = Bounds.Left + (Bounds.Width * widthRatio);
float newBottom = Bounds.Top + (Bounds.Height * heightRatio);
if (newRight < maxRight)
{
Width = Height * widthRatio;
}
else
{
Height = Width * heightRatio;
}
break;
在 2:3 的固定比率示例中,widthRatio 为 0.666,heightRatio 为 1.5。
这段代码有一半的时间可以工作,但当然它基本上是 50/50 的工作机会。我必须确定一个合适的条件来捕捉宽度或高度。
【问题讨论】:
标签: c# .net math aspect-ratio