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

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

Сообщение Anonymous »

Это легко сделать с помощью неповернутых прямоугольников.
У меня есть код, который берет прямоугольник и получает расположение его углов, как если бы прямоугольник был повернут 0 градусов, а затем с помощью 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[i] - 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[i] = new Vector2(rotatedX, rotatedY) + center;

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

Vector2 directionToCorner = (corners[i] - (Vector2)transform.position);

Debug.DrawRay(transform.position, directionToCorner, Color.green);
}
}
Есть ли у кого-нибудь идея алгоритма, работающего с объектами любой формы?

Подробнее здесь: https://stackoverflow.com/questions/791 ... s-a-tangen
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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