Быстрое преобразование векторного изображения.

и задачки для интервью.
GGH
Уже с Приветом
Posts: 277
Joined: 09 Mar 1999 10:01
Location: RU->CO->CA->MA

Быстрое преобразование векторного изображения.

Post by GGH »

To Vlad7:

Что же Вы агрессивно-то так? Я не хотел Вас обидеть или в чем-то усомниться. Просто большинство Ваших историй как-то все о том, что Вам не везло с внедрением. А теперь заобижались чего-то. Видимо, все же случай клинический. Увы...
Ничего я Вам не говорил, и вообще меня здесь не было.
Vlad7
Уже с Приветом
Posts: 366
Joined: 17 Nov 2000 10:01

Быстрое преобразование векторного изображения.

Post by Vlad7 »

<blockquote><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><hr>Originally posted by Andy77:
<strong>

ой, ну тогда храним наши координаты в целочисленном виде (сдвинув на 7 бит влево, дабы обеспечить точность в два знака после запятой) и производим целочисленное умножение... результат сдвигаем на 7 бит вправо и получаем растровые координаты с точностью до одного пикселя.

Извините, Влад, что занудствую, но Вы мне так и не ответили, как это получается - "Я пробовал писать сообщение под курсором, но немного не хватало скорости моей PS/2-16Мгц"? Признайтесь, что для красного словца ввернули, и я отстану [img:15141e1077]images/smiles/icon_smile.gif[/img:15141e1077] </strong><hr></blockquote>

Целочисленное умножение выполняется быстрее, чем с плавающей запятой, но умножение целых чисел намного медленнее их сложения, так как умножение состоит (состояло) из нескольких операций сложений и сдвигов. Такое решение задачи я бы счел очевидным и пригодным разве что для проверки знаний студентов. Мое решение задачи как раз состояло в том, что на преобразование одной координаты среднее число команд было небольшим, операция умножения почти не применялась, а преобразование было быстрее, чем целочисленное преобразование плюс сдвиг.

Под курсором писать требует большего количества времени, чем при записи в статусную строку, так как при этом необходимо провести ряд несколько операций, не требуемых при записи в статусную строку.:
1.Необходимо читать нескольких битовых плоскостей на участке под всплывающей надписью и сохранять их значения в буфере.
2.Необходимо перезаписывать из буфера в видеопамять нескольких битовых плоскостей при восстановлении изображения под всплывающей надписью.
Drom
Уже с Приветом
Posts: 242
Joined: 03 Jan 2000 10:01
Location: TX > MA/NH > NJ/NYC

Быстрое преобразование векторного изображения.

Post by Drom »

<blockquote><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><hr>Originally posted by Vlad7:
<strong>... Мое решение задачи как раз состояло в том, что на преобразование одной координаты среднее число команд было небольшим, операция умножения почти не применялась, а преобразование было быстрее, чем целочисленное преобразование плюс сдвиг...</strong><hr></blockquote>

lookup tables?
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Быстрое преобразование векторного изображения.

Post by tengiz »

<blockquote><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><hr>Originally posted by Vlad7:
...Мое решение задачи как раз состояло в том, что на преобразование одной координаты среднее число команд было небольшим, операция умножения почти не применялась, а преобразование было быстрее, чем целочисленное преобразование плюс сдвиг...<hr></blockquote>Как уже сказал Drom, можно использовать разновидность lookup алгоритма: для каждой оси держим небольшой кеш интервалов значений исходных координат, которые при масштабировании точно попадают в один пиксел. Нужно только аккуратно следить за тем, чтобы кеш был достаточно компактным и чтобы на его поддержание и на поиск в нём уходило в итоге меньше времени, чем на прямой алгоритм с умножениями. Хотя, если не жалко пары сотен килобайт (это всё-таки был DOS), то тогда вообще можно было сделать массив, индексом в котором могли бы быть исходные координаты, а значениями экранные координаты, и который заполнялся бы по мере необходимости.
Drom
Уже с Приветом
Posts: 242
Joined: 03 Jan 2000 10:01
Location: TX > MA/NH > NJ/NYC

Быстрое преобразование векторного изображения.

Post by Drom »

<blockquote><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><hr>Originally posted by tengiz:
<strong>Как уже сказал Drom, можно использовать разновидность lookup алгоритма: для каждой оси держим небольшой кеш интервалов значений исходных координат, которые при масштабировании точно попадают в один пиксел. ... и на поиск в нём уходило в итоге меньше времени, чем на прямой алгоритм с умножениями. Хотя, если не жалко пары сотен килобайт ... сделать массив, индексом в котором могли бы быть исходные координаты, а значениями экранные координаты, и который заполнялся бы по мере необходимости.</strong><hr></blockquote>

oops [img:ef18667f93]images/smiles/icon_wink.gif[/img:ef18667f93] , Tengiz, hash (or cash?) идея приятная, но если надо умножать (на константу или произвольные числа), то я имел в виду именно массив, что-то типа примитивной таблицы Пифагора:
для умножения произвольных байт будет 256х256 слов = 128kb, ту же таблицу можно использовать для умножения слов (4 lookup'а, 3 сложения, 2 сдвига). Умножение на константу (маштабирование) потребует только полкилобайта под таблицу - можно будет сделать 2 таблицы сразу, чтобы с"економить на сдвигах (2 lookup'а, 1 сложениe,), ну и т.д.
User avatar
Kisena
Уже с Приветом
Posts: 1615
Joined: 12 Jul 2001 09:01
Location: Raleigh, NC

Быстрое преобразование векторного изображения.

Post by Kisena »

Мы просим прощения за назойливость. Это последний раз, когда мы влезаем с подобным вопросом. Влад, мы не очень поняли, существует ли хоть одна Ваша разработка, которую можно увидеть воочию прямо здесь?
Andy77
Уже с Приветом
Posts: 577
Joined: 19 Oct 2000 09:01
Location: Kiev, Ukraine -> Boston, MA -> Minneapolis, MN -> Exton, PA

Быстрое преобразование векторного изображения.

Post by Andy77 »

<blockquote><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><hr>Originally posted by Vlad7:
<strong>1.Необходимо читать нескольких битовых плоскостей на участке под всплывающей надписью и сохранять их значения в буфере.
2.Необходимо перезаписывать из буфера в видеопамять нескольких битовых плоскостей при восстановлении изображения под всплывающей надписью.</strong><hr></blockquote>

Стоп-стоп-стоп, Влад, Вы же сами сказали, что система у Вас была оконная, следовательно, при появлении/перемещении каждого окна (которое на несколько порядков больше поп-ап надписи) Вы и так выполняли эти операции. Ваш аргумент на уровне "я не смог взять из холодильника пиво, потому что для этого нужно 1) открыть холодильник 2) взять пиво 3) закрыть холодильник".

На самом деле очень даже хватало того быстродействия на выполнение таких примитивных операций...

[ 29-12-2001: Message edited by: Andy77 ]</p>
Vlad7
Уже с Приветом
Posts: 366
Joined: 17 Nov 2000 10:01

Быстрое преобразование векторного изображения.

Post by Vlad7 »

<blockquote><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><hr>Originally posted by Andy77:
<strong>
Стоп-стоп-стоп, Влад, Вы же сами сказали, что система у Вас была оконная, следовательно, при появлении/перемещении каждого окна (которое на несколько порядков больше поп-ап надписи) Вы и так выполняли эти операции. Ваш аргумент на уровне "я не смог взять из холодильника пиво, потому что для этого нужно 1) открыть холодильник 2) взять пиво 3) закрыть холодильник".
На самом деле очень даже хватало того быстродействия на выполнение таких примитивных операций...
</strong><hr></blockquote>

Окна обычно перемещались рывками из-за недостаточной скорости прорисовки. По этой причине многие производители предусматривали опцию отключение отрисовки окна при перемещении, и перемещалась одна рамка окна. Вам назвать приложение Microsoft’a, в котором применялся такой прием, или сами вспомните?

Операция перемещения (изменения размеров) окна операция менее часто встречающаяся, чем перемещения курсора по пунктам меню, и поэтому рывки при перемещении окна пользователи моей программы сочли менее раздражительными, чем движение курсора скачками по пунктам меню.
Vlad7
Уже с Приветом
Posts: 366
Joined: 17 Nov 2000 10:01

Быстрое преобразование векторного изображения.

Post by Vlad7 »

<blockquote><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><hr>Originally posted by Drom:
<strong>

oops [img:bc0cb1e802]images/smiles/icon_wink.gif[/img:bc0cb1e802] , Tengiz, hash (or cash?) идея приятная, но если надо умножать (на константу или произвольные числа), то я имел в виду именно массив, что-то типа примитивной таблицы Пифагора:
для умножения произвольных байт будет 256х256 слов = 128kb, ту же таблицу можно использовать для умножения слов (4 lookup'а, 3 сложения, 2 сдвига). Умножение на константу (маштабирование) потребует только полкилобайта под таблицу - можно будет сделать 2 таблицы сразу, чтобы с"економить на сдвигах (2 lookup'а, 1 сложениe,), ну и т.д.</strong><hr></blockquote>


Идея правильная, но пока я не совсем понимаю, как Вы предлагаете это реализовать (что на что умножать, что сдвигать и на сколько, что должно содержаться в хэш-таблице). У меня получился другой результат – длина таблицы при размере растра 1024*1280 – не менее 2кБ. На самом деле моя хэш-таблица была несколько больше, чтобы уменьшить ошибки округления.
User avatar
Kisena
Уже с Приветом
Posts: 1615
Joined: 12 Jul 2001 09:01
Location: Raleigh, NC

Быстрое преобразование векторного изображения.

Post by Kisena »

Нет, мы глупые и сами ничего объяснить не можем. Нам достаточно подтверждения того факта, что были совершены прорывы в нескольких областях, но ни одно не работает.
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Быстрое преобразование векторного изображения.

Post by tengiz »

<blockquote><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><hr>Originally posted by Kisena:
Нет, мы глупые и сами ничего объяснить не можем. Нам достаточно подтверждения того факта, что были совершены прорывы в нескольких областях, но ни одно не работает.<hr></blockquote>Kisena, Вы зря так, во всяком случае, по поводу графических оконных систем - только ленивый их не писал в конце 80-х начале 90-х. Тем более, что это не так уж и сложно. Хотя, успешные коммерческие системы, тот же оконный интерфейс Windows 3.1, скажем, отличалась от полулюбительских поделок кардинально - универсальностью и зрелостью API, значительно меньшим удельным количеством ошибок и недоделанностей и пр.

А чтобы хоть как-то работало и выглядело "почти как Windows" - no problem. Это примерно на полгода интенсивной работы для пары человек. А может и того меньше - я уже не помню, давно это было.
Vlad7
Уже с Приветом
Posts: 366
Joined: 17 Nov 2000 10:01

Быстрое преобразование векторного изображения.

Post by Vlad7 »

<blockquote><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><hr>Originally posted by Kisena:
<strong>Мы просим прощения за назойливость. Это последний раз, когда мы влезаем с подобным вопросом. Влад, мы не очень поняли, существует ли хоть одна Ваша разработка, которую можно увидеть воочию прямо здесь?</strong><hr></blockquote>

У меня имеется ряд проблем, при запуске 10 летней давности программы на моем нынешнем компьютере. Мне очень не хотелось бы тратить время для upgrade программы, чтобы удовлетворить Ваше любопытство. Просто я не вижу в этом ни малейшего смысла – в то время было предостаточно многооконных текстовых приложений, и единственное, что мне удалось - это оказаться среди производителей, первыми сделавшими многооконные графические приложения. Я себя чувствую несколько неудобно, уже чуть ли не пообещал показать, но не враг же я самому себе – делать то, что экономически невыгодно.

Существует целый ряд причин, по которым приложения десятилетней давности могут не работать на современном железе и под современными ОС.

Не верите? Возьмите AutoCAD R.10 и попробуйте поработать на компьютере с имеющейся файловой системой NTFS. Только перед этим не забудьте сделать backup диска. Может Вы сможете объяснить результат без эксперимента?
Andy77
Уже с Приветом
Posts: 577
Joined: 19 Oct 2000 09:01
Location: Kiev, Ukraine -> Boston, MA -> Minneapolis, MN -> Exton, PA

Быстрое преобразование векторного изображения.

Post by Andy77 »

<blockquote><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><hr>Originally posted by Vlad7:
<strong>

Окна обычно перемещались рывками из-за недостаточной скорости прорисовки. По этой причине многие производители предусматривали опцию отключение отрисовки окна при перемещении, и перемещалась одна рамка окна. Вам назвать приложение Microsoft’a, в котором применялся такой прием, или сами вспомните?

Операция перемещения (изменения размеров) окна операция менее часто встречающаяся, чем перемещения курсора по пунктам меню, и поэтому рывки при перемещении окна пользователи моей программы сочли менее раздражительными, чем движение курсора скачками по пунктам меню.</strong><hr></blockquote>

Вот опять Вы углубились в какие-то перемещения курсора по пунктам меню, хотите чтобы я что-то вспомнил... зачем-то написали о том, что Ваши пользователи сочли менее раздражительным (при чем здесь это? [img:5e96a6f5a5]images/smiles/icon_rolleyes.gif[/img:5e96a6f5a5] ) а ведь мой вопрос был предельно прост - Вы написали, что не хватало мощности на высвечивание хинта над пунктом меню (прямоугольник размером примерно 100*10 пикселей), и я спросил, правда ли это. всё...
Vlad7
Уже с Приветом
Posts: 366
Joined: 17 Nov 2000 10:01

Быстрое преобразование векторного изображения.

Post by Vlad7 »

<blockquote><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><hr>Originally posted by Andy77:
<strong>

Вот опять Вы углубились в какие-то перемещения курсора по пунктам меню, хотите чтобы я что-то вспомнил... зачем-то написали о том, что Ваши пользователи сочли менее раздражительным (при чем здесь это? [img:b9974bd109]images/smiles/icon_rolleyes.gif[/img:b9974bd109] ) а ведь мой вопрос был предельно прост - Вы написали, что не хватало мощности на высвечивание хинта над пунктом меню (прямоугольник размером примерно 100*10 пикселей), и я спросил, правда ли это. всё...</strong><hr></blockquote>

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

Максимальное количество символов в подсказке было 80. Транспарант был в несколько раз больше указанных Вами размеров.

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

Я намерен прекратить с Вами спор по данному вопросу – не люблю тратить понапрасну время. Если я даже сделал ошибку, и все же можно обеспечить движение курсора без скачков, то что это меняет – я ведь не утверждал, что я достиг результат, я сообщал, что мне не удалось достичь результат.
Vlad7
Уже с Приветом
Posts: 366
Joined: 17 Nov 2000 10:01

Быстрое преобразование векторного изображения.

Post by Vlad7 »

<blockquote><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><hr>Originally posted by KVA:
<strong>Извините, что влезаю в дискуссию. Vlad7, вы и Vladimir Rybinkin с IXBT форума по программированию случайно не одно и то же лицо? Очень уж ваш стиль похож на его.</strong><hr></blockquote>

Вы ошиблись. Я не использую других ников.
User avatar
KVA
Уже с Приветом
Posts: 5347
Joined: 03 Feb 1999 10:01
Location: NJ, USA

Быстрое преобразование векторного изображения.

Post by KVA »

Извините, что влезаю в дискуссию. Vlad7, вы и Vladimir Rybinkin с IXBT форума по программированию случайно не одно и то же лицо? Очень уж ваш стиль похож на его.

Return to “Головоломки”