Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Движение мыши под определенным углом, работа с мышью 
:(
    Опции темы
Clasteruga
Дата 12.7.2011, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 24.9.2008

Репутация: нет
Всего: 1



всем доброго времени суток.......опишу суть задания: двигаем мышкой по форме, если нажали Шифт то запоминается текущая позиция курсора, это будет координаты точки(вектора) 1, двигаем мышь дальше, отпустили Шифт, запомнили текущие координаты курсора, они будут являться координатами точки 2. Необходимо вычислить угол между этими двумя векторами и что бы мышка после этого могла ходить только под вычисленным углом.

Фиксацию координат и вычисление угла описал.....теперь не знаю как сделать что бы эта самая мышь двигалась только под определенным углом.....знаю что необходимо использовать SetCursorPos.....только вот не знаю как описать параметры внутри этой функции так что бы мышь двигались под углом ??? 

Это сообщение отредактировал(а) Clasteruga - 20.7.2011, 09:15
PM MAIL   Вверх
northener
Дата 12.7.2011, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(Clasteruga @  12.7.2011,  19:59 Найти цитируемый пост)
Необходимо вычислить угол между этими двумя векторами и что бы мышка после этого могла ходить только под вычисленным углом.

Т.е. понимать нужно так, что после отпускания Шифт и вычисления угла мышь вообще никогда нельзя было бы передвинуть не "под этим углом"?


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Clasteruga
Дата 12.7.2011, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 24.9.2008

Репутация: нет
Всего: 1



за исключением если пользователь укажет новые точки
PM MAIL   Вверх
northener
Дата 12.7.2011, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Я это спросил к тому, что так как описан алгоритм в топике, то мышь после отпускания Шифт должна будет ходить не столько "под определенным углом", сколько "только по той прямой", которой принадлежат те две точки. 


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Clasteruga
Дата 12.7.2011, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 24.9.2008

Репутация: нет
Всего: 1



ну в принципе да, только она может не только по одной линии а как показано на рисунке 2, там угол 45*, и мышь может ходить получается в левый верхний угол, в правый верхний угол, в нижний и т.д
PM MAIL   Вверх
northener
Дата 13.7.2011, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(Clasteruga @  12.7.2011,  22:40 Найти цитируемый пост)
ну в принципе да,

Ну в принципе понял.
Понял что сама задача мне абсолютно не понятна.
Ну да. Угол вычИслили. А дальше то что? 
  1. Нужно отслеживать перемещение мыши пользователем? И помещать курсор в каждый момент перемещения в ту точку, которая наиболее близка к одному из четырёх отрезков исходящих из точки 2? И при новом нажатии на Шифт задавать новый угол возможного перемещения?
  2. Автоматически перемещать курсор по одному из этих четырех отрезков?

P.S. Если это "задание", то лучше не "описывать суть" задания, а приводить задание именно в том виде, в котором оно было задано.


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Clasteruga
Дата 13.7.2011, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 24.9.2008

Репутация: нет
Всего: 1



1. Да
2. Пользователь сам двигает мышью, но она может перемещаться только по этим отрезкам, на любое расстояние

Это сообщение отредактировал(а) Clasteruga - 13.7.2011, 09:51
PM MAIL   Вверх
Clasteruga
Дата 14.7.2011, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 24.9.2008

Репутация: нет
Всего: 1



вот есть кое какие наработки только после того как поставил 2 точку и начинаю двигать мышью она начинает мерцать сильно и судня по все получать сразу 2 координаты 

Код

 Form1: TForm1;

cX,cY,pX,pY,cX2,cY2,Ugol:Integer;
bPoint, bLine : boolean;
Angle : Integer; //Угол, под катоым пересекаются прямые

implementation

{$R *.dfm}

function PosFromAngle(cX, cY : Integer; rLen : cardinal; Angle: Extended): TPoint;
begin
//Координаты точки лежащей на окружности, радиусом rLen
//с центром cX,cY и углом Angle
  Result.X:= cX+Round(rLen*Cos(DegToRad(Angle)));
  Result.Y:= cY+Round(rLen*Sin(DegToRad(Angle)));
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 if Button = mbLeft then
  begin
   Cx := X;
   Cy := Y;
   bPoint := false;
   Label1.Caption := 'Точка 1 : X = '+inttostr(cx)+' Y = '+inttostr(cy);
   Form1.Canvas.Pixels[Cx,cY]:=ClBlack;
  end;
    if button = mbRight then
      begin
        Cx2 := X;
        Cy2 := Y;
        Label2.Caption := 'Точка 2: X = '+inttostr(cx2)+' Y = '+inttostr(cy2);
        bPoint := true;
        Form1.Canvas.Pixels[cX2,cY2]:=ClBlack;
        Ugol := Round (180*arctan2(cY2-cY,cX2-cX)/pi);
        Label3.Caption := 'Угол = ' + inttostr(ugol);
      end;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var Pos:TPoint;
  begin
    Edit1.Text := 'X = '+inttostr(x);
    Edit2.Text := 'Y = '+inttostr(y);
         if bPoint then
        begin
         //cX,cY, - координаты центра
        //cx2,cy2 - координаты 2 точки
        //pX,pY - предыдущие координаты
          //If (X = pX) and (Y = pY) then exit; //Если перемещения не было - выходим.
          If (X > cX2) and (Y > cY2) then Angle := Ugol else
          If (X > cX2) and (Y < cY2) then Angle := Ugol + 90 else
          If (X < cX2) and (Y < cY2) then Angle := Ugol + 180 else
          If (X < cX2) and (Y > cY2) then Angle := Ugol + 270 ;
           Pos := PosFromAngle(cX2, cY2, Round (sqrt(sqr(cX2 - X) + sqr (cY2 - Y))), Angle);
           SetCursorPos(ClientOrigin.X + pos.X, ClientOrigin.Y + pos.Y);
           Form1.Canvas.Pixels[X,Y]:=clBlack;
           abort;
           //pX := X;
           //pY := Y;
       end;
      end;

procedure TForm1.FormResize(Sender: TObject);
begin
 bPoint := false;
end;

end.

PM MAIL   Вверх
northener
Дата 15.7.2011, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Так тебе ещё и рисовать нужно?!




--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
northener
Дата 15.7.2011, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Кстати. Никаких "Шифтов" в представленном коде не нашел. :(

Цитата(Clasteruga @  14.7.2011,  08:56 Найти цитируемый пост)
вот есть кое какие наработки

Откуда нарыл?


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Clasteruga
Дата 19.7.2011, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 24.9.2008

Репутация: нет
Всего: 1



Цитата(northener @ 15.7.2011,  01:37)
Кстати. Никаких "Шифтов" в представленном коде не нашел. :(

Цитата(Clasteruga @  14.7.2011,  08:56 Найти цитируемый пост)
вот есть кое какие наработки

Откуда нарыл?

Не рисовать не надо это я так сделал что бы было видно как движется мышь .....Немного помогли.......с шифтом я разберусь......он есть но я его не вставлял решил пока с мышкой сделать....можете подсказать в чем проблемка????? почему курсор мерцает и двигается сразу в 2-х направлениях?

Это сообщение отредактировал(а) Clasteruga - 19.7.2011, 13:40
PM MAIL   Вверх
northener
Дата 20.7.2011, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(Clasteruga @  19.7.2011,  13:39 Найти цитируемый пост)
Не рисовать не надо это я так сделал что бы было видно как движется мышь .....Немного помогли.......с шифтом я разберусь......он есть но я его не вставлял решил пока с мышкой сделать....можете подсказать в чем проблемка????? почему курсор мерцает и двигается сразу в 2-х направлениях?

Задачу озвучь. И плюнь на "некоторые наработки".


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Clasteruga
Дата 20.7.2011, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 24.9.2008

Репутация: нет
Всего: 1



необходимы рассчитать угол между 2-мя векторами и после этого когда пользователь двигает мышкой она должна двигаться только под этим углом в 4-х направлениях смотри рисунок ниже................

Это сообщение отредактировал(а) Clasteruga - 20.7.2011, 09:15

Присоединённый файл ( Кол-во скачиваний: 13 )
Присоединённый файл  ugol.JPG 15,79 Kb
PM MAIL   Вверх
northener
Дата 21.7.2011, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(Clasteruga @  20.7.2011,  09:11 Найти цитируемый пост)
необходимы рассчитать угол между 2-мя векторами и после этого когда пользователь двигает мышкой она должна двигаться только под этим углом в 4-х направлениях смотри рисунок ниже................


Я же просил описать задачу! Реальную задачу, а не теоретический вопрос!

P.S. Рисунок ниже мало помогает понять суть задачи.


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Clasteruga
Дата 21.7.2011, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 24.9.2008

Репутация: нет
Всего: 1



 smile  задача в том и состоит что бы мышь двигалась по форме только под вычисленным углом...... в 4-х направлениях как на рисунке относительно вектора 1.....красными линиями показано как может двигаться мышь после того как был вычислен угол  
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0903 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.