gpt4 book ai didi

c# - 在平面上获取随机 vector3

转载 作者:太空狗 更新时间:2023-10-29 19:45:08 26 4
gpt4 key购买 nike

3d 空间中有行星和一些卫星。我需要计算每颗卫星的旋转轴。它们应该围绕行星中心旋转。

我计算了从卫星到地球中心的矢量。

vec1 = planetCenter - sputnikCenter;

有了 vec1 和 planetCenter,我可以计算垂直于 vec1 的平面方程。

这样的等式:

A.x + B.y + C.z + D = 0

现在,我应该得到这个平面上的随机向量。该矢量将是旋转轴。但是我怎样才能得到这个随机向量呢?

最佳答案

好吧,如果你有飞机​​ A.x + B.y + C.z + D = 0然后n(A,B,C)是法向量。所以我认为完成任务的最简单方法是使用基向量。所以你需要 2该平面上的垂直矢量。为此,您可以利用叉积。首先是一些定义:

已知:

  • p行星中心位置(或你的旋转中心点或平面上的任何点,所以在最坏的情况下你可以尝试 p=0,0,-D/C 或任何其他组合......)
  • n法向量
  • q= (1,0,0) or (0,1,0)选择了一个较小的 |dot(n,q)|

操作:

  • vector = cross(a,b) = a x b - cross 乘积返回到 a,b 的垂直向量
  • scalar = dot(a,b) = (a . b) - dot 产品返回 0如果a,b是垂直的
  • |a| = abs(a) - absolute 值(标量矢量)
  • scalar = Rand() - float 区间上的伪随机值 <0.0,1.0>

未知数:

  • u,v - 基向量
  • r - 你的伪随机

所以首先得到u,v通过利用叉积:

u=cross(n,q)
v=cross(n,u)

现在重点是:

r = p + u*(2.0*Rand()-1.0) + v*(2.0*Rand()-1.0)

如果您只想要随机向量,则忽略起始位置 p

r' = u*(2.0*Rand()-1.0) + v*(2.0*Rand()-1.0)

这就是全部......所以你可以计算u,v一次(每次法向量变化)并生成 r根据需要经常使用。如果u,v是单位向量,那么这将在 2x2 内生成点正方形 ... 如果您想要更多或更少,只需为它们添加比例 ...

参见 Is it possible to make realistic n-body solar system simulation?并为 Kepler's equation 生成随机轨道参数相反......

关于c# - 在平面上获取随机 vector3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34461656/

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