Дискуссионный математический форумМатематический форум
Математический форум Math Help Planet

Обсуждение и решение задач по математике, физике, химии, экономике

Теоретический раздел
Часовой пояс: UTC + 3 часа [ Летнее время ]
новый онлайн-сервис
число, сумма и дата прописью

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Вычислить угол(0-360) вектора через точки
СообщениеДобавлено: 01 сен 2018, 18:09 
Не в сети
Начинающий
Зарегистрирован:
01 сен 2018, 17:48
Сообщений: 3
Cпасибо сказано: 1
Спасибо получено:
0 раз в 0 сообщении
Очков репутации: 1

Добавить очки репутацииУменьшить очки репутации
Есть двухмерная система координат.
Есть точка n1(х1, у1).
Объект перемещается в точку n2(х2 у2).
Нужно вычислить угол вектора из точки n1 в n2 относительно оси y где север = 0/360 градусов, восток - 90, юг - 180 запад - 270.
Вычислять этот угол мне требуется программно.
Я без проблем могу написать код для четырёх частных случаев и, вероятно, так по-быстрому и сделаю в виде вычисления тангенса, определения четверти(юго-запад и т.д.), перевода тангенса в градусы, прибавки четвертей(90 градусов) с нулевой позиции.
Вопрос, может ли кто-то подсказать более эффективный способ вычисления направления вектора в моём случае?

Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Вычислить угол(0-360) вектора через точки
СообщениеДобавлено: 01 сен 2018, 18:57 
Не в сети
Beautiful Mind
Аватара пользователя
Зарегистрирован:
09 авг 2018, 23:20
Сообщений: 1011
Cпасибо сказано: 32
Спасибо получено:
121 раз в 116 сообщениях
Очков репутации: 8

Добавить очки репутацииУменьшить очки репутации
[math]\alpha = atan(\frac{y2-y1}{x2-x1})[/math]
Изображение

Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Вычислить угол(0-360) вектора через точки
СообщениеДобавлено: 01 сен 2018, 22:54 
Не в сети
Последняя инстанция
Аватара пользователя
Зарегистрирован:
15 мар 2016, 15:08
Сообщений: 9390
Cпасибо сказано: 122
Спасибо получено:
1726 раз в 1634 сообщениях
Очков репутации: 235

Добавить очки репутацииУменьшить очки репутации
atlakatl
И какова область значения арктангенса? Чуток формулу подправить надо.

Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Вычислить угол(0-360) вектора через точки
СообщениеДобавлено: 01 сен 2018, 23:05 
Не в сети
Beautiful Mind
Аватара пользователя
Зарегистрирован:
09 авг 2018, 23:20
Сообщений: 1011
Cпасибо сказано: 32
Спасибо получено:
121 раз в 116 сообщениях
Очков репутации: 8

Добавить очки репутацииУменьшить очки репутации
searcher
Если проекции x1 и x2 на стрелку совпадают, то функция значения не имеет. Но это же значит, что [math]\alpha =\frac{ \pi }{ 2 }[/math]

Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Вычислить угол(0-360) вектора через точки
СообщениеДобавлено: 03 сен 2018, 19:40 
Не в сети
Начинающий
Зарегистрирован:
01 сен 2018, 17:48
Сообщений: 3
Cпасибо сказано: 1
Спасибо получено:
0 раз в 0 сообщении
Очков репутации: 1

Добавить очки репутацииУменьшить очки репутации
atlakatl писал(а):
[math]\alpha = atan(\frac{y2-y1}{x2-x1})[/math]
Изображение


xDiff = x - xPrev;
yDiff = y - yPrev;
radians = Math.Atan(yDiff / xDiff);
degrees = radians * (180 / Math.PI);

Получаю при этом:
north = 90, south = -90, east = west = 0.
NE = SW = 45, NW = SE = -45.

Не совсем понимаю как я могу данную формулу использовать, так как я не получаю ни ожидаемого результата, ни возможности как-то преобразовать данный результат в желаемый.

Должно быть как сейчас у меня с обработкой частных случаев работает:
N = 0, NE = 45, E = 90, SE = 135 и так до 359,(9).

К примеру частный случай на x > 0, y <= 0:
radians = Math.Abs(Math.Atan2(yDiff, xDiff));
degrees = (radians * (180 / Math.PI)) + 90;

Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Вычислить угол(0-360) вектора через точки
СообщениеДобавлено: 03 сен 2018, 22:53 
Не в сети
Light & Truth
Зарегистрирован:
02 дек 2016, 22:55
Сообщений: 5208
Cпасибо сказано: 341
Спасибо получено:
924 раз в 873 сообщениях
Очков репутации: 131

Добавить очки репутацииУменьшить очки репутации
Я правильно понимаю, что углы у вас отсчитываются в направлении, обратном общепринятому? Т.е. если встать лицом на север, то восток у вас слева, а не справа? А север совпадает с направлением роста координат на оси абсцисс?

Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Вычислить угол(0-360) вектора через точки
СообщениеДобавлено: 04 сен 2018, 00:03 
Не в сети
Light & Truth
Зарегистрирован:
02 дек 2016, 22:55
Сообщений: 5208
Cпасибо сказано: 341
Спасибо получено:
924 раз в 873 сообщениях
Очков репутации: 131

Добавить очки репутацииУменьшить очки репутации
Короче, если это так, то можно результирующий угол записать одной формулой. Не уверен, правда, что в вычислительном смысле это будет экономней.

[math]\alpha = \frac{180}{\pi} \operatorname{arctg}{\frac{y_2-y_1}{x_2-x_1}} + 90 (3 +\operatorname{sgn}(x_2-x_1)) \pmod{360}[/math]

По модулю берётся всё, что справа от знака равенства. Модуль нужен, чтобы загнать угол в пределы [math]0^{\circ} - 360^{\circ}[/math].

Направление на чистый восток-запад формула, естественно, не даёт (деление на 0 и всё такое), это нужно отдельно считать.

Вернуться к началу
 Профиль  
Cпасибо сказано 
За это сообщение пользователю Booker48 "Спасибо" сказали:
LndBochkarev
 Заголовок сообщения: Re: Вычислить угол(0-360) вектора через точки
СообщениеДобавлено: 04 сен 2018, 17:14 
Не в сети
Начинающий
Зарегистрирован:
01 сен 2018, 17:48
Сообщений: 3
Cпасибо сказано: 1
Спасибо получено:
0 раз в 0 сообщении
Очков репутации: 1

Добавить очки репутацииУменьшить очки репутации
Booker48

Записал данную формулу как:
xDiff = x - xPrev;
yDiff = y - yPrev;
degrees = (180 / Math.PI * Math.Atan(yDiff / xDiff) + 90 * (3 + Math.Sign(xDiff))) % 360;
Получаю такие результаты:
north = 0, south = 180, east = 180, west = 0.
NE = 45, SE = 315, SW = 225, NW = 135.
Функция выполняет вычисление всех значений, кроме сторон с 90 и 270 градусами. Может помочь мне в будущем сократить мою серию if/else выражений.
Спасибо.

Не понял комментария про направление отсчёта и стороны света.
Не знаю ничего про общепринятое направление отсчёта, но мне было бы удобно вести отсчёт с севера и по часовой стрелке. В целом это не особо важно, лишь бы можно было направление определить.
Стороны света я указываю как на компасе: https://upload.wikimedia.org/wikipedia/ ... st.svg.png

Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Вычислить угол(0-360) вектора через точки
СообщениеДобавлено: 04 сен 2018, 19:26 
Не в сети
Light & Truth
Зарегистрирован:
02 дек 2016, 22:55
Сообщений: 5208
Cпасибо сказано: 341
Спасибо получено:
924 раз в 873 сообщениях
Очков репутации: 131

Добавить очки репутацииУменьшить очки репутации
LndBochkarev писал(а):
Функция выполняет вычисление всех значений, кроме сторон с 90 и 270 градусами.

Ну да, я об этом и предупредил в последней фразе. Даже странно, что программа что-то выдала для точек с равными абсциссами, по идее должно быть какая-нибудь divide-by-zero error.
LndBochkarev писал(а):
Не знаю ничего про общепринятое направление отсчёта, но мне было бы удобно вести отсчёт с севера и по часовой стрелке.

Север принято указывать вверху, восток справа (см. глобус :) ). Но в прямоугольной системе координат вышеуказанными (не только мной, но и другими участниками темы) формулами задаётся угол наклона прямой (ну, или вектора в вашем случае) к оси абсцисс. Т.е. [math]0^{\circ}[/math] — это справа, а не вверху. И увеличение угла идёт не по, а против часовой стрелки.
Так что если вам надо указывать углы как на приведённой вами картинке компаса, то вам надо
а) изменить условие поставленной вами задачи (у вас не как на компасе, почему я и переспросил);
б) поправить формулу так, чтобы она ему соответствовала.

Вернуться к началу
 Профиль  
Cпасибо сказано 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему      Страница 1 из 1 [ Сообщений: 9 ]

 Похожие темы   Автор   Ответы   Просмотры   Последнее сообщение 
Вычислить поток вектора через часть поверхности

в форуме Интегральное исчисление

pantheonptz

11

558

11 фев 2018, 11:20

Вычислить координаты вектора относительно базиса вектора

в форуме Аналитическая геометрия и Векторная алгебра

Camilla1910

1

566

11 ноя 2014, 22:18

Поток вектора через поверхность

в форуме Векторный анализ и Теория поля

identam

2

302

29 апр 2020, 10:45

Выразить вектор через три других вектора

в форуме Аналитическая геометрия и Векторная алгебра

mayer

1

1630

02 окт 2015, 18:20

Поток вектора через замкнутую поверхность

в форуме Векторный анализ и Теория поля

TeslaNeNicola

7

368

23 окт 2021, 19:01

Найти поток вектора через поверхность

в форуме Векторный анализ и Теория поля

Miir

13

597

06 дек 2020, 19:28

Поток вектора напряженности через поверхность куба

в форуме Электричество и Магнетизм

marii

2

422

14 янв 2021, 20:38

Составить уравнение прямой и плоскости через точку и вектора

в форуме Аналитическая геометрия и Векторная алгебра

Morgan031

7

339

22 дек 2020, 16:23

Найти минимальный угол наклона плоскости через ЗСЭ

в форуме Механика

MuCTeP_TTP0

12

356

19 авг 2023, 13:55

Нахождение объема парллелепипеда через двугранный угол

в форуме Геометрия

adtsvetkov

1

237

30 янв 2017, 01:59


Часовой пояс: UTC + 3 часа [ Летнее время ]



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Яндекс.Метрика

Copyright © 2010-2023 MathHelpPlanet.com. All rights reserved