I) Есть процедура рисования горизонтальной линии в SVGA(VESA)(256 цветов) режмах (для последующего построчного вывода закрашенных полигонов); Т.к. линия горизонтальная, то её вывод - это просто заполнение нужной области памяти цвето-байтом, и ессесено использует обычный FillChar(mem[seg:offset1],count,color); II) А есть с тем же алгоритмом на вмонтированном в PAS ASMе оптимизированная проседура; Всё бы да зашебись, да вот асмованная в 3(!!!) раза медленнее работает !!! Не могу разобраться... Предположу несколько причин: 1) Вмонтированный АСМ - говённый АСМ. 2) Применение в АСМовой процедуре следующей дребедени: ... db $66; shl ax,16 (* shl eax,16 *) ... db 66h; rep stosw (* rep stosd *) ... {Я так понял, что это что-то вроде осуществления 32-разрядных опираций.} 3)
Суперрр-трупперрр моща FillCharа. Если я прав в последнем ;), то киньте (если есть) АСМ-код FillChara.
Здравствуйте, KODer! Первая причина вероятнее, поскольку встроенный Асм держит, как и весь Паскаль, команды только до .286 и не выравнивает его. К тому же, 66h вставляется обычно, если в 16битном досовом режиме работают с 32разрядными операндами, а у тебя случай явно не тот. Может, ещё и поэтому притормаживает.
Ответ отправлен: 08.06.2002, 16:02 Отправитель: Топор Отвечает Артём Шегеда
Доброе время суток, KODer! 1) отчасти справедливо, но для большинства нужд хватает. 2) перекидывать процессор в/из 32-битный режим - неблагодарное занятие: уж больно медленно получается. Но по-моему это не главное. Запись двойного слова в видеопамять подразумевает, что видеопамять примет это слова сразу целиком (здесь я могу ошибаться). 3) вот тебе код FillChar:
Приложение: Ответ отправлен: 08.06.2002, 15:59 Отправитель: Артём Шегеда
Вопрос № 33
Нужно нарисовать в Turbo Pascal многоконечную звезду (скорее шестеренку) вершин так на 16. Помогите пожалуйста!!!
Добрый день, Serg! Я нарисовал звезду задаваемую двумя "окружностями" и количеством вершин звезды. Короче рисуй сколько хочешь. R1 должен быть больше чем R2. Будут вопросы пиши: hyades@mail.ru Удачи.
Приложение: Ответ отправлен: 11.06.2002, 19:39 Отправитель: computerphile Отвечает Zloy
Приветствую Вас, Serg! Ну так создай масив с координатами и выведи его с помощью drawpoly. Ответ отправлен: 09.06.2002, 11:38 Отправитель: Zloy Отвечает kvINT
Приветствую Вас, Serg! Рассчитываешь точки на окружности и заносишь их координаты в двумерный массив или в два одномерных. Соединяешь точки между собой линиями. Вот кусок для расчета точек: radius:=твой радиус; for i:=1 to твое число вершин do begin x[i]:=gx(Cos(2*Pi*i/твое число вершин),radius); y[i]:=gy(Sin дальше так же end;
Ответ отправлен: 10.06.2002, 20:02 Отправитель: kvINT Отвечает Артём Шегеда
Доброе время суток, Serg! Трогонометрические функции нужно не только знать, но и уметь ими пользоваться... Нужна звезда? Нарисуй её схему на листе бумаги (если умеешь пользоваться всякими Paint'ами, то используй их). Пойми, что точки расположены на двух концентрических окружностях. Сделай вывод о том, что без функций sin и cos ничего не получится. Продумай алгоритм - приблизительно он выглядит так: 0. i:=0 (номер вершины) 1. Переместить перо в точку, расположенную на внутренней окружности и повёрнутую на угол 0 относительно центра. 2. Провести прямую в точку, расположенную на внутренней окружности и повёрнутую на угол i*(2*pi)/N+(2*pi)/(2*N) относительно центра. 3. Увеличить i на 1. 4. Провести прямую в точку, расположенную на внутренней окружности и повёрнутую на угол i*(2*pi)/N относительно центра. 5. Если iИ ещё: координаты точки, удалённой от точки O(x1,y1) на расстояние R и повёрнутой относительно неё на угол Alpha вычисляются по формулам: x=x1+R*cos(Alpha) y=y1+R*sin(Alpha)
Ответ отправлен: 10.06.2002, 13:37 Отправитель: Артём Шегеда
Форма отправки вопроса
Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook"
и "Microsoft Outlook Express". В программе The Bat!
подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте,
что в некоторых браузерах могут стоять запреты на открытие других
окон, а также "чрезмерное" кэширование данных,
при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet
Explorer 5.0+ или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.