C# 找到足够远的位置

C# 找到足够远的位置,c#,position,unity3d,distance,C#,Position,Unity3d,Distance,我正在做一个有多个行星的游戏。现在我想随机生成它们的位置,所以我需要确保它们彼此不太靠近,这样它们就不会碰撞,也不会彼此太远,因为你应该能够看到它们 每个行星都有一个半径,所以每个行星之间的距离应该是:它自己的半径+任何其他行星的半径+一个小偏移。如果他们彼此距离不太远,越近越好 我先把第一颗行星放在0,0,0。然后第二个很容易计算(只是一个随机方向,然后是距离)。第三个也是可行的,不过在那之后我就被难倒了 有人帮忙吗?我用的是Unity,所以位置是向量3,我用的是c 非常感谢 我不使用unit

我正在做一个有多个行星的游戏。现在我想随机生成它们的位置,所以我需要确保它们彼此不太靠近,这样它们就不会碰撞,也不会彼此太远,因为你应该能够看到它们

每个行星都有一个半径,所以每个行星之间的距离应该是:它自己的半径+任何其他行星的半径+一个小偏移。如果他们彼此距离不太远,越近越好

我先把第一颗行星放在0,0,0。然后第二个很容易计算(只是一个随机方向,然后是距离)。第三个也是可行的,不过在那之后我就被难倒了

有人帮忙吗?我用的是Unity,所以位置是向量3,我用的是c


非常感谢

我不使用unity,但我认为这个问题不是unity/c特定的

考虑到你想放置的每一颗行星都“依赖”于一个父行星,某种程度上,太阳被排除在外,并被放置在原点,你可以实现它

也就是说,它位于(0,0,0)的太阳,Planet1属于太阳,它位于一定的半径距离,所以它有自己的半径和旋转角度(总是与其母星相关)。 行星2可能以太阳为母星,所以它是一颗“行星”,或者从行星1开始,成为它的月亮。 等等

使用这个简单的方案,您必须始终管理4件事情,这些事情可以作为一个类轻松实现,即(未经测试,我在这里编写它时没有编译器,请检查它是否存在可能的语法错误):

此外,您还可以轻松实现太阳、行星、卫星、卫星中的卫星:-)

每次你创建一颗行星时,你都会指定它的父行星,随机化类值,只考虑轨道半径>>半径(>>我的意思是真的“真的更大”,而不仅仅是“更大”)

这也应该给你一个最强大的“行星链”来处理,也许是递归函数

作为最后一步,您可以“渲染”它们在整个链中的位置,以增量方式将PlanetX位置添加到父位置,仅处理OrbitAngle;你需要一些正反两方面的数学知识,但你不会因为比例因子而变得松散

希望这有帮助


编辑:我添加了一种计算位置,现在无法验证,它只是为了澄清概念,肯定可以改进。

我喜欢这个解决方案,我只是在考虑随机位置,虽然这会给人一种自然的感觉(与太阳和其他物体一起)。甚至可以让它们四处移动,这一点我甚至没有想到,但可能会很酷。谢谢你不仅给了我一个解决方案,还给了我一些很酷的新东西让我思考:我很高兴这对我有帮助,享受行星带来的乐趣;-)
public class Planet
{
  public Planet Parent;     //if null, I'm the first in chain
  public float OrbitRadius; //From my parent
  public float OrbitAngle;  //0-360 around my parent
  public float Radius;      //Planet size

  //EDIT:
  public Vector3 Position;

  public void CalculatePosition()
  {
    if(Parent == null) this.Position = new Vector(0, 0, 0);
    this.Position = Parent.Position + OrbitRadius + Math.Sin(OrbitAngle * Math.PI / 180.0f);  //Check if it has to be done for each vector component
  }

}