Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как рассчитать положение курсора. / 20 сообщений из 20, страница 1 из 1
05.02.2015, 11:51
    #38872060
Pavluha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рассчитать положение курсора.
Есть круг, как часы. Нужно при перемещении времени точно определять сколько времени по курсору.
Как это сделать?
...
Рейтинг: 0 / 0
05.02.2015, 11:52
    #38872066
Pavluha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рассчитать положение курсора.
При перемещении курсора мыши определить сколько времени.
Извиняюсь, что непонятно написал
...
Рейтинг: 0 / 0
05.02.2015, 11:57
    #38872077
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рассчитать положение курсора.
PavluhaПри перемещении курсора мыши определить сколько времени.
Извиняюсь, что непонятно написал

Да и второй вариант не сильно понятнее. Какое время прошло? От чего отчитываете? И для чего?
...
Рейтинг: 0 / 0
05.02.2015, 12:09
    #38872096
Pavluha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рассчитать положение курсора.
Arm79,

При нажатии на любое место круга считать эту точку отсчета. 0 часов 0 мин.
При движении мыши определить какое смещение сделано и по этому смещению понять сколько это времени от начальной точки.

Я считать пробовал так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
 void OnMouseDown(object sender, MouseButtonEventArgs e)
        {
            _isCatch = true;
            _startP = e.GetPosition(rtc1);
        }

        void OnMouseUp(object sender, MouseButtonEventArgs e)
        {
            _isCatch = false;
        }

        void OnMouseMove(object sender, MouseEventArgs e)
        {
            if (_isCatch)
            {
                _endP = e.GetPosition(rtc1);
                var diff_x = _endP.X - _startP.X;
                var diff_y = _endP.Y - _startP.Y;
                var radians = Math.Atan2(diff_x, diff_y);
                _angle = radians * (180 / Math.PI);
            }
        }
...
Рейтинг: 0 / 0
05.02.2015, 12:15
    #38872104
Pavluha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рассчитать положение курсора.
Но круг мотает очень быстро, не соответствует движению времени
...
Рейтинг: 0 / 0
05.02.2015, 12:22
    #38872116
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рассчитать положение курсора.
Все равно непонятно. Есть некоторый круг. Что за круг? И почему он мотает?
...
Рейтинг: 0 / 0
05.02.2015, 12:27
    #38872125
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рассчитать положение курсора.
Да уж, если ТС человеку не может объяснить, что он хочет, то компьютеру - и подавно.

Есть предположение, что он пытается определить направление вектора движения курсора (и это подразумевает под словом "время" (стрелка часов))
...
Рейтинг: 0 / 0
05.02.2015, 12:32
    #38872132
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рассчитать положение курсора.
Shocker.ProДа уж, если ТС человеку не может объяснить, что он хочет, то компьютеру - и подавно.

Есть предположение, что он пытается определить направление вектора движения курсора (и это подразумевает под словом "время" (стрелка часов))
А что в таком случае вращается? :-)
...
Рейтинг: 0 / 0
05.02.2015, 12:35
    #38872138
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рассчитать положение курсора.
Arm79А что в таком случае вращается? :-)мысли, в голове у ТС

вектор и вращается, отслеживается ведь малейшее движение мыши, наверное нужно как-то усреднять на отрезке времени.

но пока это только мой предположительный "реверс-инжиниринг мозговой деятельности заказчика"(с)
...
Рейтинг: 0 / 0
05.02.2015, 12:40
    #38872152
Pavluha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рассчитать положение курсора.
Есть контрол, круг. На нем куча объектов, положение которых рассчитываются относительно времени.
Я хочу сделать так, чтобы пользователь мог вращать этот контрол и объекты на нем при вращении меняли свое положение.
Этот круг, как и круг часов содержит 360 градусов - 12 часов. Т.е в 1 мин 0.5 градуса.
Необходимо при движении мыши рассчитывать угловое расстояние от начальной точки (нажатие ЛКМ), и перевести это расстояние в градусы, а потом в время.
...
Рейтинг: 0 / 0
05.02.2015, 12:47
    #38872170
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рассчитать положение курсора.
Ну то есть вопрос на самом деле в форум по математике - как рассчитать угол, зная координаты вектора.
...
Рейтинг: 0 / 0
05.02.2015, 12:54
    #38872182
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рассчитать положение курсора.
Shocker.ProНу то есть вопрос на самом деле в форум по математике - как рассчитать угол, зная координаты вектора.
Так, теперь прояснилось

Итак, есть некий круг, в котором распиханы контролы. Нужно тыкнуть в одно место, потом в другое, и на получившийся угол развернуть этот круг.

Теперь вопрос - смещается только левый верхний угол, а сами внутренние контролы сохраняют горизонтальное размещение? Или все координаты (и тогда кнопка повёрнута на какой то угол)?
...
Рейтинг: 0 / 0
05.02.2015, 12:57
    #38872185
Ilya81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рассчитать положение курсора.
Могут быть варианты и проще, в WPF'овском типе данных Vector есть функция расчёта угла между векторами. Хотя, через скалярное произведение он вычисляется в одну строчку.
...
Рейтинг: 0 / 0
05.02.2015, 12:58
    #38872189
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рассчитать положение курсора.
тут для начала вопрос, правильно ли рассчитывается _angle

потому что ТС не приводит код вращения круга, а приводит код расчета угла

геометрию я помню плохо, а в справочник лезть лень
...
Рейтинг: 0 / 0
05.02.2015, 12:58
    #38872190
Pavluha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рассчитать положение курсора.
Arm79,

Смещение может быть, как по часовой, так и против часовой стрелки.
Против часовой - уменьшение времени, по часовой увеличение соответственно.
...
Рейтинг: 0 / 0
05.02.2015, 12:59
    #38872195
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рассчитать положение курсора.
PavluhaArm79,

Смещение может быть, как по часовой, так и против часовой стрелки.
Против часовой - уменьшение времени, по часовой увеличение соответственно.
Это ответ на какой вопрос? Я спрашивал другое.
...
Рейтинг: 0 / 0
05.02.2015, 13:13
    #38872224
Pavluha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рассчитать положение курсора.
Arm79,

Не обращайте внимания на контролы. Для них есть код расчета, который работает корректно.
Метод получает на входе дату и время и все. Осталось только определять корректно угол смещения курсора и все.
...
Рейтинг: 0 / 0
05.02.2015, 13:54
    #38872287
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рассчитать положение курсора.
берешь 2 вектора: от центра к точке нажатия и от центра к текущей позиции курсора
открываешь http://ru.onlinemschool.com/math/library/vector/angl/ читаешь, делаешь
...
Рейтинг: 0 / 0
05.02.2015, 14:24
    #38872328
Pavluha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рассчитать положение курсора.
Roman Mejtes,

Спасибо, я уже рассчитал.
Если кому понадобится:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
void OnMouseDown(object sender, MouseButtonEventArgs e)
        {
            _isCatch = true;
            _startP = e.GetPosition(rtc1);
        }

        void OnMouseUp(object sender, MouseButtonEventArgs e)
        {
            _isCatch = false;
            _curDate = _moveDate;
        }

        void OnMouseMove(object sender, MouseEventArgs e)
        {
            if (_isCatch)
            {
                _endP = e.GetPosition(rtc1);
                var lenA = Math.Sqrt(Math.Pow(_startP.X - _model.Radius, 2) + Math.Pow(_startP.Y - _model.Radius, 2));
                var lenB = Math.Sqrt(Math.Pow(_endP.X - _model.Radius, 2) + Math.Pow(_endP.Y - _model.Radius, 2));
                var lenC = Math.Sqrt(Math.Pow(_startP.X - _endP.X, 2) + Math.Pow(_startP.Y - _endP.Y, 2));

                var radians = Math.Acos((Math.Pow(lenA, 2) + Math.Pow(lenB, 2) - Math.Pow(lenC, 2)) / (2 * lenA * lenB));
                _angle = radians * (180 / Math.PI);
                var res = _gradMin * _angle;
                _moveDate = _curDate.AddMinutes(res);
            }
        }



Только пока осталось рассчитать правильно угол, когда угол переходит из острого в тупой.
...
Рейтинг: 0 / 0
09.02.2015, 12:55
    #38874696
LameUser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как рассчитать положение курсора.
PavluhaЕсть контрол, круг. На нем куча объектов, положение которых рассчитываются относительно времени.
Я хочу сделать так, чтобы пользователь мог вращать этот контрол и объекты на нем при вращении меняли свое положение.
Этот круг, как и круг часов содержит 360 градусов - 12 часов. Т.е в 1 мин 0.5 градуса.
Необходимо при движении мыши рассчитывать угловое расстояние от начальной точки (нажатие ЛКМ), и перевести это расстояние в градусы, а потом в время.

Зачем вам привязка ко времени? Для чего? Еще и сделали входным параметром в какой-то работающий метод поворота.

Что бы я сделал на вашем месте.

1. В топку время, переписываем метод, который принимает угол поворота (от 0 до 360 градусов, или от 0 до 2pi, или -pi + pi и т.д. что удобнее для вашего восприятия/пользования методом. Можете сделать overload методы.
2. Сводим задачу для поиска угла поворота - т.е. находим угол между векторами относительно начального положения мыши, и относительно конечного от какого-то начала координат.
Т.е. :
вектор 1 (это начало координат) - (начальное положение мыши)
вектор 2 (это начало координат) - (конечное положение мыши)
Здесь незамысловато написано как найти косинус угла между ними http://ru.onlinemschool.com/math/library/vector/angl/ .
Примените арккосинус к найденному значению.
3. Передаем найденный угол в метод поворота (еще раз подчеркну - в топку время).
4. Вуаля!
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как рассчитать положение курсора. / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]