给定一个三角形和一个线段,找到第三个点,它会创建一个相似的三角形[关闭]
Posted
技术标签:
【中文标题】给定一个三角形和一个线段,找到第三个点,它会创建一个相似的三角形[关闭]【英文标题】:given a triangle and a segment, find third point which would create a similar triangle [closed] 【发布时间】:2011-05-19 01:12:08 【问题描述】:我看到有人问过类似的问题,但我觉得解释起来还是有些困难。
我有一个三角形,它的 3 个顶点在 (x,y) 中给出。我也得到了两分的一部分。我想在该段周围放置第三个点,以便它完成一个与原始三角形形状相似的三角形。这个新三角形的大小可能不一样,但所有的角度都是一样的。我如何找到第三点?
我已经找到了每个段的长度和三角形的角度,但我有点卡住了。
我看到了以下帖子并尝试实现所讨论的代码,但没有获得正确的坐标。 Calculating the coordinates of the third point of a triangle
编辑:抱歉,我忘了说明我想将第三个点放在靠近线段的一端。示例:我有一个顶点为 A、B 和 C 的三角形。我有一个线段 DE(由点 D 和 E 创建),其中 DE 类似于 AB。我想将点 F 放在一个位置,使 AD 类似于 EF,AC 类似于 DF。
【问题讨论】:
此问题未充分说明。给定的线段可以构成三个边中的任何一个,因此必须有三个不同的点可以用来构成相似的三角形。 这是题外话 - 应该在 math.stackexchange.com 上 @Drew - 通常实际上有六种解决方案,因为该段可以相对于每一侧在两个方向上定向。但那又怎样? OP 只想要一些与原始三角形相似的三角形,该三角形将线段作为边之一。 @Ted,只有三个方向会产生一个相似的三角形。 @Ted:你是对的,当然(在这两个方面)。我只是想让 OP 多考虑一下这个问题。 【参考方案1】:为了具体起见,假设你的原始三角形有顶点 A、B 和 C。线段有端点 D 和 E。此外,你希望 DE 对应于 AB。那么问题是找到一个点 F 使得三角形 DEF 类似于三角形 ABC。我希望这就是您要解决的问题,因为这就是我要为您提供的解决方案。解释解决方案比编写代码要长得多。 :)
我认为您可以使用矢量算术来完成所有这些操作,而无需使用角度和三角函数。让所有点在某个共享坐标系中由它们的 x 和 y 坐标表示。 (如果你不懂向量算术,请看下面的附录。)
首先,我们设想一个局部坐标系 u-v,以 A 为原点,AB 平行于 u 轴; v 轴垂直于 u;我们将在一秒钟内确定哪个方向是积极的。现在,尽管 AB 是三角形的边,但从现在开始,我们会将其视为从 A 到 B 的向量。它可以在 x-y 系统中计算为AB = (B[x] - A[x], B[y] - A[y])
。所有其他点对也是如此。各个点也将是 x-y 系统中的向量。 x-y 系统中沿 u 轴的单位向量由下式给出:
u = (u_x, u_y) = AB / ‖AB‖
沿 v 轴的单位向量就是:
v = (-u_y, u_x)
(我们也可以使用(u_y, -u_x)
。)现在我们将计算 u-v 系统中 AC 的向量分量:
AC_u = (AC_x * u_x, AC_y * u_y) // = (AC ∙ u)
AC_v = ‖AC - AC_u * u‖
现在我们想象另一个局部坐标系 r-s,原点位于 D,r 轴沿 DE。 x-y 系统中沿 r 和 s 的单位向量为:
r = (r_x, r_y) = DE / ‖DE‖
s = (-r_y, r_x)
我们可以通过‖DE‖ / ‖AB‖
的比例缩放AC的u-v分量,得到DF的r-s分量:
DF_r = AC_u * ‖DE‖ / ‖AB‖
DF_s = AC_v * ‖DE‖ / ‖AB‖
最后,我们只需要将所有内容加在一起即可:
F = D + DF_r * r + DF_s * s
(回想一下 D
、r
和 s
是向量。)就是这样。虽然这篇文章很长,但只有十几行代码(每个向量计算步骤为每个组件占用一行代码)加上另外几行代码用于计算向量范数的函数。
附录:向量算术
x-y 坐标系中的向量是有序的数字对:(x, y)。两个向量 A 和 B 可以通过加减它们的分量来加减:A ± B = (A_x ± B_x, A_y ± B_y)
。通过将每个向量分量乘以标量,可以将向量乘以一个数字(也称为标量):q*A = (q*A_x, q*A_y)
。除以标量只是乘以标量的倒数。向量A的范数(也称为它的长度)写成“A”;它可以使用勾股定理计算:‖A‖ = sqrt(A_x * A_x + A_y * A_y)
。 单位向量是一个范数=1的向量。两个向量的点积是对应分量的乘积之和(一个简单的数字):A ∙ B = A_x*B_x + A_y*B_y
。请注意,向量与自身的点积是其范数的平方。关于点积的一个重要恒等式是:A ∙ B = ‖A‖ * ‖B‖ * cos(α)
其中α
是 A 和 B 之间的角度。推论是两个非零向量的点积恰好在向量相互垂直时为零。
【讨论】:
以上是关于给定一个三角形和一个线段,找到第三个点,它会创建一个相似的三角形[关闭]的主要内容,如果未能解决你的问题,请参考以下文章