从 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
。
您需要标准化-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
。
祝你好运!我们在这里使用的称为 vector,但我在上述答案中的语言有点尴尬,因为我在编写它时避免使用几乎所有的向量语言。 “规范化”这个词溜进来了。期待大学里的一门叫做“线性代数”的课,它会让你成为这个问题的专家。
【讨论】:
谢谢,伙计,不过,我只是一个懒惰的程序员,而不是愚蠢的白痴))+1 我不太明白你在这里的评论。我是否在某个地方暗示过你是个白痴? ://【参考方案2】:你不能。 Rectangle
类只能包含平行于 x 和 y 轴的矩形。
【讨论】:
原样,问题的“来源”:***.com/q/7856150/185593以上是关于从 2 个点和一个宽度获取一个矩形 [重复]的主要内容,如果未能解决你的问题,请参考以下文章