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

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

我有以下

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

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

【问题讨论】:

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

标签: .net math


【解决方案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 轴的矩形。

【讨论】:

猜你喜欢
  • 2013-11-14
  • 2013-05-09
  • 2018-12-20
  • 1970-01-01
  • 2013-05-15
  • 1970-01-01
  • 2021-08-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多