Перейти к содержанию

Рисование Линии И Окружности В Машинных Кодах.


Рекомендуемые сообщения

Если вы научились включать и выключать одиночный элемент растровой плоскости (пиксель на ЖКИ или ЭЛТ, знакоместо на алфавитно-цифровом знакосинтезирующем устройстве, перо графопостроителя), то следующим шагом будет написание процедур рисования линии и окружности.

40 лет назад товарищ Брезенхейм по заказу соорудил алгоритмы того, чего в наше время аппаратно заложено в любую современную видеокарту.

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

Теория тут.

В 2005 году я освоил графический ЖКИ 192х64 пикселя прикрученный к ядру MCS-51 и реализовал алгоритмы Брезенхейма на ассемблере.

Код писал практически "в лоб". Он не оптимизирован и поэтому относительно легко читаем. Любой может "переложить" эти тексты под свой МК.

Арифметика 8-битная. Отсюда ограничение на площадь растра: не более 256х256 пикселей. И ограничение на радиус окружности не более 39 пикселей, т.к. вычисления в процедуре производятся со знаком.

Если пиксель не квадратный то окружность будет эллипсом. Чтобы это компенсировать надо принимать доп. меры.

Процедуры:

- рисование отрезка line_brezenhaim.zip;

- рисование окружности (с возможностью заливки типа solid fill) circle_brezenhaim.zip;

- рисование прямоугольника из отрезков (с возможностью заливки типа solid fill) fillbox_speccy.zip.

Если кому интересно, то вот для TurboBASIC тексты. Можно проверить и окружность и линию.

REM LINE
SCREEN 1,0
INPUT "begin X1[0..319], Y1[0..199]:";x1,y1
INPUT "end X2[0..319], Y2[0..199]:";x2,y2

z=0
IF x2>x1 THEN absx=x2-x1:dx=1 ELSE absx=x1-x2:dx=-1
IF y2>y1 THEN absy=y2-y1:dy=1 ELSE absy=y1-y2:dy=-1
rem Если absy>absx то переменные dx и dy, x1 и y1, x2 и y2, absx и absy обмениваются содержимым, а переменная z=1
IF absy>absx THEN z=dx:dx=dy:dy=z:z=x1:x1=y1:y1=z:z=x2:x2=y2:y2=z:z=absx:absx=absy:absy=z:z=1

er=0
der=absy
a=absx+1
flags=0

5
IF z=0 THEN PSET (x1,y1) ELSE PSET (y1,x1)
a=a-1
IF a=0 THEN STOP
x1=x1+dx
er=er+der
IF flags=0 THEN IF er<0 THEN flags=1
IF flags=1 THEN IF er>0 THEN flags=0

IF flags=1 THEN GOTO 5
IF 2*er>=absx THEN y1=y1+dy:er=er-absx
1 IF INKEY$="" then 1 'Ожидание нажатия any key
goto 5

REM CIRCLE
SCREEN 1,0
INPUT "radius = [0..50]";rad
xc=160
yc=100

resize=1.28 'Это для компенсации, т.к. пиксели в режиме CGA не квадратные.
x=0
y=rad
d=2*(1-rad)

888 IF y<0 THEN GOTO 999 
PSET (xc+x,yc+y)
PSET (xc+x,yc-y)
PSET (xc-x,yc+y)
PSET (xc-x,yc-y)
777 IF INKEY$="" then 777 'Ожидание нажатия any key
IF d+y>0 THEN y=y-1:d=d-2*y*resize-1
IF x>d then x=x+1:d=d+2*x+1
GOTO 888

999 STOP

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

  • 1 месяц спустя...

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Нужно уточнить, на "черном экране" подключённом к чему?

Если речь идет о видеоадаптере для PC то надо открыть соотв. литературу (например М. Гук "Аппаратные средства IBM PC"), посмотреть как программировать режимы адаптера, разобраться с организацией видеопамяти, и записав туда нужные значения зажечь на экране пиксель нужного цвета.

Для PC низкоуровневое программирование видеоадаптеров уже разобрано в инете наверное тысячу раз. Надо искать.

А можно пойти от обратного, написать и скомпилировать в TurboPASCAL программу с подключением модуля CRT и включающую один пиксель. А потом её дизассемблировать и найти нужное место.

Ссылка на комментарий
Поделиться на другие сайты

Нужно уточнить, на "черном экране" подключённом к чему?

Монитор от компа IBM PC.

Я пробовал. Зачитал до дыр Питера Абеля "IBM PC ASSEMBLER LANGUAGE AND PROGRAMING".

Пробовал сам писать, пробовал вставлять куски кода. Не получается. Надо что то с графическим режимом делать. Только что?

Ссылка на комментарий
Поделиться на другие сайты

Наверное надо такие проделки делать из-под "чистого ДОСа".

Попробуй загрузить что-то ниже(или равно) windows98.

Я бы еще начал с программирования адаптера на языке верхнего уровня.

TurboBASIC или TurboPASCAL подойдут.

Сам баловался с адаптером на бейсике (давным давно в досе) но быстро надоело.

Подскажи какое железо у тебя?

Изменено пользователем Speccy
Ссылка на комментарий
Поделиться на другие сайты

Железо: GeForce4, Samsung SyncMaster 757 DFX, материнка - Gigabate, жесткий - 120 Gb. Два привода CD и DVD,

ОЗУ 512 Mb.

Установить Win98? Так пойдет? А настройки какие? В WinXP не получится настроить?

Как в чистый дос выйти?

Где скачать книгу М. Гук "Аппаратные средства IBM PC?

Ссылка на комментарий
Поделиться на другие сайты

Вот то что тебе нужно.

Зарегистрируйся на www.librus.ru и в поиске набери "на аппаратном уровне".

Либо иди по ссылке ниже

_http://rapidshare.cоm/files/5962027/Prоgr_na_apparat_urоvne.rar

Ссылка на комментарий
Поделиться на другие сайты

Вот то что тебе нужно.

Зарегистрируйся на www.librus.ru и в поиске набери "на аппаратном уровне".

Либо иди по ссылке ниже

_http://rapidshare.cоm/files/5962027/Prоgr_na_apparat_urоvne.rar

Что-то ссылка блин не открывается. Если не сложно скиньте плиз эту книжку на почту _x@bk.ru

Ссылка на комментарий
Поделиться на другие сайты

  • 5 месяцев спустя...

У меня такой вопрос,

Файл картинки, расширением (*.*) может быть любым.

Что зависит от расширения? Способ организации файловой структуры?

На машинном уровне, в 16-ричном представлении ведь все одно и тоже: адрес точки(x,y) и ее цвет.

Как вскрыть картинку, чтоб увидеть эти адреса и код цвета? Если разрешение экрана 1024х768, то пакетов одного пикселя не может быть больше 786 432, а каждый пакет, следовательно, занимает 3 байта, всего получаем 2 304 Кб.

И еще, просмоторщик картинок, по какому принципу действует? Берет данные из графического файла и формирует графическую матрицу, которую потом отправляет в контроллер графической карты?

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

Ваш вопрос немного не в тему.. да и не в этот раздел.. это скрее в програмное обеспечение или в компьютерную технику..

также за такой флуд в виде желтых мордочек можно и рид онли получить...

также может стоит сменить цвет подписи? а то он до слез всех доведет ..

Duhas

Изменено пользователем Duhas
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...