Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Узнать угол по трём точкам, Pascal/Delphi 
:(
    Опции темы
TDM
Дата 11.5.2006, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 1.2.2006
Где: SPB

Репутация: нет
Всего: нет



Даны координаты трёх точек (с1,с2,с3) Узнать угол между ними в градусах. Подскажите как. 
PM MAIL ICQ   Вверх
Fin
Дата 11.5.2006, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: 1
Всего: 10



Можно поиграться с формулой теоремы косинусов:
A^2=B^2+C^2-2*A*B*Cos(Alfa) 


--------------------
Пролетал мимо.
PM MAIL   Вверх
maxim1000
Дата 11.5.2006, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



переделываем это в два вектора: c2c1 и c2c3
находим их длины (корень из суммы квадратов)
находим векторное произведение
делим на длины векторов
получаем синус угла... 


--------------------
qqq
PM WWW   Вверх
Magister Y0da
Дата 12.5.2006, 07:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зелёненький
*


Профиль
Группа: Участник
Сообщений: 235
Регистрация: 30.11.2004

Репутация: 2
Всего: 2



Можно обыкновенные координаты перевести в полярные и все 
--------------------
PM MAIL ICQ   Вверх
SoWa
Дата 12.5.2006, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 6
Всего: 74



Можно поизвращаться с уравнениями прямых. Извлечь оттуда тангенсы угла наклона, и из большего вычесть меньший угол.
Но лучше делать так, как предложил maxim1000.
2JIAMEP, глупо. С уравнениями прямых и то легче. С сисетмами координат будешь возиться долго. И еще: так можно было бы решать. если бы вершина угла была в нуле. А так она где угодно. И поэтому задачу так не решить. 


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
maxim1000
Дата 12.5.2006, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



если уж сравнивать, то мне кажется, что для углов, близких к 0 и 180 стоит использовать векторное произведение, а для близких к 90 - скалярное (т.е. через теорему косинусов)
причина - точность: в первом случае arcsin точнее, а во втором - arccos

общее правило может быть таким:
берём любой из двух методов, определяем угол, если он получился из "чужой" области применения - берём другой метод 


--------------------
qqq
PM WWW   Вверх
6TITLIZ
Дата 12.5.2006, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 17.1.2006
Где: Сургут

Репутация: нет
Всего: нет



Код

  Al := arcsin((2 * S)/(AB*CA));
  Al := (180/pi)*Al;


S - площадь
AB CA - стороны

Почему у меня не правильно определяется градус тупого угла? С острыми и прямыми проблем нет 
PM MAIL ICQ   Вверх
poor_yorik
Дата 12.5.2006, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 12.1.2005
Где: Общаги г. Киева

Репутация: 3
Всего: 8



 Потому что арксинус не работает с тупыми углами, вместо этого у тебя будет отрицательный угол, и тебе над будет прибавить к нему 180 градусов. 
--------------------
Семь раз отмерь, один раз - откомпиль.... Семь раз отпей, один раз - отлей... Семь раз отъешь, один раз - не жадничай и другим дай...
PM MAIL YIM   Вверх
6TITLIZ
Дата 12.5.2006, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 17.1.2006
Где: Сургут

Репутация: нет
Всего: нет



poor_yorik, Как быть? smile 

 smile  
PM MAIL ICQ   Вверх
TDM
Дата 12.5.2006, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 1.2.2006
Где: SPB

Репутация: нет
Всего: нет



Наверное так:
Код

IF Al<0 then
 Inc(AI,180);
 
PM MAIL ICQ   Вверх
6TITLIZ
Дата 13.5.2006, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 17.1.2006
Где: Сургут

Репутация: нет
Всего: нет



Он мне выдает Al=36 (пример) А нужно 180-36. Угол тупой, а он выдаёт как острый.
Тут проверкой дело не спасёшь... 
PM MAIL ICQ   Вверх
TDM
Дата 28.5.2006, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 1.2.2006
Где: SPB

Репутация: нет
Всего: нет



Напишите пример. 
PM MAIL ICQ   Вверх
Earnest
Дата 30.5.2006, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 7
Всего: 183



Нужно свычислять и синус, и косинус (т.е. пропорциональные им величины), и определять угол с учетом знака обоих. Не знаю как в Паскале, а в С есть ф-я atan2, которая это умеет.
Т.е. получается что-то вроде 
Код

phi = atan2 (<векторное произведение>,<скалярное произведение>);
 


--------------------
...
PM   Вверх
Magister Y0da
  Дата 31.5.2006, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зелёненький
*


Профиль
Группа: Участник
Сообщений: 235
Регистрация: 30.11.2004

Репутация: 2
Всего: 2



Скажим С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_...ina/1_AG.html#2 

поиск через rambler "нахождения угла" вторая ссылка 

Это сообщение отредактировал(а) JIAMEP - 31.5.2006, 14:08
--------------------
PM MAIL ICQ   Вверх
6TITLIZ
Дата 15.6.2006, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 17.1.2006
Где: Сургут

Репутация: нет
Всего: нет



А можно как нибудь заранее определить: тупой или острый угол?
Код

 Al := arcsin((2 * S)/(AB*CA));
 Al := Al * 57; - острый 
или 
Al := 180 - (Al*57); - тупой


И вопрос в догонку: Как можно округлить градусную меру до минут?
Чтоб можно было выводить 45* 17" 
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0811 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.