у меня есть 3 точки ((x, y), (x', y'), (x'', y'')) и я хочу найти угол в 3 точках, мне также нужно получить точку при наличии угол и 2 другие точки (но это не должно быть проблемой)
если это поможет - я работаю с С#
у меня есть 3 точки ((x, y), (x', y'), (x'', y'')) и я хочу найти угол в 3 точках, мне также нужно получить точку при наличии угол и 2 другие точки (но это не должно быть проблемой)
если это поможет - я работаю с С#
Для общего непрямоугольного треугольника вам понадобится так называемый закон косинусова>. Это позволяет вычислить внутренние углы в каждом углу треугольника, учитывая длины каждой стороны. Вы можете рассчитать длину каждой стороны, используя равенство Пифагора.
Вторая часть вашего вопроса четко не указана.
Прочитайте следующее: http://en.wikipedia.org/wiki/Trigonometric_functions и http://jwbales.us/precal/part6/part6.2.html
потому что A = (b ^ 2 + c ^ 2 - a ^ 2) / ( 2 bc )
потому что B знак равно ( а ^ 2 + с ^ 2 - b ^ 2 ) / ( 2 ас )
потому что C = ( a ^ 2 + b ^ 2 - c ^ 2 ) / ( 2 ab )
затем возьмите arccos для каждого из полученных значений, чтобы найти угол.
Изучите триггер, проведите исследование и преобразуйте приведенные выше уравнения в код.
Ну, проще всего было бы использовать скалярное произведение:
double dotprod = (x'' - x)*(x' - x) + (y'' - y)*(y' - y);
double len1 = sqrt((x' - x) * (x' - x) + (y' - y) * (y' - y));
double len2 = sqrt((x'' - x) * (x'' - x) + (y'' - y) * (y'' - y));
double angle = acos(dotprod/(len1*len2));
Это должно быть быстрее, чем использование закона косинусов.
Редактировать:
Мы можем опустить один sqrt
, если делаем так:
double dotprod = (x'' - x)*(x' - x) + (y'' - y)*(y' - y);
double len1squared = (x' - x) * (x' - x) + (y' - y) * (y' - y);
double len2squared = (x'' - x) * (x'' - x) + (y'' - y) * (y'' - y);
double angle = acos(dotprod/sqrt(len1squared*len2squared));
Этот расчет в основном такой же, как у @David.
sqrt
причинят боль. Вы не делаете те с законом косинуса. Если бы вас беспокоила скорость, вы бы переписали это всего одним вызовом sqrt
, но даже в этом случае закон косинусов будет быстрее. Наконец, не могли бы вы объяснить обоснование этого метода. В противном случае это выглядит просто волшебством для OP.
- person David Heffernan; 17.07.2011
(x, y)
.
- person Vlad; 17.07.2011
2bc
по закону косинусов без sqrt
?
- person Vlad; 17.07.2011
bc
, а затем есть acos
.
- person David Heffernan; 17.07.2011