Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Сб дек 16, 2017 12:11 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 93 сообщения ]  На страницу 1 2 3 4 57 След.
Автор Сообщение
СообщениеДобавлено: Пн авг 31, 2009 6:49 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пн окт 27, 2008 10:10 pm
Сообщения: 751
Решил написать несколько функций для работы с векторными данными.
Пока что все функции находятся в файле, но в будущем думаю можно переделать его в библиотеку. Все функции написаны на asm. Перспективы могут быть очень большими, пока что есть 3 пробных примера:
1) рисование 3-х стрелок
2) рисование символа из 3-х контуров
3) рисуется самолет, который можно поворачивать курсорами (чем-то напоминает игры наподобие Rocket Forces)
Документации пока еще нет.


Вложения:
vectors.7z [4.06 КБ]
133 скачивания
Вернуться к началу
 Заголовок сообщения: Re: Векторные функции
СообщениеДобавлено: Пн авг 31, 2009 8:26 pm 
А может имеет смысл вызывать библиотеку с указателем на блок данных описывающих фигуру из отрезков (относительные кординаты, цвет и толщина), а также задавать масштаб для всего массива?
Плюс со временем количество примитивов можно расширить: треугольник, прямоугольник, круг. Хотя две последние фигуры можно рисовать при помощи треугольников.


Вернуться к началу
   
 Заголовок сообщения: Re: Векторные функции
СообщениеДобавлено: Вт сен 01, 2009 2:12 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пн окт 27, 2008 10:10 pm
Сообщения: 751
Все функции вынес в библиотеку, переделал 2 примера под нее. Написал небольшую документацию.


Вложения:
Комментарий к файлу: 1-я версия библиотеки + 2 примера
vectors.7z [6.19 КБ]
136 скачиваний
Вернуться к началу
 Заголовок сообщения: Re: Векторные функции
СообщениеДобавлено: Ср сен 02, 2009 12:46 pm 
Еще идея вдогонку - сделать готовые шаблоны. Например, пример со стрелками уже подходит для чертежей навроде AutoCAD.


Вернуться к началу
   
 Заголовок сообщения: Re: Векторные функции
СообщениеДобавлено: Ср сен 02, 2009 1:01 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пн окт 27, 2008 10:10 pm
Сообщения: 751
Mario писал(а):
идея вдогонку - сделать готовые шаблоны. Например, пример со стрелками

Внести функцию рисующую стрелку внутрь библиотеки, или просто заготовить разные примеры но в виде файлов *.kex ?
Кстати для стрелки можно сделать разной формы наконечники, допустим как в Word-е.

Возник еще вопрос: Как можно сделать что-бы через определенное время вызывалась какая-либо функция? На сколько я знаю таймера в Колибри нет. Хотел сделать более интересные примеры, но таймер не знаю как сделать.


Вернуться к началу
 Заголовок сообщения: Re: Векторные функции
СообщениеДобавлено: Ср сен 02, 2009 1:18 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 19, 2005 4:43 pm
Сообщения: 896
Цитата:
Возник еще вопрос: Как можно сделать что-бы через определенное время вызывалась какая-либо функция? На сколько я знаю таймера в Колибри нет. Хотел сделать более интересные примеры, но таймер не знаю как сделать.


А в libGUI есть програмные таймеры. :mrgreen:
Их там можно ставить сколько угодно и на любые функции. Знаю, что обещал ещё в четверг выложить libGUI, но я сам не думал, что портирование libGUI в KolibriOS будет не таким лёгким. Надеюсь сегодня или завтра добить эту проблему и портировать библиотеку окончательно.

_________________
KolibriOS-перспективная ос!
Kolibri is best operation system in the world!


Вернуться к началу
 Заголовок сообщения: Re: Векторные функции
СообщениеДобавлено: Ср сен 02, 2009 1:19 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Пн ноя 28, 2005 8:00 pm
Сообщения: 1601
IgorA писал(а):
Возник еще вопрос: Как можно сделать что-бы через определенное время вызывалась какая-либо функция?

В цикле обработки сообщений использовать не 10-ю функцию, а 23-ю, рассчитывая таймаут как время от текущего момента до следующего пробуждения.


Вернуться к началу
 Заголовок сообщения: Re: Векторные функции
СообщениеДобавлено: Ср сен 02, 2009 1:21 pm 
Цитата:
Внести функцию рисующую стрелку внутрь библиотеки, или просто заготовить разные примеры но в виде файлов *.kex ?

Не обязательно все в отдельные бинарники спихивать - можно в виде текстового или бинарного файла подгружать и сделать вьювер. Впоследствии облегчится использование, за счет уже готового набора шаблонов. Я, например, могу к zSea прикрутить подгрузку модуля для просмотра шаблонов.
Цитата:
Как можно сделать что-бы через определенное время вызывалась какая-либо функция?

Часть кода из zSea, при желании использовать - лицензия BSD, т.е. позволяет делать все что угодно (в том числе закрыть исходный код), но упоминание авторства куска кода остается.
Код:
slide_show:
    mcall 26,9
   cmp   [timer],eax
   jbe   .1
   jmp   .still
.red:
    call draw_window
.still:
   mcall 23,10
    cmp  eax,1         ; перерисовать окно ?
    je      .red
    cmp  eax,2         ; нажата клавиша ?
    je      .key         ; если да - на key
    cmp  eax,3         ; нажата кнопка ?
    je      .button     ; если да - на button
;   mcall 68,1
   jmp   slide_show
;-------------------------------------------
.key:
    mcall 2
..........
   jmp   .still
;-------------------------------------------
.button:         ; button
    mov  eax,17       ; get id
    mcall
    cmp  ah,1        ; button id=1 ?
   je  START.exit
.noclose:
    cmp  ah,2
    je   still
    jmp  slide_show
;-------------------------------------------
.1:
.........  <- действия
    mcall 26,9
    add  eax,[slide_show_delay]  ;500
    mov   [timer],eax
    jmp  slide_show


Вернуться к началу
   
 Заголовок сообщения: Re: Векторные функции
СообщениеДобавлено: Ср сен 02, 2009 1:39 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Пн ноя 28, 2005 8:00 pm
Сообщения: 1601
Ну, только что приведённый код просыпается каждые 0.1 секунду, что во многих случаях заметно чаще, чем следовало бы (если таймауты большие, порядка секунд или больше), а в некоторых менее точное, чем могло бы (если сами таймауты типа 0.12 секунд). Вычисление таймаута, про которое я говорил в предыдущем посте, может выглядеть так:
Код:
...инициализация...
   mcall   26, 9
   mov   [last_time], ebx
...ещё инициализация...
...цикл обработки сообщений...
still:
   mcall   26, 9
   mov   ebx, [last_time]
   add   ebx, Delay
   sub   ebx, eax
   cmp   ebx, Delay
   ja   it_is_time_now
   test   ebx, ebx
   jz   it_is_time_now
   push   23
   pop   eax
   mcall
   dec   eax
   js   it_is_time_now
   jz   redraw
   dec   eax
   jnz   button
key:
...
it_is_time_now:
   mcall   26, 9
   mov   [last_time], eax
...здесь идут действия, вызываемые каждые Delay сотых долей секунд...
   jmp   still

kiv делает примерно так (разве что дополнительно учитывает, что для статических картинок пробуждаться вообще не нужно), но сам по себе код независим от kiv и может быть использован без всякой связи.

_________________
Ушёл к умным, знающим и культурным людям.


Вернуться к началу
 Заголовок сообщения: Re: Векторные функции
СообщениеДобавлено: Ср сен 02, 2009 1:57 pm 
Цитата:
разве что дополнительно учитывает, что для статических картинок пробуждаться вообще не нужно

процедура называется slide_show (ИМХО из названия все понятно уже), zSea не использует ее при обычном просмотре


Вернуться к началу
   
 Заголовок сообщения: Re: Векторные функции
СообщениеДобавлено: Ср сен 02, 2009 7:46 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пн окт 27, 2008 10:10 pm
Сообщения: 751
сделал пример с таймером, библиотека не изменялась


Вложения:
Комментарий к файлу: авиа симулятор ;)
samolot.7z [3.7 КБ]
123 скачивания
Вернуться к началу
 Заголовок сообщения: Re: Векторные функции
СообщениеДобавлено: Ср сен 02, 2009 10:17 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Чт мар 01, 2007 7:57 pm
Сообщения: 834
Самолёт при движении по диагонали всё время меняет свою форму - это плохо. Но понятно, что это только начало, поэтому желаю удачи!

_________________
Всех выше те, кто доброе творят,
И за дела добра не ждут наград,
Всем жертвуют для страждущих людей,
Не думая о выгоде своей.


Вернуться к началу
 Заголовок сообщения: Re: Векторные функции
СообщениеДобавлено: Ср сен 02, 2009 11:00 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пн окт 27, 2008 10:10 pm
Сообщения: 751
Атауальпа писал(а):
Самолёт при движении по диагонали всё время меняет свою форму - это плохо

В данном случае это хорошо. Дело в том, что координаты центральной точки дробные числа по 4 байта (float). Вычисления координат точек тоже в дробных числах идут. А уже при выводе на экран они округляються до ближайших целых значений. Потому самолет и меняет форму, что округление может происходить каждый раз по разному.
Т. е. можно сделать округление координат центральной точки, и тогда самолет не будет менять форму при движении. Это не есть недостаток библиотеки или алгоритма программы :wink:


Вернуться к началу
 Заголовок сообщения: Re: Векторные функции
СообщениеДобавлено: Чт сен 03, 2009 6:14 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пн окт 27, 2008 10:10 pm
Сообщения: 751
Немного обновил библиотеку и документацию. Добавил параметр для разбиения точек на отрезки (будет удобнее для программистов).
В архиве 3 примера, которые были и раньше:
1) со стрелками 2) с часами 3) с самолетом


Вложения:
vectors_090603.7z [8.77 КБ]
124 скачивания
Вернуться к началу
 Заголовок сообщения: Re: Векторные функции
СообщениеДобавлено: Пн сен 07, 2009 5:22 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пн окт 27, 2008 10:10 pm
Сообщения: 751
Добавил функции рисования кривых Безье.
Но правда есть один глюк, пока не удалось его найти. Если в одном контуре разные кривые (Безье и линейные) то программа вылетает. По отдельности работает нормально.


Последний раз редактировалось IgorA Пн сен 07, 2009 6:11 pm, всего редактировалось 1 раз.

Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 93 сообщения ]  На страницу 1 2 3 4 57 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB