Блог программиста
Математика Unity (урок 1): Mathf синус и косинус.
01.07.2013Математика Unity

Из курса школы все знают, что такое синус и косинус. Для тех кто забыл:

Синус - это ордината точки единичной окружности.
Косинус - абсцисса точки единичной окружности.
В Unity (C#) они вычисляются функциями:
Mathf.Sin(float Angle);        //Синус (угол в радианах)
Mathf.Cos(float Angle);        //Косинус (угол в радианах)
В Unity используется левосторонняя система координат, поэтому увеличения угла поворота идёт по часовой стрелке.

Для чего можно использовать синус и косинус в игре?
Например для расстановки объектов по кругу.
Допустим, что вокруг игрока должны встать враги, ровным кругом.
Для этого напишем небольшой скрипт.
using UnityEngine;
public class EnemyCircle : MonoBehaviour {
    //Префаб врага
    public Object EnemyPrefab;
    //Расстояние до игрока
    public float Distance = 2;
    //Угол занимаемый врагами (360 - вся окружность)
    public float Angle = 360;
    //Количество врагов
    public int count = 15;

    void Start ()
    {
        //Определяем начальную точку
        Vector3 point = transform.position;
        //Переводим угол в радианы
        Angle = Angle * Mathf.Deg2Rad;
        for(int i = 1; i <= count; i++)
        {
            //Рассчитываем координату Z для врага
            float _z = transform.position.z + Mathf.Cos(Angle/count*i)*Distance;
            //Рассчитываем координату X для врага
            float _x = transform.position.x + Mathf.Sin(Angle/count*i)*Distance;
            point.x = _x;
            point.z = _z;
            //Создаём врага
            Instantiate(EnemyPrefab, point, Quaternion.identity);
        }
    }
}

Позиция каждого следующего врага смещается на определённый угол относительно игрока.

Теорема косинусов

Квадрат стороны треугольника равен сумме квадратов двух других его сторон без удвоенного произведения этих сторон и косинуса угла между ними.

Общая формула для всех треугольников:
a2 = b2 + c2 – 2bc*cos(A)
Если угол является прямым, то справедлива теорема Пифагора:
Квадрат гипотенузы равен сумме квадратов катетов.
Формула: a2 = b2 + c2
Теорема Пифагора является частным случаем теоремы косинусов. (косинус 90 равен 0)
Применение этим формулам тоже нашлось (пример не самый лучший)
Имеется:
1) Хорошо охраняемая база, на которой хранятся юниящики.
2) Шпион, которому надо узнать сколько юниящиков храниться на базе.
На базе имеется склад. Чтобы узнать количество юниящиков, шпиону необходимо узнать площадь, которую занимает склад. Так как база охраняется, он не может пойти с рулеткой и измерить.
Поэтому мы дадим ему бинокль с возможностью измерения размеров объектов:

Зная угол обзора и расстояние до крайних точек, мы можем рассчитать размер склада.
Код:
using UnityEngine;
public class MegaBinoculars : MonoBehaviour {
    //Угол обзора
    public float Angle = 50;
    //Расстояние до крайних точек обзора
    public float Distance = 10;

    void Update ()
    {
        if(Input.GetMouseButton(0))
        {
            Angle = Angle * Mathf.Deg2Rad;
            //Вычисляем квадрат стороны склада (наш склад квадратный, поэтому это и есть площадь)
            float size = Distance*Distance + Distance*Distance - 2 * Distance * Distance * Mathf.Cos(Angle);
            Debug.Log(size);
        }
    }
}
Больше про них рассказывать нечего, так что закончим на этом :-)
P.S. Если что-то не понятно, пишите в комментариях ;-)

12328
Опрос

Нужен ли курс уроков по созданию игры на Unity3d?