Случайные точки с радиусом - PullRequest
0 голосов
/ 23 ноября 2018

У меня дилемма в алгоритме.Я пытаюсь сгенерировать 6 случайных позиций, которые имеют расстояние между ними.Мой алгоритм работает только для проверки расстояния между текущей точкой и предыдущей точкой.Мне нужно, чтобы алгоритм проверял расстояние между всеми точками, и если расстояние меньше указанного значения, он создаст новую позицию.

private void Generate()
{
    for (int i = 0; i <= 5; i++)
    {
        Vector3 pos = PointsGenerator();
        Instantiate(point, pos, Quaternion.identity); // just to highlight the points on the screen
    }
}

private List<Vector3> Dist = new List<Vector3>();
private bool isOver = false;
private Vector3 PointsGenerator()
{
    Vector3 currentPosition = Vector3.zero;
    Vector3 oldPosition = Vector3.zero;
    float distance = 0f;
    do
    {
        currentPosition = new Vector3(UnityEngine.Random.Range(minX, maxX), UnityEngine.Random.Range(minY, maxY), 0f);
        for (int i = 0; i < Dist.Count; i++)
        {
            distance = Vector2.Distance(currentPosition, Dist[i]);
            if (distance <= 4f)
            {
                isOver = true;
                break;
            }
            else
                isOver = false;
        }

    } while (isOver == true);
    Dist.Add(currentPosition);
    return currentPosition;
}

Спасибо всем, кто даст совет.

1 Ответ

0 голосов
/ 23 ноября 2018

в чем вопрос?

«Мне нужны эти 6 точек, и между ними есть не только расстояние, но и расстояние от центра + радиус»

Для достижениячто вам придется генерировать очки, которые находятся на сфере.Для этого создайте (случайную, если необходимо) центральную точку вашей сферы и определите радиус.Затем вам нужно использовать случайные сферические координаты (radius, randomAngle1, randomAngle2).Чтобы преобразовать их в декартовы координаты, используйте

x = радиус * cos (randomAngle1) * sin (randomAngle2)

y = радиус * sin (randomAngle1) * sin (randomAngle2)

z = радиус * cos (randomAngle1)

после этого вы можете сделать тот же алгоритм, что и вам, уже нужно регенерировать новые точки, пока они также не будут удалены друг от друга

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...