这可能不是发布这篇文章的正确位置,但我不知道还能在哪里发布它。
我有5条线(d1 -> d5)在3d透视图中彼此均匀分布,我有(a)角度、(d1)和(b5)的值。我需要用jquery计算(b2,b3,b4,d2,d3,d4,d5)。

我可以用以下公式计算d5:
d5 = d1 - ( b5 * Math.tan(a))但是我不知道如何计算b2,b3和b4。(d1被分成4个相同的段)如有任何帮助,将不胜感激。
发布于 2013-03-08 12:39:36
你要找的是一个投影尺度。

由于这是四个点,其中没有三个是共线的,因此我们可以找到此变换的唯一矩阵(最大比例)M。经过一些数学运算后,这个矩阵是:
[d1*b5,0,0]
[0,b5*d5,0]
[d1-d5,0,b5*d5]一般来说,如果你有两个点(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如您所见,这是一个简单的算法,用于计算这些投影等距点的坐标,并且它很好地推广到任意数量的点。
如果你想要一个封闭的公式,你可以直接计算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)发布于 2013-03-08 12:34:22

首先,我们需要计算整个三角形d1->v->c的相邻边的长度(它的左侧垂直边):
tan(Θ) = opposite / adjacent
opposite * tan(Θ) = adjacent
adjacent = opposite * tan(Θ)
adjacent = d1 * tan(a)下一步,我们需要知道v的每一条线离地面有多远,当它到达line d1时。假设变量s对于所有分段都是相同的,并且假设N划分分段(在本例中是3),我们的计数器是i,它从1开始,一直到N
opposite(i) = i * (d1 / N)现在我们需要从v到的的每个标记的线的角度:
tan(Θi) = opposite / adjacent
Θi = arctan(opposite / adjacent)
Θi = arctan(opposite(i) / adjacent)
Θi = arctan((i * (d1 / N)) / (d1 * tan(a)))使用一些几何/三角,我们可以说从d1通过c点到d5顶部的角度是(90°- a)。我们将这个角度称为‘’
a' = 90° - a正弦定律告诉我们:
A' / sin(a') = opposite(i) / sin(b')所以现在我们求解A‘,因为我们需要一些帮助来获得橙色正方形的尺寸:
A' = (opposite(i) * sin (a')) / sin(b')由于b' = (a + Θi),这变成:
A' = (opposite(i) * sin (90° - a)) / sin(a + Θi)同样的事情也适用,但解决了橙色三角形中的h (见图):
h / sin(90°-Θi) = A' / sin(90°)
h = (A' * sin(90°-Θi)) / sin(90°)
b2 = h将所有这些放在一起(希望我没有复制/粘贴错误),并且没有简化:
b2 = (((( i * (d1 / N)) * sin (90° - a)) / sin(a + Θi)) * sin(90° - arctan((i * (d1 / N)) / (d1 * tan(a))))) / sin(90°) 现在,对i的每个值进行清洗/重复,并转换为代码(我本来会这样做,但我太累了) :)
https://stackoverflow.com/questions/15285108
复制相似问题