Получите вектор, который начинается в заданной точке и является касательной к некоторому заданному объекту.C#

Место общения программистов C#
Anonymous
Получите вектор, который начинается в заданной точке и является касательной к некоторому заданному объекту.

Сообщение Anonymous »

В настоящее время код получает прямоугольник и определяет положение его углов в Vector2. Затем он рассчитает новые положения углов с помощью Sin и Cos относительно угла прямоугольника. В настоящее время он работает только с прямоугольниками.
У меня вопрос: как можно обновить код, чтобы он работал с любым типом формы/объекта. Мне не нужен код, достаточно просто объяснить алгоритм.
foreach (var hit in hit_objects)
{
Collider2D hitCollider = hit.collider;
Bounds bounds = hitCollider.bounds;

Vector2[] corners = new Vector2[4];
corners[0] = new Vector2(bounds.min.x, bounds.min.y);
corners[1] = new Vector2(bounds.max.x, bounds.min.y);
corners[2] = new Vector2(bounds.max.x, bounds.max.y);
corners[3] = new Vector2(bounds.min.x, bounds.max.y);

Vector2 center = bounds.center;
float angle = hit.collider.gameObject.transform.rotation.eulerAngles.z * Mathf.Deg2Rad;

for (int i = 0; i < corners.Length; i++)
{
Vector2 direction = corners - center;
float rotatedX = direction.x * Mathf.Cos(angle) - direction.y * Mathf.Sin(angle);
float rotatedY = direction.x * Mathf.Sin(angle) + direction.y * Mathf.Cos(angle);
corners = new Vector2(rotatedX, rotatedY) + center;

Debug.Log(corners + " " + i);

Vector2 directionToCorner = (corners - (Vector2)transform.position);

Debug.DrawRay(transform.position, directionToCorner, Color.green);
}
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... ven-object

Вернуться в «C#»