Страница 1 из 1

Рандомная точка на окружности

СообщениеДобавлено: 12 апр 2016, 17:58
Asm888
Здравствуйте! Прошу помощи! Мне нужно каждые 2 секунды создавать объект в рандомной точке НА окружности (не путайте, мне нужна точка именно на дуге окружности). И я ума не приложу как это делать.. Помогите пожалуйста

Re: Рандомная точка на окружности

СообщениеДобавлено: 12 апр 2016, 18:06
samana
Может это? http://docs.unity3d.com/ScriptReference ... phere.html
А если для 2d, то можно как-то так:
Синтаксис:
Используется csharp
Vector2 randOnCircle(float radius)
{
    float randAng = Random.Range(0, Mathf.PI * 2);
    return new Vector2(Mathf.Cos(randAng) * radius, Mathf.Sin(randAng) * radius);
}

Re: Рандомная точка на окружности

СообщениеДобавлено: 12 апр 2016, 18:49
Woolf
Asm888 писал(а):Здравствуйте! Прошу помощи! Мне нужно каждые 2 секунды создавать объект в рандомной точке НА окружности (не путайте, мне нужна точка именно на дуге окружности). И я ума не приложу как это делать.. Помогите пожалуйста


Вот они, последствия ЕГЭ..

Для сферы
float radius;
Vector3 centrPoint;

Vector3 randomPoint=centrPoint+new Vector3(Random.value-0.5f,Random.value-0.5f,Random.value-0.5f).normalized*radius;


Для окружности тоже самое, только Veсtor2

Чтобы каждые 2 секунды, используйте карутину, про создание тут http://docs.unity3d.com/ScriptReference ... tiate.html

Re: Рандомная точка на окружности

СообщениеДобавлено: 12 апр 2016, 19:18
samana
Woolf, а ваш вариант ведь действительно хороший, я даже как-то не подумал, что можно через нормализованный вектор сделать.

Re: Рандомная точка на окружности

СообщениеДобавлено: 12 апр 2016, 19:44
Cr0c
Задавать векторы осей окружности/эллипса, всё равно везде Vector3 в координатах:
Синтаксис:
Используется csharp
Vector3 GetRoundPoint(Vector3 leftAxis, upAxis)
{
 float angle = Random.Range(0f, 2*3.1415926);
 return (leftAxis * Mathf.Cos(angle) + upAxis * Mathf.Sin(angle));
}
 

Re: Рандомная точка на окружности

СообщениеДобавлено: 13 апр 2016, 16:10
KBEP
Раз пошла такая пьянка я тож свой костылёчек добавлю:
Синтаксис:
Используется csharp
Vector2 RandomCirclePoint (Vector2 center, float radius)
{
        //x*x + y*y = R*R - уравнение окружности
        float x = Random.Range(-radius, radius);
        float y = Mathf.Sqrt(radius*radius - x*x);
        if (Random.Range(0, 2) == 0) y = -y;//меняем знак с вероятностью 50 на 50 в зависимости от фазы Луны
        return new Vector2(center.x + x, center.y + y);
}

Re: Рандомная точка на окружности

СообщениеДобавлено: 13 апр 2016, 17:08
Asm888
Woolf, спасибо большое!