|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Anatoly Kochubey 2:5020/400 30 Apr 2003 15:07:05 To : Sergey Voloshchuk Subject : Re: Усреднение угл --------------------------------------------------------------------------------
Привет,
Мне кажется, что для двух углов можно так:
1. Прибавить к каждому из углов 360 - все углы станут положительные.
2. Взять остаток от деления на 360 - все углы окажутся в первом "обороте".
Вообще, у двух углов (напр. 1 и 359) есть два "средних" - "большой" (180) и
"малый" (0). Разница между ними - 180 градусов.
Практическую ценность, как я понимаю, имеет "малый" ;-)
3. Взять среднее арифметическое (можем получить как "большой", так и "малый"
угол).
4. Если разность углов больше 180:
4а. отнять (или прибавить, без разницы) 180 от результата и
"нормировать" (п 1, 2) результат.
4б. (взятия остатка) если результат > 180, отнять 180, если меньше -
прибавить 180.
pseudo-code:
int avgAngle(int angle1, int angle2) {
int result = 0;
angles1 = (angles1 + 360) % 360;
angles2 = (angles2 + 360) % 360;
result = (angle1 + angle2) / 2;
if(abs(angle1 - angle2) > 180) {
result -= 180;
result = (result + 360) % 360;
}
return result;
}
А вообще, для N углов, если допустима нецелочисленная арифметика, надо
представить каждый угол единичным вектором (cos, sin) и посчитать их
векторную сумму. Угол поворота вектора и есть искомый. Только вот для N
углов "среднего" может и не быть (при длине вектора = 0).
В этом случае, имхо, при четном числе углов за "средний" можно будет принять
любой средний из двух соседних, а при нечетном - любой из исходных (с
"периодом" 360 / N).
bw, Anatoly
----- Original Message -----
From: "Sergey Voloshchuk" <sww.kedr@overta.ru>
Newsgroups: fido7.ru.algorithms
To: "George Shuklin" <fido7.ru.algorithms@talk.ru>
Sent: Wednesday, April 30, 2003 8:09 AM
Subject: Re: Усреднение угл - fido7.ru.algorithms
> > Приведи всё к +-180 градусов. Как раз ноль и будет.
> >
> +179 и -179 - средний 0, а должно быть 180
>
>
> --
> Адрес этого сообщения в WWW: http://talk.mail.ru/article-25418096.html
> Пользовательское Соглашение: http://talk.mail.ru/agreement.html
> Для отмены подписки отправьте пустое письмо по адресу:
fido7.ru.algorithms-unsubscribe@talk.ru
--
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
--- ifmail v.2.15dev5
* Origin: Talk.Mail.Ru (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/23624bda91ed.html, оценка из 5, голосов 10
|