![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 01.09.2011
Сообщений: 5
|
![]()
Может знает кто, как средствами BIOS изобразить на экране окружность ? Очень надо. Срочно
![]() |
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
![]()
AnnyOne
Рисование окружности Построить окружность несложно. У окружности координаты любой точки относительно ее центра вычисляются из соотношения R²=X²+Y², где R радиус окружности. С точки зрения программирования достаточно нарисовать 1/8 часть окружности, а симметрия закончит дело. В языках программирования высокого уровня существует специальная функция CIRCLE, которая строит окружность либо, вычисляя синус, либо, двигаясь например по оси X вычисляет на каждом шаге координату Y по формуле √(R²-X²). В языке ассемблера для вычисления квадратного корня или функции синуса пришлось бы использовать обращение к сопроцессору, а такая программа с точки зрения ассемблера работает непозволительно долго. Подумаем, как нам реализовать более быстрый метод рисования окружностей используя только целочисленную арифметику, ведь на экране можно выводить точку только туда, где находится люминофор, а не между люминофорами, или смещать точку на долю микрона вправо или влево. Пусть центр окружности находится в точке (0, 0) Y=R=100 и X=0 по формуле Y² равен R²−X². По мере движения по оси X мы должны выяснить, когда нам необходимо уменьшить Y. Это нужно сделать если отклонение от Y будет больше 0,5 величины люминофора, т.е. больше должна засвечиваться соседняя точка. Вычисляем квадрат отклонения: (Y−0,5)²=Y²−Y+0,25. Выражение Y²−Y вычисляется в целых числах, а 0,25 игнорируем. Если разность R²−X² больше чем Y²−Y необходимо уменьшить Y на единицу и опять пересчитать ту величину, когда необходимо будет снова изменить Y и так в цикле. Вы выводите N точек, где N вычисляется из значения L=2*π*R. Так как Вам надо нарисовать 1/8 окружности N=L/8=3.14*R/4≈157*R/200. Последний раз редактировалось Mikl___; 02.09.2011 в 04:25. |
![]() |
![]() |
![]() |
#3 |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
![]()
[продолжение]
Код:
Последний раз редактировалось Mikl___; 02.09.2011 в 05:40. |
![]() |
![]() |
![]() |
#4 |
Регистрация: 01.09.2011
Сообщений: 5
|
![]()
О_О
солидный код ) спасибо. забыла я уточнить, что программу-то нужно писать, например, на си с ассемблерными вставками. это ведь упростит задачу намного ? |
![]() |
![]() |
![]() |
#5 |
Участник клуба
Регистрация: 23.12.2010
Сообщений: 1,129
|
![]()
Особо не упростит, если рисование должно быть написано на ассемблере.
|
![]() |
![]() |
![]() |
#6 |
Регистрация: 01.09.2011
Сообщений: 5
|
![]()
а черт поймет что преподавателям надо конкретно )
в любом случае спасибо, уже разобрались ![]() |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
как к BIOS обращаться. Нужно чтение/запись BIOS. | Dethon_ASM_Scarel | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 7 | 26.10.2011 11:40 |
bios | Pavel1992 | Компьютерное железо | 5 | 08.10.2010 13:09 |
BIOS | smileman | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 17 | 24.05.2009 21:29 |
BIOS | smileman | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 16 | 16.07.2008 14:54 |
Bios | vitalik007 | Общие вопросы Delphi | 4 | 20.08.2007 11:05 |