|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.03.2009, 17:59 | #1 |
Пользователь
Регистрация: 15.01.2009
Сообщений: 43
|
Не могу понять в чем ошибка (вроде школьная математика)
Задача посчитать углы между тремя отрезками с общей вершиной. Известны координаты вершин отрезков.
вот код вычисления угла между двумя отрезками (p1 - общая вершина, p2,p3 - несмежные вершины каждого из отрезков: function CalcAngle(p1,p2,p3:TPoint):extended ; var a,b,c:extended; begin a:=Length_of_segment(p1.X,p1.Y,p2.X ,p2.Y); b:=Length_of_segment(p1.X,p1.Y,p3.X ,p3.Y); c:=Length_of_segment(p2.X,p2.Y,p3.X ,p3.Y); CalcAngle:=ArcCos((a*a+b*b-c*c)/(2*a*b))*180/pi; end; Вроде школьная математика, но не могу понять, в чём дело. Когда все углы между отрезками больше 90град, то всё нормально: сумма всех углов в точности равна 360, а когда хотя бы один из углов меньше 90 градусов, то сумма углов может значительно отклоняться от 360. Почему? На всякий случай весь код во вложеном файле. // углы между отрезками от 0 до 180 град Последний раз редактировалось Алён@; 10.03.2009 в 18:02. |
10.03.2009, 19:33 | #2 |
Меркантильный кю
Участник клуба
Регистрация: 02.02.2008
Сообщений: 1,001
|
Ну дык, сумма и не обязана быть равна 360 градусам. Углом между лучами называется НАИМЕНЬШИЙ из углов, образованных прямыми, содержащими эти лучи. И область значений арккосинуса - это [0, pi]
Кстати непонятно зачем вы высчитываете третью сторону, если можно через скалярное произведение Код:
Росли вроде умными, выросли дурнями... (c)А.Васильев
|
10.03.2009, 19:40 | #3 |
Пользователь
Регистрация: 15.01.2009
Сообщений: 43
|
Да, точно, можно и так. Забыла. Со случаем на рис 3 понятно как. Всё норамально в случ на рис 2. А вот на рис 3 (когда только 1 угол острый) проблема: например, получилось 138+ 27+ 165=330 <>360!
|
10.03.2009, 19:44 | #4 |
Пользователь
Регистрация: 15.01.2009
Сообщений: 43
|
Я не через скалярное произведение шла, т.к у меня координаты вершин отрезков известны. А координаты отрезков нужно тогда вычислять. В итоге не на много короче со скалярным, по-моему.
|
10.03.2009, 20:25 | #5 |
Меркантильный кю
Участник клуба
Регистрация: 02.02.2008
Сообщений: 1,001
|
Скорее всего, у вас ошибка там, где формируются координаты точек, потому что эта функция с явно переданными данными работает правильно (в аттаче). Возможно, что где-то координаты точки, лежащей ниже общей, берутся так, что она получается выше (по результатам похоже).
Росли вроде умными, выросли дурнями... (c)А.Васильев
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
При выполнении программа отображает ошибку, в чем проблема понять не могу | Hyjak | Помощь студентам | 7 | 20.10.2008 23:48 |
Не могу понять в чем проблема (код) | diznt | Помощь студентам | 2 | 03.08.2008 10:20 |
Помогите понять в чем ошибка (работа со строками) | Edimus | Общие вопросы C/C++ | 1 | 22.11.2007 14:09 |
не могу понять... | Dutchman | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 14.12.2006 07:14 |