可能重复:
Drawing rectangle between two points with arbitrary width
我有以下
RectangleF GetRectangleFrom2PointsAndWidth(Point p1, Point p2, int width)
如何实施? (点位于图片中间线的末尾。)
答案 0 :(得分:2)
首先,找到中间线的斜率。称之为m
。问题:中间线可能是垂直的。这可能会导致问题。因此,而是计算点P1和P2之间的deltaX
(X的变化)和deltaY
(Y的变化)。将这两个数字视为给你一个“方向”是解决这个问题的关键。
要制作矩形的角,您需要在垂直方向上从点1移动。垂直方向由-1/m
给出。为了避免被0除以的危险,更好的思考方法是,每次沿Y方向移动-deltaY
时,您希望{X}方向移动deltaX
。
您需要规范化-deltaY
和deltaX
给出的“方向”。为此,找到P1和P2之间的距离。我将这段距离称为D
。现在您要执行以下操作:
对于第一个角,从P1开始,沿x方向移动-deltaY / D
次width/2
。向{y}方向移动deltaX / D
次width/2
。
对于第二个角,从P1开始,沿x方向移动-deltaY / D
次-width/2
。向{y}方向移动deltaX / D
次-width/2
。
对于第三个角,从P2开始,沿x方向移动-deltaY / D
次width/2
。向{y}方向移动deltaX / D
次width/2
。
对于第四个角,从P2开始,沿x方向移动-deltaY / D
次-width/2
。向{y}方向移动deltaX / D
次-width/2
。
答案 1 :(得分:1)
你做不到。 Rectangle
类只能保存与x和y轴平行的矩形。