3d - 随机修改 3D 矢量
问题描述
给定一个向量,是否有一种简单的方法可以通过可调节的随机量来干扰它,使其指向稍微不同的方向?例如,随机调整 0.1 弧度,或所有高达 2pi 的弧度。随机调整组件并没有真正起作用。
我的计划是生成一个随机向量,与我的原始向量交叉乘积,然后将原始向量旋转一个随机量。这是个好主意吗?
更清晰的描述:想象有一个顶点在原点的圆锥,指向与矢量相同的方向,具有可配置的张角 - 我希望能够选择一个随机矢量,该矢量从原点指向该圆锥内的任何角度
解决方案
有一种方法可以显式地生成垂直向量。
查找具有最大和第二量级的分量。
交换这些组件并否定最大的。使最小的分量为零。例如,如果对于 vector V |y|>=|x|>=|z|
,则 vectorP=(-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|
现在偏离向量是(长度等于源一)。
D = (V + R) * |V|/|V+R|
fi
如果在锥角范围内均匀,则分布不均匀。似乎下面的转换应该提供均匀分布:
L = V * tan(Sqrt(random(0..1))*FiCone)
推荐阅读
- powershell - 如何在控制台中转录所有内容
- bootstrap-table - 如何使用 jQuery 在引导表 api 自定义按钮中添加点击事件
- javascript - 添加自定义标题 react-infinite-calendar
- kubernetes - K8S HPA - 无法从外部指标 API 获取指标
- python - AttributeError:“列表”对象在 Python 上没有属性“问题”
- operating-system - 在具有分页内存管理系统的系统上运行的应用程序可以直接访问物理内存吗?
- java - 通过意图移动到下一个活动的问题
- sql - 显示具有一对多关系的两个表中的多行数据
- java - 创建可以使视频方向适应手机方向的视频播放器
- wordpress - 如何以编程方式初始化(许多)ACF 字段组