Форум программистов, компьютерный форум CyberForum.ru

Найти угол, на основе координат мыши - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 5.00
Razzeeyy
 Аватар для Razzeeyy
30 / 7 / 2
Регистрация: 01.03.2011
Сообщений: 95
02.01.2012, 17:13     Найти угол, на основе координат мыши #1
Здравствуйте, пробую себя в написании простенькой игрушки, пока-что ничего не получается =(
Возникла вот такая проблема: есть изображение являющее собой "пушку" у танка, нужно естественной этой пушке целится в направлении курсора, соответственно нужно вычислять угол на основе положения мыши (и задавать вращение спрайту) , вот картинка для более точного понимания:
Схематическое изображение http://ompldr.org/vYzByYw
Делаю это дело вот так (с использованием SFML, да суть не в этом)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    void PointAt(double x, double y)
    {
        //угол вычисляется на основе теоремы синусов
        sf::Vector2f Position = sf::Sprite::GetPosition();
        double a = VecLength(Position, sf::Vector2f(0,1)); //вектор a всегда направлен вверх
        double b = VecLength(Position, sf::Vector2f(x,y));
        double c = VecLength(sf::Vector2f(0,1), sf::Vector2f(x,y));
 
        //теперь ищем угол (angle_C) напротив c
 
        double R = (a*b*c) / std::sqrt( (a+b+c)*(-a+b+c)*(a-b+c)*(a+b+c) ); //радиус описанной окружности
        double angle_C = std::asin( c/(2*R) );
 
        //и наконец задаем новый угол вращения
        std::cout<<angle_C<<std::endl; //эта линия -- быдлодебаг ^^
 
        sf::Sprite::SetRotation(angle_C);
    }
код не работает как надо: выдает nan в большинстве случаев, числа только в левом верхнем углу и то неправильные (в районе 0.1 - 2.0).

Помогите разобраться, пожалуйста.
Или есть какая-то более простая методика получения угла на основе положения мыши?

Заранее Благодарен.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
02.01.2012, 17:46     Найти угол, на основе координат мыши #2
C++
1
2
3
4
5
6
7
8
#include <math.h>
int main()
{
    const int X0 = 1, Y0 = 2;  // Координаты танка в окне
    const int X1 = 50, Y1 = 80;  // Координаты мыши
    const double angle = atan2(Y1 - Y0, X1 - X0);  // угол наклона в радианах
    return 0;
}
Razzeeyy
 Аватар для Razzeeyy
30 / 7 / 2
Регистрация: 01.03.2011
Сообщений: 95
02.01.2012, 18:18  [ТС]     Найти угол, на основе координат мыши #3
Nick Alte, спасибо, но он дает угол относительно оси X, а мне надо бы относительно Y....

шас попробую сделать 1/atan2...

Не получилось <_<

Добавлено через 17 минут
UPD, всё подумал головой -- получил 270-angle, работает и указывает туда куда надо
pafes
Сообщений: n/a
18.02.2012, 23:38     Найти угол, на основе координат мыши #4
А как найти угол относительно оси Z в 2D-пространстве? Буду очень благодарен за помощь.
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
19.02.2012, 16:39     Найти угол, на основе координат мыши #5
Хотелось бы ознакомиться с более чёткой постановкой вопроса. В частности, неясно, откуда в 2D-пространстве ось Z. Но в принципе вопрос решаем через скалярное произведение. Если взять z-координату вектора и поделить на его длину, получится косинус угла между вектором и осью Z.
pafes
Сообщений: n/a
19.02.2012, 18:58     Найти угол, на основе координат мыши #6
Суть в том, что у меня есть квадрат. И смотрим мы на него сверху, а сам он находится в двух плоскостях X и Y. Соответственно, если я не ошибаюсь, поворот осуществляться будет по Z-оси.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2012, 18:47     Найти угол, на основе координат мыши
Еще ссылки по теме:

C++ Найти угол, выраженный в радианах и градусах между векторами A(xa, ya) и B(xb, yb)
Дана гипотенуза с, и угол альфа прямоугольника, найти площадь и периметр C++
Найти угол направления. Есть начальная точка и следующая(направление) C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
20.02.2012, 18:47     Найти угол, на основе координат мыши #7
Похоже, что это аффинные преобразования на плоскости
Yandex
Объявления
20.02.2012, 18:47     Найти угол, на основе координат мыши
Ответ Создать тему
Опции темы

Текущее время: 03:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru