Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2013, 20:27   #1
Almaos
Новичок
Джуниор
 
Регистрация: 25.04.2013
Сообщений: 2
По умолчанию C# и тригонометрия

Покопал форум, но нужного материала не нашел, если таковой имеется, прошу извинить и дать ссылку на него.
Проблема заключается в следующем:
Есть система координат с нулем в верхнем левом углу и есть две точки Х1,Y1 и X2,Y2. Х1,Y1 это координата стрелки которая должна указывать на координату X2,Y2. Собственно мне нужно найти как-то радиану/градус для этой самой срелки. Кое-что нашел на эту тему:
ax = Х1 - X2
ay =Y1 -Y2
radian = Math.Atan2(rY , rX)

Все хорошо но значение радиан идет от 0 до 3.14, т.е. полукруг, остальная часть идет с отрицательными значениями от -3.14 и до 0. Как с этим бороться?
Almaos вне форума Ответить с цитированием
Старый 26.04.2013, 13:18   #2
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

А зачем с этим бороться вообще? Да и направление лучше вектором показывать… ну тут говориться – хозяин барин…
dampirik вне форума Ответить с цитированием
Старый 26.04.2013, 13:47   #3
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

В студии есть класс Vector.
Находится в сборке WindowsBase FW4.0 (возможно и в ранних)
Сборку добавляете к проекту и выбираете пространство System.Windows;

Код:
double X1 = 0;
double Y1 = 0;

double X2 = 20;
double Y2 = 20;

double AxisX1 = 0;
double AxisY1 = 0;

double AxisX2 = 20;
double AxisY2 = 0;

// вектор стрелки
Vector V1 = new Vector(X2 - X1, Y2 - Y1);

// вектор горизонтальной оси
Vector Axis = new Vector(AxisX2 - AxisX1, AxisY2 - AxisY1);

// угол в градусах
double Angle = Vector.AngleBetween(V1, Axis);
Так мне кажется намного проще. Вместо оси можете задать нужный вам опорный вектор. Особое внимание обратите на расположение векторов, так как от этого зависит угол.
См. приложение.
Изображения
Тип файла: png Эскиз.png (4.0 Кб, 61 просмотров)
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 26.04.2013, 20:46   #4
Almaos
Новичок
Джуниор
 
Регистрация: 25.04.2013
Сообщений: 2
По умолчанию

Проблема решена, спасибо WorldMaster.

Код:
V1 = X1 - X1, Y1 - (Y1 + 10);
V2 = (X1 - X2, Y1 - Y2);

Angle = Vector.AngleBetween(V1, V2);
radian = (180 + Angle) * (PI / 180);
Almaos вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VBA тригонометрия valtuno Помощь студентам 8 17.03.2012 11:51
тригонометрия в Delphi Bogood Помощь студентам 5 24.03.2009 17:31
Тригонометрия Teleport Помощь студентам 8 04.06.2008 17:51