Yoko

All sides of Injection
It is currently 2024-03-28 19:19:49

All times are UTC+02:00




Post new topic  Reply to topic  [ 39 posts ]  Go to page Previous 1 2
Author Message
 Post subject:
PostPosted: 2007-05-04 09:49:04 
Offline
Junior Expert
User avatar

Joined: 2004-06-24 22:08:56
Posts: 3220
Grin wrote:
Как всегда ничего тут не изменилось;)
вот вечно через заднее место идут...
Дест тебе же уже предложили вариант который в несколько порядков будет быстрей работать и с 100% результатом. Я понимаю что ты ухватился за свое, но поверь - это глупо. Тем более есть есть проблемы с афинами преобразованиями. Найди одну формулу скалярного произведения векторов...

С афинными преобразованиями я уже разобрался, вроде :)

Не видел никаких вариантов, не покажешь ?..

Скажите мне, что делать - я это сделаю, мне не важно, как решать проблему, важно, чтобы это было эффективно.

_________________
YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Skype: d119060


Top
   
 Post subject:
PostPosted: 2007-05-04 09:49:37 
Offline
Junior Expert
User avatar

Joined: 2004-06-24 22:08:56
Posts: 3220
Sanch wrote:
Попробовать стоит, возможно гениальность решения кроется в простоте.

Я около 3 часов тестировал их антимакро.

Ещё вопросы есть?

_________________
YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Skype: d119060


Top
   
 Post subject:
PostPosted: 2007-05-04 09:55:55 
Offline
Junior Expert
User avatar

Joined: 2004-06-24 22:08:56
Posts: 3220
Перечитал тему - видел вариант только с перебивкой всех вариантов.. :)

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

Я бы выбрал второй вариант, чтобы особо не вешать инжу захлаямлением памяти, впринципе - вариант вполне реальный, могу написать скриптик - будите сидеть нон-стоп цифры вводить, пока все не поперевводите (вариантов будет достаточно много) :roll:

А главное - решение будет коротким..

PS: Афинные преобразования заработали - синусы и косинусы местами перепутал, и ваще, не сразу понял, что это канонический алгоритм и на нуль мона намана поделить..

Вобщем вот, доразберусь с афинами, поеду в китай 8)

Моё решение, которое я хочу реализовать, предполагает, что на скриптах инжы, оно будет решаться не более 30 сек (по моим прикидкам и замерам), в завимимости от сложности предоставленного экземпляра.

_________________
YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Skype: d119060


Top
   
 Post subject:
PostPosted: 2007-05-04 10:00:20 
Offline
Expert!
User avatar

Joined: 2005-05-04 14:05:19
Posts: 2580
Location: Москва
Grin wrote:
нарисуй цифры пронумеровав точки в порядке их появления. Порядок всегда один и тотже. Вспоминаем геометрию и выделяем в каждой цифре 2-3 уникальных угла образованных точками. Проверяем на соответствие на условие "Угол".
Чапра не примитивная (другую просто не нарисуешь), а вот способ ее подачи примитивен...

А это что?
Если не понятно, то
То все цифры ст роются в определенном порядке и этот порядок всегда один и тот же. Это не сравненной большой минус этого антимакра, так как теперь надо просто нарисовать все эти цифры пронумеровав точки в порядке их прорисовки. теперь начинаем анализировать цифры и мы видим что сочетание прямых углов в каждой цифре уникально...
А именно уникально из каких точек по номеру построена цифра. Достаточно выделить в цифре 2-3 таких угла и про на писать не большую процедуру проверки угла по 3-м точкам. Дальше оптимизируя алгоритм можно ускорить перебор возможных углов, так как нам уже дают подсказку среди каких цифр нам стоит искать и весь перебор с водится к проверки макс 2 цифр (если 3 цифра может быть получена путем исключения). Сей метод абсолютно не зависит на сколько и куда развернуты цифры.

ПС Так как матрица точек разворачивалась в дискретном пространстве то все координаты были округлены до целых, тоесть это может сказаться на тест "угла", но это будет очень не значительно.
Тест "Угла" проводитс по скалярному произведению векторов

ПСС только попробуй его продай;) прибью...

ПССС 30 сек?! и подсчитал же... То что выше будет работать доли секунды...


Last edited by Grin on 2007-05-04 10:02:37, edited 1 time in total.

Top
   
 Post subject:
PostPosted: 2007-05-04 10:01:51 
Offline
Junior Expert
User avatar

Joined: 2004-06-24 22:08:56
Posts: 3220
Пропустил пост, дважды.. странно.

Ща вдумаюсь..

Слушай, стуки в асю?) 119060..

Спрошу что-нить )

PS: Ммм, два Junior Expert'а, а разница в знаниях очевидна.. Гмм )

PPS: Всё равно было приятно разобраться с афинными преобразованиями.

PPPS: На JavaScript тоже будет доли секунды работать, фишка с арктангенсом и квадратным корнем 8)

_________________
YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Skype: d119060


Top
   
 Post subject:
PostPosted: 2007-05-04 10:10:00 
Offline
Expert!
User avatar

Joined: 2005-05-04 14:05:19
Posts: 2580
Location: Москва
Ну так ты дойди до работающего алгоритма.
Потом прикрути яву к инжекту.


Top
   
 Post subject:
PostPosted: 2007-05-04 10:11:30 
Offline
Junior Expert
User avatar

Joined: 2004-06-24 22:08:56
Posts: 3220
Grin wrote:
Ну так ты дойди до работающего алгоритма.
Потом прикрути яву к инжекту.

Ява и яваскрипт штука разная, яву я пока не изучил :)

А насчёт работающих алгоритмов я уже приступил к осмысливанию того, что ты написал :)

PS: Харэ редактить свои посты :roll:

_________________
YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Skype: d119060


Top
   
 Post subject:
PostPosted: 2007-05-04 10:56:28 
Offline
Junior Expert
User avatar

Joined: 2004-06-24 22:08:56
Posts: 3220
Раз уж мне все всё так подробно расписали - буду тоже всё подробно расписывать и даже подробнее :)

Примечание: Незнаю, как нарисовать стрелку над вектором, в любом случае - это вектор.. Не перепутайте.

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

Пусть у нас есть три точки, которые образуют угол:
Code:
M1 ( x1, y1 ) - непосредственно угловая точка
M2 ( x2, y2 ) - первая точка, из которой будет идти луч в точку M1
M3 ( x3, y3 ) - вторая точка, из которой будет идти луч в точку M1


Соответсвенно имеем два вектора: M1M2, M1M3.
Вектор понятное дело имеет свои координаты:
Code:
M1M2 ( x2 - x1, y2 - y1 )
M1M3 ( x3 - x1, y3 - y1 )


Обзавём координаты как-нибудь покороче:
Code:
X1 = x2 - x1
Y1 = y2 - y1
X2 = x3 - y1
Y2 = y3 - y1


Теперь немного теории:
Quote:
Скалярным произведением двух векторов называется сумма произведений одноименных координат этих векторов.

Т.е. в нашем случае:
Code:
M1M2 * M1M3 = X1 * X2 + Y1 * Y2


Кроме того:
Quote:
Скалярным произведением двух векторов в ДПСК (декартовой прямоугольной системе координат) называется произведение модулей этих двух векторов на косинус угла между ними.

Т.е.:
Code:
M1M2 * M1M3 = |M1M2| * |M1M3| * cos(f)

Примечание: f - так я обозвал угол, который мы ищем.

Далее - модуль вектора, тоже штука нужная, тоже нужно знать:
Quote:
Модулем вектора в ДПСК называется квадратный корень из суммы квадратов координат вектора.

Code:
|M1M2| = sqrt( X1^2 + Y1^2 )
|M1M3| = sqrt( X2^2 + Y2^2 )


Ну и непосредственный ответ, на поставленный вопрос:
Code:
cos( f ) = ( M1M2 * M1M3 ) / ( |M1M2| * |M1M3| )


Всё, дальше арифметика :)

PS: Grin. я всё верно описываю или можно как-нить попроще это намутить?)

_________________
YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Skype: d119060


Top
   
 Post subject:
PostPosted: 2007-05-04 11:28:29 
Offline
Junior Expert
User avatar

Joined: 2004-06-24 22:08:56
Posts: 3220
Гмм, у меня глупый вопрос возник - а что делать с cos( f ) ?)

_________________
YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Skype: d119060


Top
   
 Post subject:
PostPosted: 2007-05-04 11:51:43 
Offline
Expert!
User avatar

Joined: 2005-05-04 14:05:19
Posts: 2580
Location: Москва
Все верно... только не ясно почему возник глупый вопрос...
можно лишь бобавить что уго между векторами можно определить только в пределах от 0 до Пи тоесть до 180 градусов (домашние задание: объясните почему так...)
Чему равен косинус 90 градусов?
правельно... 0
Но так как я уже говорит идет округдение когдинат то с не большой погрешностью нужно расматривать этот самый прямой угол...
то есть у сло вие должно быть не строгое...

ПС Собствено близость косинуса к 0 говорит что Тест на "угол" пройден успешно... и даные точки составляют прямой угол


Top
   
 Post subject:
PostPosted: 2007-05-04 14:54:50 
Offline
Expert!
User avatar

Joined: 2005-09-14 15:31:58
Posts: 2152
Location: Latvia
очистил
привет Грин
удачи Дестр :roll:

_________________
Уроки языка Injection
Основные команды языка Injection
Yoko Injection Code Sweeper
Drw (2009) скрипты
2017 Начал играть на Uorpg.net


Top
   
 Post subject:
PostPosted: 2007-05-05 17:33:11 
Offline
Junior Expert
User avatar

Joined: 2004-06-24 22:08:56
Posts: 3220
Grin wrote:
Все верно... только не ясно почему возник глупый вопрос...
можно лишь бобавить что уго между векторами можно определить только в пределах от 0 до Пи тоесть до 180 градусов (домашние задание: объясните почему так...)
Чему равен косинус 90 градусов?
правельно... 0
Но так как я уже говорит идет округдение когдинат то с не большой погрешностью нужно расматривать этот самый прямой угол...
то есть у сло вие должно быть не строгое...

ПС Собствено близость косинуса к 0 говорит что Тест на "угол" пройден успешно... и даные точки составляют прямой угол

Глупый-то оно конечно глупый, но я имел ввиду непосредственно, кароче забей)

PS: Времени нету - как-нибудь потом реализую всё это.

_________________
YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Skype: d119060


Top
   
 Post subject:
PostPosted: 2007-05-05 17:35:01 
Offline
Expert!
User avatar

Joined: 2005-05-04 14:05:19
Posts: 2580
Location: Москва
ну вот а люди так ждали...


Top
   
 Post subject:
PostPosted: 2007-05-05 17:51:39 
Offline
Junior Expert
User avatar

Joined: 2004-06-24 22:08:56
Posts: 3220
Grin wrote:
ну вот а люди так ждали...

Ну, говорят тебе дела.

Всё, что люядм нужно уже расписано, IMHO.

_________________
YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Skype: d119060


Top
   
 Post subject:
PostPosted: 2007-05-06 13:49:26 
Offline
Expert!
User avatar

Joined: 2005-05-04 14:05:19
Posts: 2580
Location: Москва
Так тактика изменилась...
Кривизна цифр все таки очень кривая;) расхождения углов большое...
По этому начинаем оценивать какая из цифр больше всего похожа на то что в гампе... вводим бальную систему соответствия, та что больше всего похожа и есть наша цифра;)
выкладываю сам механизм "Узнавания цифры" (главная процедура what())
Code:
sub what()
   var i, score, num, temp, st
   dim x[11], y[11]
   dim nm[3]
   
   for i = 4 to 13
      st = uo.LastGump('command', i)
      x[i-3] = val(mid(st, 8, 3))
      y[i-3] = val(mid(st, 12, 3))
   next
   for i = 0 to 2
      nm[i] = val(uo.LastGump('text', i+1))
   next
   score = 10000
   index = 0
   for i = 0 to 2
      temp = numberscore(nm[i], x, y)
      if score > temp then
         score = temp
         index = i
      endif
   next
   uo.print(str(nm[index]))

end sub

sub numberscore(num, x, y)
   dim Sings[10]
   var cheking = 1
   var n, i, total = 0
   dim xv[2], yv[2], point[3]
   
   Sings[2] = "080910080506"
   Sings[3] = "040706060708"
   Sings[5] = "040506060708"
   Sings[6] = "070910050608"
   Sings[8] = "030506060709"
   Sings[9] = "040607050807"
   
   for n = 0 to 1
      for i = 0 to 2
         point[i] = val(mid(Sings[num], n*6+i*2, 2))
      next
      for i = 0 to 1
         xv[i] = x[point[i]]-x[point[i+1]]
         yv[i] = y[point[i]]-y[point[i+1]]
      next
      total = total+anglscore(xv, yv)
   next
   return total
endsub
      
sub anglscore(x, y)
   var xy1 = x[0]*y[0]
   var xy2 = x[1]*y[1]
   var t = xy1+xy2
   
   x[0] = x[0]+y[0]
   x[1] = x[1]+y[1]
   return 100*t*t/((x[0]*x[0]-2*xy1)*(x[1]*x[1]-2*xy2))
end sub


ПС дальше ерунда осталась :roll:


Top
   
 Post subject:
PostPosted: 2007-05-07 00:11:53 
Offline
Expert!
User avatar

Joined: 2005-05-04 14:05:19
Posts: 2580
Location: Москва
В принципе в полне конечный вариант, по тестить особо не удалось, так как чара дали серого;) киляют постоянно;) (запускать antimacro)
Code:
sub antimacro()

   var x, y
   
   while  not uo.Dead()
      if (uo.LastGump('replyed') == 0) and (uo.LastGump('text', 0)  == 'Please choose this number:') then
         x = uo.LastGump('x')
         y = uo.LastGump('y')
         uo.LClick(x+120, y+185+what()*35)
         wait(1000)
      end if
      wait(100)
   wend

end sub
      
sub what()

   var i, score, index, temp, st
   dim x[11], y[11]
   dim nm[3]
   
   for i = 3 to 12
      st = uo.LastGump('command', i)
      x[i-2] = val(mid(st, 8, 3))
      y[i-2] = val(mid(st, 12, 3))
   next
   for i = 0 to 2
      nm[i] = val(uo.LastGump('text', i+1))
   next
   score = 10000
   index = 0
   for i = 0 to 2
      temp = numberscore(nm[i], x, y)
      if score > temp then
         score = temp
         index = i
      endif
   next
   return index

end sub

sub numberscore(num, x, y)

   dim Sings[10]
   var cheking = 1
   var n, i, total = 0
   dim xv[2], yv[2], point[3]
   
   Sings[2] = "080910080506"
   Sings[3] = "040706060708"
   Sings[5] = "040506060708"
   Sings[6] = "070910050608"
   Sings[8] = "030506060709"
   Sings[9] = "040607050807"
   
   for n = 0 to 1
      for i = 0 to 2
         point[i] = val(mid(Sings[num], n*6+i*2, 2))
      next
      for i = 0 to 1
         xv[i] = x[point[i]]-x[point[i+1]]
         yv[i] = y[point[i]]-y[point[i+1]]
      next
      total = total+anglscore(xv, yv)
   next
   return total

endsub
      
sub anglscore(x, y)

   var xy1 = x[0]*y[0]
   var xy2 = x[1]*y[1]
   var t = xy1+xy2
   
   x[0] = x[0]+y[0]
   x[1] = x[1]+y[1]
   return 100*t*t/((x[0]*x[0]-2*xy1)*(x[1]*x[1]-2*xy2))

end sub


Top
   
 Post subject:
PostPosted: 2007-05-07 13:06:19 
Offline
Expert!
User avatar

Joined: 2004-10-15 22:38:04
Posts: 1396
Location: Moscow City.
Браво Grin :D
Destruction wrote:
Осталось стереть пост и продавать :D

И не надейся :)

_________________
The End.


Top
   
 Post subject:
PostPosted: 2007-05-09 22:19:02 
Offline
Junior Expert
User avatar

Joined: 2004-06-24 22:08:56
Posts: 3220
Проблема имеет место быть.

Виновата строка:
Code:
if (uo.LastGump('replyed') == 0) and (uo.LastGump('text', 0),  == 'Please choose this number:') then 


Вот так лучше будет:
Code:
if (uo.LastGump('replyed') == 0) and (uo.LastGump('text', 0)  == 'Please choose this number:') then 


PS: Исправил пост грина.

_________________
YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Skype: d119060


Top
   
 Post subject: Re:
PostPosted: 2019-11-03 04:45:54 
Offline

Joined: 2019-10-18 05:09:01
Posts: 2
Grin wrote:
В принципе в полне конечный вариант, по тестить особо не удалось, так как чара дали серого;) киляют постоянно;) (запускать antimacro)
Code:
      
sub anglscore(x, y)

   var xy1 = x[0]*y[0]
   var xy2 = x[1]*y[1]
   var t = xy1+xy2
   
   x[0] = x[0]+y[0]
   x[1] = x[1]+y[1]
   return 100*t*t/((x[0]*x[0]-2*xy1)*(x[1]*x[1]-2*xy2))

end sub


Удивительно если он вообще работал... или это специальная ошибка из разряда защиты от любителей скопировать\вставить не разбираясь в макросе :roll:

За саму идею аплодирую стоя!)


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 39 posts ]  Go to page Previous 1 2

All times are UTC+02:00


Who is online

Users browsing this forum: No registered users and 7 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited