Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на языке Pascal

Выпуск № 017
от 11.06.2002, 22:00

Администратор:
Имя: Sensey
URL: Информационный ресурс
ICQ: 105679124
Украина, Харьков
О рассылке:
Задано вопросов: 35
Отправлено ответов: 87
Активность: 248.5 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе]


 Список экспертов, ответы которых опубликованы в данном выпуске

Топор
Статус: Опытный
Общий рейтинг: 127.77
URL: Хорошая Русская Металлическая команда
Телефон: (8462)160302, 162918
[Подробней >>]
Артём Шегеда
Статус: Профессиональный
Общий рейтинг: 130.73
URL: Пристанище неодинокого программиста
[Подробней >>]
computerphile
Статус: Начальный
Общий рейтинг: 121.73
[Подробней >>]
 
Zloy
Статус: Доверительный
Общий рейтинг: 105.33
[Подробней >>]
kvINT
Статус: Доверительный
Общий рейтинг: 113.29
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 32. I) Есть процедура рисования горизонтальной линии в SVGA(VESA)(256 цветов) режмах (для последующег... (ответов: 2)
Вопрос № 33. Нужно нарисовать в Turbo Pascal многоконечную звезду (скорее шестеренку) вершин так на 16. Помогите ... (ответов: 4)

Вопросов: 2, ответов: 6


 Вопрос № 32

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.



Вопрос отправлен: 08.06.2002, 13:35
Отправитель: KODer (KODer@xakep.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Топор

Здравствуйте, 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. Помогите пожалуйста!!!



Вопрос отправлен: 08.06.2002, 21:56
Отправитель: Serg

[Следующий вопрос >>] [Список вопросов]

Отвечает computerphile

Добрый день, 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.

© 2002 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (50)
C / C++ (30)
Perl (9)
Delphi (14)
Pascal (25)
Basic / VBA (15)
Java / JavaScript (6)
PHP (7)
MySQL / MSSQL (6)
Пользователю
Windows 95/98/Me (47)
Windows NT/2000/XP (34)
"Железо" (40)
Поиск информации (20)
Администратору
Windows NT/2000/XP (15)
Linux / Unix (9)
Юристу
Гражданское право (11)
Семейное право (5)
Трудовое право (6)
КоАП (3)

Отправить вопрос всем экспертам выбранной рассылки.




be number one Яндекс цитирования

© 2002 Россия, Москва. Авторское право: RusFAQ.ru

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное