我有一条由一系列 x、y 坐标点定义的非直线。我可以毫无问题地在这些点之间直接在屏幕上画一条直线。不幸的是,我必须画出等长的线段。
这是一个示例,说明我需要如何将具有 3 个点的非直线分解为几个等距点的数组。(忽略最后的红点,它是一条线不均分的结果,也是终点)
请注意“关节”处的红线。考虑到我有一条线 A->B->C,其中向量 AB 和 BC 形成某个角度。基本上,线在 B 点弯曲。
分割点 A 和 B 之间的线直到一点都没有问题。但是当 AB 没有除以段长度时,我需要做一些特别的事情。我需要取剩余的长度并将其视为三角形的一侧。恒定线段长度是与 BC 线段相连的三角形的另一边(上面的红线)。我需要知道从 B 点到这个交叉点的长度。有了这些信息,我可以继续计算 BC 上的线段。
这是我要解决的三角形(此后我将引用这张图片上出现的变量)到目前为止,我已将问题分解为使用余弦定律。c 2 = a 2 + b 2 - 2ab * Cos( y )
问题是我已经知道c,它是段长度。我需要求解 a(我可以计算 y)。
我已经写了一个多项式方程,但现在我卡住了:a 2 + b 2 - 2ab * Cos( y ) - c 2 = 0
或 Ax 2 + Bx + C (A = 1, B = -2b * Cos( y ), C = b 2 - c 2 , x = a)
这甚至是正确的方法吗?接下来我该怎么做?我需要在 Actionscript 中实现这一点。
编辑:Duh,我将不得不使用二次公式。所以我现在得到:
a = b * Cos( y ) +/- SqrRoot(c 2 - b 2 * Sin( y ) 2 )
现在如何将其放入代码中...