gpt4 book ai didi

javascript - 计算 3d 空间等距离的通用公式

转载 作者:数据小太阳 更新时间:2023-10-29 04:49:53 26 4
gpt4 key购买 nike

这可能不是发布此内容的正确位置,但我不知道还有什么地方可以发布它。

我有 5 条线 (d1 -> d5) 在 3d 透视图中彼此均匀分布,我有 (a) Angular 、(d1) 和 (b5) 的值。我需要用 jquery 计算 (b2, b3, b4, d2, d3, d4, d5)。

enter image description here

我可以用以下方法计算 d5:

d5 = d1 - ( b5 * Math.tan(a))

但我不知道如何计算 b2、b3 和 b4。 (d1分为4个相同的segments(s))任何帮助将不胜感激。

最佳答案

您正在寻找的是投影量表。在计算上执行此操作的最简单方法是使用齐次坐标,取一个矩形(如下面第一张图片中的矩形),其中 V 在其上“向右无限远”,并找到一个投影变换,将该矩形映射到中的梯形第二张照片。矩形的顶点是(0|0), (0|d1), (b5|d1), (b5|0) 对应梯形的顶点是(0|0), (0|d1), ( b5|d5), (b5|0).

Illustration of a projective transformation for obtaining a projective scale

由于这是四个点,其中没有三个点共线,我们可以为该变换找到一个唯一的矩阵(按比例缩放)M。经过一些数学运算,结果发现这个矩阵是:

[d1*b5,0,0] 
[0,b5*d5,0]
[d1-d5,0,b5*d5]

例如,如果你想找到坐标 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

如您所见,这是一个用于计算这些投影等距点坐标的简单算法,它可以很好地推广到任意数量的点。

如果您想要一个封闭的公式,您可以直接计算 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)

关于javascript - 计算 3d 空间等距离的通用公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15285108/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com