- Ошибки, баги, вопросы
- Особенности языка mql5, тонкости и приёмы работы
- Новая версия платформы MetaTrader 5 build 2007: Экономический календарь, MQL5-программы в виде сервисов
Вопрос к сообществу программистов по поводу авторства. Мне нужна была функция поворота изображения. И я нашел интересный для себя вариант.
void Rotate(int x_off,int y_off, //the offsets, or top-left of box int Nx, int Ny, //width and height float scale, //the scaling factor int x_cent,int y_cent, //rotation around this point float ang) //the rotation angle { long sscale=sin(ang)*65536L/scale; long cscale=cos(ang)*65536L/scale; long xc=((long)x_cent<<16) - ((Nx>>1)*(cscale+sscale)); long yc=((long)y_cent<<16) - ((Ny>>1)*(cscale-sscale)); char far *scn=base_screen+x_off+y_off*320; for (int y=0;y<Ny;y++) { long xlong=xc; long ylong=yc; for (int x=0;x<Nx;) { register int tempx=xlong>>16; register int tempy=ylong>>16; if( (tempx<0) || (tempx>=320) || (tempy<0) || (tempy>=200) ) scn[x++]=0; else scn[x++]=buffer[tempx+y320[tempy]]; xlong+=cscale; ylong-=sscale; } scn+=320; xc+=sscale; yc+=cscale; } }
Он поворачивал изображения, но совсем не так, как мне надо было. Сначала пытался что-то изменить в оригинале, но ничего не выходило. По итогу просто засел за листком бумаги и написал свой алгоритм. При этом при реализации какие-то общие названия переменных менять не стал, чтобы видеть лучше, как мной придуманное отличается от того, что было найдено. Вот мой сырой (без оптимизации) опубликованный в КБ код
static void Rotate( const int x_cent, const int y_cent, //rotation around this point const double ang, //the rotation angle const int Width, const uint &In[], uint &Out[] ) { ::ArrayCopy(Out, In); if (!ang) return; const int Height = ArraySize(In) / Width; int y320[]; ::ArrayResize(y320, Height); for(int n=0;n<Height;n++) y320[n]=n*Width; ::ArrayResize(Out, ::ArraySize(In)); ::ArrayInitialize(Out, 0); const double Sin = ::MathSin(-ang); const double Cos = ::MathCos(-ang); int scn = 0; for (int y = 0; y < Height; y++) { for (int x=0;x<Width; x++) { const int x2 = x - x_cent; const int y2 = y - y_cent; const int x1 = (int)(Cos * x2 - Sin * y2) + x_cent; const int y1 = (int)(Sin * x2 + Cos * y2) + y_cent; Out[scn + x]= ((x1<0) || (x1>=Width) || (y1<0) || (y1>=Height)) ? 0 : In[x1+y320[y1]]; } scn += Width; } }
Я не указал ссылку на оригинал, потому что посчитал, что алгоритм (хоть и примитивный) полностью мой. А совпадения названий переменных и общий подход - не столь важен. Понятно, что масштабы не сравнимы, но вспомнил давнюю историю LAME vs Fraunhofer, когда оказалось, что альтернативная реализация MP3 основана полностью на своем коде.
Вопрос, верно ли поступил, что не указал ссылку на код, который заставил задуматься и с которым по итогу есть некоторые схожести?
Вопрос, верно ли поступил, что не указал ссылку на код, который заставил задуматься и с которым по итогу есть некоторые схожести?
Любое изобретение опирается на аналоги, кроме открытия. Дать ссылку в описании на аналог Вы можете, но авторство в любом случае остается за Вами.
Отличия Вашего варианта от аналога должны быть понятны и давать определенную пользу. В этом случае к Вам не будет никаких претензий.
Любое изобретение опирается на аналоги, кроме открытия. Дать ссылку в описании на аналог Вы можете, но авторство в любом случае остается за Вами.
Отличия Вашего варианта от аналога должны быть понятны и давать определенную пользу. В этом случае к Вам не будет никаких претензий.
Понял, Спасибо!
Вопрос к сообществу программистов по поводу авторства. Мне нужна была функция поворота изображения. И я нашел интересный для себя вариант.
Интересно, а варианты со сглаживанием не находили?
Интересно, а варианты со сглаживанием не находили?
Вот, что то об этом нашел.
https://habrahabr.ru/post/160401/
интересно, такие вещи могут быть востребованы в MQL сообществе.
- 2002.12.12
- habrahabr.ru
Да, из комментария к этой статье нашел вариант, с которым начал работать. Реализовывать сглаживание не стал.
интересно, такие вещи могут быть востребованы в MQL сообществе.
Возможно, поворот появится в Canvas.mqh в следующем билде. А так те же часы получились легко.
Возможно, поворот появится в Canvas.mqh в следующем билде. А так те же часы получились легко.
О, это уже интересно. Поворот со сглаживанием?
Если вопрос касался Canvas.mqh, то точно есть без сглаживания.
Нет, в описании написано же. Да и на видео это хорошо видно.
Если вопрос касался Canvas.mqh, то точно есть без сглаживания.Эффектно. Но какой практический смысл?
Эффектно. Но какой практический смысл?
В чем смысл поворота?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования