-
Вложений: 1
Нет, нам такие фигуры не нужны, нам нужны другие фигуры.
Ускорил и сократил оба варианта, особенно circle3. В circle3 важное изменение - координаты центра в DE, не в HL и значение DE не меняется процедурой, что удобно при рисовании нескольких окружностей со сдвигом относительно предыдущего положения.
-
Вложений: 1
Идей по улучшению не появилось, поэтому закругляю circle. Все как было, только добавил коррекцию соотношения сторон, чтобы на реале были окружности, а не эллипсы. Приложил конфиг для emu, тот же самый, который выкладывал вместе с 3D крутилкой.
-
ivagor, обычно когда ты говоришь, что все пропало, это сигнал ждать, что через три дня появится версия в 2 раза быстрее, а если пожертвовать тремя байтами, то в 2.7. Делаем рыбу?
-
Так бывало, но не каждый раз, думаю тут достаточно плотно получилось, по крайней мере сами вычисления, особенно в circle3. Отрисовка не самая быстрая, можно весь вывод точек заинлайнить, но в данном случае соревнования нет и пусть будет без спорта. Окружность созрела для рыбы, только может лучше вариант без коррекции AR, а то из-за сравнительно скоростной коррекции сокращается область рисования. Можно корректировать и иначе, но будет медленнее.
- - - Добавлено - - -
Кстати, у этого быстрого способа коррекции есть еще одно достоинство - им легко корректировать координаты концов отрезков, что я и делал в 3D крутилке. Т.е. линии и окружности (и точки, конечно) можно рисовать в одной системе координат.
-
Сравнил с бейсиком 2.5, там используется тот же алгоритм. Заглушил рисование точек, оставил только базовый алгоритм - в бейсике в два с копейками раза медленнее чем в circle V2. Но львиную долю времени занимает рисование, в бейсике к нему еще вычисления пристегнуты (овал - 100%, дуга - скорее всего, дугу не проверял).
-
Вложений: 1
Альтернативный вариант коррекции соотношения сторон, позволяет рисовать по всему экрану без ограничений и он еще и быстрее (чем V2AR, просто V2 конечно все равно быстрее). Кроме того таблица коррекции теперь генерируется самой программой (можно, например, сгенерировать несколько таблиц для рисования разных эллипсов).
-
ivagor, а клиппинга по границам экрана нет?
-
Вложений: 1
В предыдущих вариантах я стремился к максимальной скорости и клиппинг там отсутствовал.
Если главное - возможности, а не скорость, то можно использовать предлагаемую V3. Здесь есть:
1) Клиппинг по границам экрана.
2) Возможность рисовать эллипсы. 16 коэффициентов сжатия (от 1/16 до 16/16) по каждой оси. Числитель коэффициента по X задается в D, по Y - в E. Перед первым вызовом circle надо вызвать IniCircle.
3) Возможность рисовать дуги с дискретностью 2pi/8. Маска дуг в регистре С, по часовой стрелке. Дополнительно можно посмотреть пример.
Обращаю внимание, что в V3 радиус в регистре B.
Пример клиппинга и рисования эллипсов - circleClipAndEllip
Пример рисования дуг - circleArc
Примеры разделил для наглядности, конечно же можно комбинировать возможности и, например, рисовать дуги эллипсов с клиппингом.
Сами процедуры рисования в обоих примерах одинаковые.
-
Вложений: 1
В детстве завидовал быстрому корветовскому paintу. Корветовский бейсик медленно рисует круги, зато очень быстро закрашивает. Проблема paint в векторовском бейсике связана с тем, что процедура там чисто пиксельная и никак не использует байтовую структуру экрана для ускорения. Зато процедура очень компактная и простая. Взял ее за основу и перевел в двухцветный вариант. А потом оптимизировал за счет комбинированного использования байтов/пикселов. Процедура ускорилась на (десятичный) порядок (сравниваю двухцветные варианты, цветной еще намного медленнее)! Жалко не сохранил первый вариант, было бы видно, как стало заливать в 10 раз быстрее. Теперь корветовская процедура всего в два с копейками раза быстрее :) Возможно стоило ее взять за основу.
Нужно конечно отметить, что корветовский paint работает с 8 цветным экраном, а мой вариант с 2х цветным, но корветовский "ускоритель" волшебным образом в вектор не пересадишь. Прикидываю, что при переходе к цветному варианту замедление было бы в худшем случае раза в 4, что все равно намного быстрее бейсиковской процедуры. Но такой вариант был бы довольно большим. А вот с z80 замедление было бы не таким существенным, думаю раза в 2.
Пока выкладываю "тизер" без исходника, может еще пооптимизирую.
-
Вложений: 2
Реализовал еще один мечт детства, касающийся paint - заливку с маской/шаблоном. С ходу не вспомнил, где можно подсмотреть и изобрел свой велосипед. Тоже пока без исходника, надо еще пооптимизировать и потестировать.
Мельком глянул корветовский paint и понял, что вряд ли буду его подробно разбирать, очень уж там все оптимизировано. А некоторые решения и вовсе неприменимы для вектора, например заливка строки стеком.