3d 随机修改三维向量

3d 随机修改三维向量,3d,geometry,3d,Geometry,给定一个向量,有没有一种简单的方法可以通过一个可调的随机量来干扰它,使它指向一个稍微不同的方向?例如,将其随机调整0.1弧度,或所有高达2pi的弧度。随机调整组件实际上不起作用 我的计划是生成一个随机向量,将其与原始向量进行叉积,然后围绕原始向量随机旋转。这是个好主意吗 更清晰的描述:假设有一个顶点位于原点的圆锥体,指向与矢量相同的方向,具有可配置的开口角度-我希望能够选择一个随机矢量,该矢量从原点指向该圆锥体内的任何角度有一种方法显式生成垂直矢量 查找具有最大和第二震级的分量 交换这些组件并否

给定一个向量,有没有一种简单的方法可以通过一个可调的随机量来干扰它,使它指向一个稍微不同的方向?例如,将其随机调整0.1弧度,或所有高达2pi的弧度。随机调整组件实际上不起作用

我的计划是生成一个随机向量,将其与原始向量进行叉积,然后围绕原始向量随机旋转。这是个好主意吗


更清晰的描述:假设有一个顶点位于原点的圆锥体,指向与矢量相同的方向,具有可配置的开口角度-我希望能够选择一个随机矢量,该矢量从原点指向该圆锥体内的任何角度

有一种方法显式生成垂直矢量

查找具有最大和第二震级的分量

交换这些组件并否定最大的组件。将最小分量设为零。例如,如果向量
V | y |>=|x |>=|z |
,则向量
P=(-y,x,0)
垂直(勾选点积)

要使任意垂直,还需生成
B=V x p
,将
p
B
标准化,并进行组合

 R = L * P * Cos(t) + L * B * Sin(t) 
其中,
t
是范围
0..2*Pi
中的随机角度,
L
是提供偏差角度的长度
tan(fi)=L/|V

现在偏离的向量是(长度等于源向量)

如果
fi
在锥角范围内均匀,则分布不均匀。似乎以下转换应提供均匀分布:

 L = V * tan(Sqrt(random(0..1))*FiCone)

看似可行的简单解决方案,经@meowgoesthedog确认无误-我生成一个与原始向量不平行的随机单位向量,将它们交叉相乘,得到一个随机旋转轴,然后围绕该旋转轴随机旋转原始向量


我已经实现了它,它似乎工作得很好。

“随机调整0.1弧度”-在哪个方向,或者这是指俯仰/偏航?如果你的意思是在一个随机的方向上移动它一些角距离,那么你的方法应该可以很好地工作。想象有一个顶点在原点的圆锥体,指向与向量相同的方向,使用可配置的开启角度-我希望能够选择一个从原点指向该范围内任何角度的随机向量。如果您执行相关检查,您的方法应该可以正常工作。但是,它不会在圆锥体的底面上产生均匀分布。如果在底面上的分布不均匀,只要角度分布是均匀的,就可以了。我需要什么相关的检查?只是随机“参考”向量与原始向量不平行?是(+反平行),理想情况下,为了数值稳定性,它也不应该“太接近”(点积在+1/-1的小范围内)。这仅在小角度限制下足够均匀;对于较大的角度,必须使用
sqrt(sin(angle/2))
代替规范的“
sqrt(r)
”@meowgoesthedog现在我怀疑描述的方法对于作者来说太复杂了;)
 L = V * tan(Sqrt(random(0..1))*FiCone)