raz*_*zak 7 javascript math jquery
它可能不是发布这个的正确的地方,但我不知道在哪里发布它.
我有5条线(d1 - > d5)在3d透视图中彼此均匀分布,我有(a)角度,(d1)和(b5)的值.我需要用jquery计算(b2,b3,b4,d2,d3,d4,d5).

我可以用以下公式计算d5:
d5 = d1 - ( b5 * Math.tan(a))
Run Code Online (Sandbox Code Playgroud)
但我不知道如何计算b2,b3和b4.(d1分为4个相同的部分)任何帮助将不胜感激.
您正在寻找的是投影比例。最简单的计算方法是使用齐次坐标,取一个矩形(如下面第一张图中的矩形),其中 V “无限远地向右”,并找到一个投影变换,将该矩形映射到梯形第二张图片。矩形的顶点为 (0|0)、(0|d1)、(b5|d1)、(b5|0),梯形的对应顶点为 (0|0)、(0|d1)、( b5|d5),(b5|0)。

由于这四个点中没有三个点共线,因此我们可以为该变换找到一个唯一的矩阵(按比例缩放)M。经过一些数学运算后,发现这个矩阵是:
[d1*b5,0,0]
[0,b5*d5,0]
[d1-d5,0,b5*d5]
Run Code Online (Sandbox Code Playgroud)
例如,如果您想找到坐标 b3 和 d3,您可以将该矩阵与线中间点的齐次坐标(即向量 (0.5*b5,d1,1)^T)相乘,然后得到点 (b3|d3) 的齐次坐标,可以通过去均匀化将其转换为欧几里德坐标,即将前两个分量除以第三个分量。
一般来说,如果你有两个点 (b1|d1) 和 (bn|dn) 并且想知道像这样的投影尺度上 n-2 个等距点的坐标,你可以像这样计算坐标 bi 和 di (当然,在你的情况下,n 是 5):
let M := matrix [[d1*bn, 0, 0], [0, bn*dn, 0], [d1-dn, 0, bn*dn]]
let v := ((i-1)/(n-1)*bn, d1, 1)
let (x,y,z) := M*v
let bi := x/z and di := y/z
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,这是一个用于计算这些投影等距点的坐标的简单算法,并且它可以很好地推广到任意数量的点。
如果您希望有一个封闭公式,您可以直接计算 bi 和 di 如下:
let bi := (bn*d1*(i-1))/(dn*n+(d1-dn)*i-d1)
let di := d1*dn*(n-1)/(dn*n+(d1-dn)*i-d1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
618 次 |
| 最近记录: |