Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Алгоритмы > Узнать угол по трём точкам |
Автор: TDM 11.5.2006, 21:31 |
Даны координаты трёх точек (с1,с2,с3) Узнать угол между ними в градусах. Подскажите как. |
Автор: Fin 11.5.2006, 22:14 |
Можно поиграться с формулой теоремы косинусов: A^2=B^2+C^2-2*A*B*Cos(Alfa) |
Автор: maxim1000 11.5.2006, 22:21 |
переделываем это в два вектора: c2c1 и c2c3 находим их длины (корень из суммы квадратов) находим векторное произведение делим на длины векторов получаем синус угла... |
Автор: Magister Y0da 12.5.2006, 07:35 |
Можно обыкновенные координаты перевести в полярные и все |
Автор: SoWa 12.5.2006, 13:23 |
Можно поизвращаться с уравнениями прямых. Извлечь оттуда тангенсы угла наклона, и из большего вычесть меньший угол. Но лучше делать так, как предложил maxim1000. 2JIAMEP, глупо. С уравнениями прямых и то легче. С сисетмами координат будешь возиться долго. И еще: так можно было бы решать. если бы вершина угла была в нуле. А так она где угодно. И поэтому задачу так не решить. |
Автор: maxim1000 12.5.2006, 16:23 |
если уж сравнивать, то мне кажется, что для углов, близких к 0 и 180 стоит использовать векторное произведение, а для близких к 90 - скалярное (т.е. через теорему косинусов) причина - точность: в первом случае arcsin точнее, а во втором - arccos общее правило может быть таким: берём любой из двух методов, определяем угол, если он получился из "чужой" области применения - берём другой метод |
Автор: 6TITLIZ 12.5.2006, 17:15 | ||
S - площадь AB CA - стороны Почему у меня не правильно определяется градус тупого угла? С острыми и прямыми проблем нет |
Автор: poor_yorik 12.5.2006, 19:23 |
Потому что арксинус не работает с тупыми углами, вместо этого у тебя будет отрицательный угол, и тебе над будет прибавить к нему 180 градусов. |
Автор: 6TITLIZ 12.5.2006, 20:25 |
poor_yorik, Как быть? ![]() ![]() |
Автор: TDM 12.5.2006, 22:43 | ||
Наверное так:
|
Автор: 6TITLIZ 13.5.2006, 12:14 |
Он мне выдает Al=36 (пример) А нужно 180-36. Угол тупой, а он выдаёт как острый. Тут проверкой дело не спасёшь... |
Автор: TDM 28.5.2006, 19:22 |
Напишите пример. |
Автор: Earnest 30.5.2006, 17:56 | ||
Нужно свычислять и синус, и косинус (т.е. пропорциональные им величины), и определять угол с учетом знака обоих. Не знаю как в Паскале, а в С есть ф-я atan2, которая это умеет. Т.е. получается что-то вроде
|
Автор: Magister Y0da 31.5.2006, 13:53 |
Скажим С2 соединяется с обеими точками. Тогда С1(С1(Х1)-C2(X2),С1(Y1)-C2(Y2)), С3(С3(Х3)-C2(X2),С3(Y3)-C2(Y2)) и переводим в полярные зайди туда, там есть формула http://www.ssga.ru/AllMetodMaterial/metod_mat_for_ioot/metodichki/iutina/1_AG.html#2 поиск через rambler "нахождения угла" вторая ссылка |
Автор: 6TITLIZ 15.6.2006, 15:15 | ||
А можно как нибудь заранее определить: тупой или острый угол?
И вопрос в догонку: Как можно округлить градусную меру до минут? Чтоб можно было выводить 45* 17" |
Автор: maxim1000 15.6.2006, 15:22 |
тут достаточно посмотреть на знак скалярного произведения: минус - тупой плюс - острый |
Автор: 6TITLIZ 15.6.2006, 15:23 |
А как этот знак получить? |
Автор: SoWa 15.6.2006, 16:07 | ||
Ну косинус посчитать, очевидно.
Значки векторов опущены. |