从2个点和宽度获取矩形

时间:2011-10-21 20:32:12

标签: .net math

  

可能重复:
  Drawing rectangle between two points with arbitrary width

我有以下

RectangleF GetRectangleFrom2PointsAndWidth(Point p1, Point p2, int width)

enter image description here

如何实施? (点位于图片中间线的末尾。)

2 个答案:

答案 0 :(得分:2)

首先,找到中间线的斜率。称之为m。问题:中间线可能是垂直的。这可能会导致问题。因此,而是计算点P1和P2之间的deltaX(X的变化)和deltaY(Y的变化)。将这两个数字视为给你一个“方向”是解决这个问题的关键。

要制作矩形的角,您需要在垂直方向上从点1移动。垂直方向由-1/m给出。为了避免被0除以的危险,更好的思考方法是,每次沿Y方向移动-deltaY时,您希望{X}方向移动deltaX

您需要规范化-deltaYdeltaX给出的“方向”。为此,找到P1和P2之间的距离。我将这段距离称为D。现在您要执行以下操作:

  • 对于第一个角,从P1开始,沿x方向移动-deltaY / Dwidth/2。向{y}方向移动deltaX / Dwidth/2

  • 对于第二个角,从P1开始,沿x方向移动-deltaY / D-width/2。向{y}方向移动deltaX / D-width/2

  • 对于第三个角,从P2开始,沿x方向移动-deltaY / Dwidth/2。向{y}方向移动deltaX / Dwidth/2

  • 对于第四个角,从P2开始,沿x方向移动-deltaY / D-width/2。向{y}方向移动deltaX / D-width/2

祝你好运!我们在这里使用的是一个 vector ,但我在上面的答案中的语言有点尴尬,因为我在编写时避免使用几乎所有的向量语言。 “normalize”这个词滑进去了。期待大学里的一个名为“线性代数”的课程,这将使你成为这个问题的专家。

答案 1 :(得分:1)

你做不到。 Rectangle类只能保存与x和y轴平行的矩形。