purebasic.info

PureBasic forum
Текущее время: Пн дек 10, 2018 6:36 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: интерполяция чисел
СообщениеДобавлено: Ср ноя 28, 2018 6:31 pm 
Не в сети
доцент

Зарегистрирован: Вт авг 02, 2011 7:59 pm
Сообщений: 66
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Есть код которым я хочу отобразить скорость движения мыши в одной оси (проще запустить посмотреть чем объяснить)
Но т.к. входные данные слишком быстро меняются выглядит это довольно дерганно.
Возможно ли это дело как-то интерполировать без добавления слишком большой задержки?
Код:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
 
Global yellow =RGB(255,255,0)
Global white =RGB(255,255,255)
Global offset
 
Procedure MouseMoveX()
   Static lastx
   Static callflag
   If Not callflag
      callflag=1
      lastx=DesktopMouseX()
      ProcedureReturn 0
   EndIf
   n=lastx
   lastx=DesktopMouseX()
   ProcedureReturn DesktopMouseX()-n
 EndProcedure
 
OpenWindow(1,0,0,800,600,"", #PB_Window_BorderLess)
SetWindowColor(1,RGB(250,255,255))
 
CanvasGadget(1,0,0,800,600)
    StartDrawing(CanvasOutput(1))
      Box(0,0,800,600,0)
       Box(400,100,3,3,RGB(255,255,0))
    StopDrawing()
   
   
Procedure mousemovement(void)
  Repeat  
    Delay(5)
    n = MouseMoveX()
     offset = n*2
  ForEver
EndProcedure
   
   
Procedure draw(void)
Repeat:Delay(5)      
    StartDrawing(CanvasOutput(1))
    Box(0,0,800,600,0)
    Box(399,99,3,3,yellow)
   
       Box(400,100,width+offset,300,yellow)
 
   
StopDrawing()
ForEver
EndProcedure
   
   
CreateThread(@draw(),0)
CreateThread(@mousemovement(),0)
 
 
 
;{-window loop
  Repeat
    Event = WaitWindowEvent()
  Until Event = #PB_Event_CloseWindow
  ;}
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: интерполяция чисел
СообщениеДобавлено: Ср ноя 28, 2018 6:56 pm 
Не в сети
ассистент

Зарегистрирован: Ср мар 30, 2016 9:45 pm
Сообщений: 22
Благодарил (а): 0 раз.
Поблагодарили: 5 раз.
А если вызывать mousemovement(void) по таймеру ?
Скажем каждые 25 ms.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: интерполяция чисел
СообщениеДобавлено: Чт ноя 29, 2018 3:49 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт июн 25, 2009 1:02 pm
Сообщений: 2293
Откуда: Russia — Belarus
Благодарил (а): 7 раз.
Поблагодарили: 72 раз.
Пункты репутации: 11
Скорее всего стоит рассчитывать ускорение не по двум координатам (старая и новая), а по цепочке координат последовательно.

_________________
EnableExplicit User


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: интерполяция чисел
СообщениеДобавлено: Чт ноя 29, 2018 7:02 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 708
Благодарил (а): 75 раз.
Поблагодарили: 20 раз.
Пункты репутации: 5
ODB писал(а):
Global yellow =RGB(255,255,0)
Global white =RGB(255,255,255)

а это зачем? есть константы
Цитата:
#Cyan
#Black
#Blue
#Magenta
#Gray
#Green
#Red
#White
#Yellow



а это зачем? зачем перекладываешь?
Код:
1
2
    n = MouseMoveX()
     offset = n*2



подключи EnableExplicit, меньше проблем будет с переменными


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: интерполяция чисел
СообщениеДобавлено: Чт ноя 29, 2018 8:21 am 
Не в сети
ассистент

Зарегистрирован: Ср мар 30, 2016 9:45 pm
Сообщений: 22
Благодарил (а): 0 раз.
Поблагодарили: 5 раз.
qpAHToMAS писал(а):
Скорее всего стоит рассчитывать ускорение не по двум координатам (старая и новая), а по цепочке координат последовательно.

По цепочке координат не получится т.к. у драйвера мыши есть порог удвоения скорости перемещения указателя при достижении определенной скорости.
p.s. Так было в DOS, не думаю что с тех пор что-то изменилось.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: интерполяция чисел
СообщениеДобавлено: Чт ноя 29, 2018 1:30 pm 
Не в сети
профессор

Зарегистрирован: Вс июл 05, 2009 5:55 pm
Сообщений: 336
Благодарил (а): 1 раз.
Поблагодарили: 10 раз.
Пункты репутации: 0
А оно так и выглядит в реальности, поэтому и дергается, а чего ты хочь там ,я уже непомню частота опроса 10-30 раз в сек.
Если рисовать график или список чисел, то другое дело.
Либо опрос, прорисовка, делать паузу, а после паузы опять по кругу, тогда небудет так сильно дергаться, хотя пауза тормозящая остальное. Просто разница она всегда быдет давать быстрый ответ вот и дергается.

Можно уменьшать значение разници когда дельта мыши меньше недавнего пика и прорисовывать,
аналогично будет выглядеть как у индикаторов записи на магнитофоне.

По самому коду, непойму зачем столько кода, вот проще
Код:
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
Global yellow =RGB(255,255,0)
Global white =RGB(255,255,255)
 
OpenWindow(1,0,0,800,600,"", #PB_Window_BorderLess)
SetWindowColor(1,RGB(250,255,255))
 
CanvasGadget(1,0,0,800,600)
 
 x1=400
;{-window loop
Repeat
    Event = WaitWindowEvent(1)
    x3=DesktopMouseX()
 
    StartDrawing(CanvasOutput(1))
        Box(0,0,800,600,0)
        Box(399,99,3,3,yellow)
       
        Box(400,100,x3-x1,300,yellow)
    StopDrawing()
    x1=x3
    ;Delay(100)
Until Event = #PB_Event_CloseWindow
  ;}
 


_________________
искатель истины


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: интерполяция чисел
СообщениеДобавлено: Пт ноя 30, 2018 6:25 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 708
Благодарил (а): 75 раз.
Поблагодарили: 20 раз.
Пункты репутации: 5
щас от любопытства лопну, вот это зачем?????????
Код:
1
2
Global yellow =RGB(255,255,0)
Global white =RGB(255,255,255)



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: интерполяция чисел
СообщениеДобавлено: Пт ноя 30, 2018 8:24 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6412
Благодарил (а): 21 раз.
Поблагодарили: 200 раз.
Пункты репутации: 52
newJS писал(а):
щас от любопытства лопну, вот это зачем?????????
Код:
1
2
Global yellow =RGB(255,255,0)
Global white =RGB(255,255,255)


Тот неловкий случай, когда создал глобальную переменную, и забыл зачем :lol:
Желтый в коде есть, а белый наверно сюда планировалось вставить:
SetWindowColor(1,RGB(250,255,255))

_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: интерполяция чисел
СообщениеДобавлено: Пт ноя 30, 2018 11:13 am 
Не в сети
профессор

Зарегистрирован: Вс июл 05, 2009 5:55 pm
Сообщений: 336
Благодарил (а): 1 раз.
Поблагодарили: 10 раз.
Пункты репутации: 0
newJS писал(а):
щас от любопытства лопну, вот это зачем?????????
Код:
1
2
Global yellow =RGB(255,255,0)
Global white =RGB(255,255,255)


В моем случае, это от его проги осталось и я неудалил или проглядел. Несколько раз на него косился и так и осталось :roll: как рудименты, я просто его код рихтовал.

_________________
искатель истины


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

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

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


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

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB