Как найти арктангенс прямоугольного треугольника, используя только гипотенузу?

Итак, мне нужно, чтобы C прошел кратчайший путь из A в B. A в B — это гипотенуза моего прямоугольного треугольника, и мне нужно дать C арктангенс указанного треугольника. Как мне это сделать, и есть ли у формулы имя?


person William    schedule 24.02.2009    source источник
comment
Я не совсем уверен, что понимаю вопрос. С какой информацией вы работаете? Только точки А и Б или что-то еще?   -  person e.James    schedule 24.02.2009
comment
Если бы у вас был один из углов или одна из сторон, вы бы использовали больше триггеров или Пифагора. Но знание только длины гипотенузы мало что вам скажет.   -  person Jon W    schedule 24.02.2009


Ответы (5)


Арктан будет выражаться в градусах или радианах, поэтому ваши A и B, скорее всего, будут иметь такие координаты, как (x, y). Затем вы делаете arctan((By - Ay) / (Bx - Ax)) если я правильно помню, здесь Bx - координата x B и т.д.

Если A и B не имеют координат, вы не можете осмысленно получить градусы.

person Antti Huima    schedule 24.02.2009
comment
Простая задача, если подумать о ней с точки зрения векторов. - person duffymo; 24.02.2009
comment
Как ни странно, мне пришлось использовать (Bx - Ax, -(By - Ay)) но все равно работало. Спасибо! - person William; 24.02.2009
comment
@ Уильям ... тот факт, что вам пришлось поменять местами знаки ... это то, на что я пытался указать, редактируя свой ответ. Думаю, я должен был сделать это немного более ясным. - person Beska; 24.02.2009
comment
В некоторых библиотеках есть arctan, принимающий два параметра, в других — только один. Если у вас однопараметрическая версия, вы должны обрабатывать случай Bx==Ax отдельно, чтобы избежать деления на ноль. Однако кажется, что вы повернули координаты на 90 градусов. - person Antti Huima; 25.02.2009

Не совсем понятно, о чем вы спрашиваете, но я думаю, вы пытаетесь найти угол линии AB. Я собираюсь сделать предположение, что вы знаете или можете вычислить координаты (x,y) как A, так и B, потому что иначе вы не сможете решить проблему.

Похоже, вы наметили большую часть решения... угол будет равен арктангенсу расстояния (y/x). Итак, если мы считаем A(y) координатой y точки A, то вы видите что-то вроде:

arctan ((A(y) - B(y)) / (A(x) - B(x)))

Это помогает? Или вы ищете что-то немного другое?

РЕДАКТИРОВАТЬ: Одна вещь, о которой следует помнить, - это порядок, в котором вы рассматриваете термины (независимо от того, идете ли вы от А к Б или наоборот) и т. Д. Вам нужно подумать об этом, иначе вы можете получить какой-то знак проблемы.

person Beska    schedule 24.02.2009

В большинстве систем есть Arctan2(dy, dx), который дает вам угол в полном круге (и заботится о вертикалях), поэтому вы должны сказать Arctan2((By - Ay), (Bx - Ax)), чтобы получить направление в радианах (против часовой стрелки с востока). Чтобы получить степень, умножьте на 360/(2*PI).

Просто убедитесь, что A != B.

person Mike Dunlavey    schedule 24.02.2009

Если у вас есть только одна длина и здесь нет скрытого предположения (например, одна сторона треугольника была нормализована): вы не можете.

Интересным скрытым предположением может быть:

  • Все расстояния являются целыми числами
  • Длина треугольника не меньше, чем его высота.

Тогда проблема просто тяжелая.


Если A и B являются точками, то угол, который вы хотите, предположительно является углом, взятым по оси x, и вы получаете его (используя fortransish имена):

atan((B.y - A.y)/(B.x - A.x))

или если он есть в вашей библиотеке

atan2((B.y - A.y),(B.x - A.x))

который аккуратно обрабатывает деление на ноль...

person dmckee --- ex-moderator kitten    schedule 24.02.2009
comment
Гм, я вижу, что вы пытаетесь сделать с формулой, но это немного странно. arctan - это функция... она ничему не равна. (Судя по вашему посту, вы это понимаете.) - person Beska; 24.02.2009

Если от A до B — гипотенуза вашего прямоугольного треугольника, то от A до B также будет кратчайший путь от A до B, потому что это прямая линия между точками.

Вы можете вычислить арктангенс любого непрямого угла, разделив длину смежной стороны на длину противоположной стороны, потому что это обратная сторона касательной. Но с информацией, которую вы описали, вам будет не хватать ни числителя, ни знаменателя.

Существует бесконечное количество прямоугольных треугольников с гипотенузой заданной длины.

person Yes - that Jake.    schedule 24.02.2009