从 2 个点和一个宽度获取一个矩形 [重复]

Posted

技术标签:

【中文标题】从 2 个点和一个宽度获取一个矩形 [重复]【英文标题】:Obtain a rectangle from 2 points and a Width [duplicate] 【发布时间】:2011-10-21 20:32:12 【问题描述】:

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

我有以下

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

如何实现? (点位于图片中线的末端。)

【问题讨论】:

请看这个非常相似的问题:***.com/questions/7854043/… @Krom:我想使用 sqrt 不是很理想...? 不重复!也许克罗姆回答了,但问题是另一个问题!答案甚至不在 .NET 中...... 两个毕达哥拉斯 c^2 = a^2 + b^2 计算和一些添加以“构造”剩余两个点的新坐标。尝试先使用铅笔和纸。 所以你有 Point1、Point2 和 Width。你需要做一个矩形。为什么不是一个非常相似的问题?还有你怎么不能用.Net写数学代码? 【参考方案1】:

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

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

您需要标准化-deltaYdeltaX 给出的“方向”。为此,请找出 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

祝你好运!我们在这里使用的称为 vector,但我在上述答案中的语言有点尴尬,因为我在编写它时避免使用几乎所有的向量语言。 “规范化”这个词溜进来了。期待大学里的一门叫做“线性代数”的课,它会让你成为这个问题的专家。

【讨论】:

谢谢,伙计,不过,我只是一个懒惰的程序员,而不是愚蠢的白痴))+1 我不太明白你在这里的评论。我是否在某个地方暗示过你是个白痴? ://【参考方案2】:

你不能。 Rectangle 类只能包含平行于 x 和 y 轴的矩形。

【讨论】:

原样,问题的“来源”:***.com/q/7856150/185593

以上是关于从 2 个点和一个宽度获取一个矩形 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何判断一个点在一个矩形里边,一直点和矩形的坐标点位置。

当文本在高度上溢出div时如何显示3个点[重复]

没有重复的盒子堆叠

调用函数时如何取消绘制矩形[重复]

HDU 2295 舞蹈链可重复覆盖+二分

特征类型和图像分割