Моя проблема в основном состоит в том, чтобы вычислить координаты x и y второго элемента в следующей ситуации.

Для инструмента в unity3d, использующего c #

enter image description here

0
Younes 24 Апр 2014 в 06:13

2 ответа

Лучший ответ

Если вы знаете угол между осью x и этим прямоугольным объектом, вы можете использовать базовый триггер.

Предположим, прямоугольный объект имеет длину "len". (Это действительно помогло бы лучше обозначить, что происходит, я не совсем понимаю.) И, допустим, у вас есть угол θ.

Я предполагаю, что центр круга имеет координаты (0,0).

Тогда вертикальное расстояние от центра круга до края круга, которого касается прямоугольник, равно y = len * sin (θ), а для горизонтального расстояния - len * cos (θ).

Если вы продвигаетесь вверх только на 2/5 высоты коробки, вы должны использовать len / 5 вместо len.

Это просто математика. В C # вы хотите использовать класс Math. в нем есть все необходимые вам функции. Будьте осторожны с радианами и градусами.

0
pseudoabdul 24 Апр 2014 в 06:46

Итак, я предполагаю, что у вас есть координаты A и B. Найдите угол второй линии с помощью:

float angle = atan2(B.y-A.y, B.x-A.x)

Это работает только в том случае, если ваша ситуация выровнена по оси, как на диаграмме (т.е. если исходная конфигурация выровнена по оси x). Если нет, вы можете решить формулу |U x V| = |U| |V| sin(angle) для angle (вам понадобится arcsin - величина, обратная sin), где U и V - старые и новые AB векторов.

Затем поверните интересующий вас объект (назовите его P) вокруг A. Вы делаете это, сначала вычитая координаты A из P, так что ось вращения находится в начале координат. Затем поверните P, умножив на матрицу вращения:

[ cos(angle)    -sin(angle) ]  [ P.x ]
[ sin(angle)     cos(angle) ]  [ P.y ]

Который дает

x = cos(angle) * P.x - sin(angle) * P.y
y = sin(angle) * P.x + cos(angle) * P.y

После того, как вы их получите, снова добавьте координаты A.

Таким образом:

P_new = A + rotate(P_old - A)

Фактический код будет более сложным, чем этот, но это абстрактная картина. Я оставлю код на ваше усмотрение.

1
luqui 24 Апр 2014 в 09:35