реклама на сайте
подробности

 
 
> Lcd12864, Какие есть идеи...или пишем видеодрайвер...
zorromen
сообщение Nov 21 2006, 19:22
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 322
Регистрация: 13-12-05
Пользователь №: 12 147



Решил написать видеодрайвер с набором всяких там функций...и собрать в отдельном блоке общающимся по SPI....типа а нарисуйка мне квадратик...говорим ей по спи...а она ..на тебе квадратик...или кружечек или даже диагдамму...
так вот проблема с кружочками и кольцами...выходят они не очень..мож есть идеи чтобы они стали круглыми?...если есть идеи какие добавить функции пишите...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
vooon
сообщение Nov 22 2006, 01:21
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 72
Регистрация: 27-06-06
Из: Msk
Пользователь №: 18 401



Порылся нашел алгоритмы для расования линий и окружностей
что такое glcd_put_pixel(x, y, color); думаю понятно smile.gif (color != 0 - черная точка)

Код
/*************************************************************************
Рисование 8-связной развертки отрезка методом Брэзенхема

Начало в точке (x1,y1), конец в (x2,y2)
*************************************************************************/
void glcd_line(int x1, int y1, int x2, int y2,unsigned char color)
{
    int x;
    int y;
    int dx;
    int dy;
    int sx;
    int sy;
    int z;
    int e;
    int i;
    bit ch;

    x = x1;
    y = y1;
    dx = abs(x2-x1);
    dy = abs(y2-y1);
    sx = sign((double)(x2-x1));
    sy = sign((double)(y2-y1));
    if( dx==0&&dy==0 )
    {
        glcd_put_pixel(x1, y1, color);
        return;
    }
    if( dy>dx )
    {
        z = dx;
        dx = dy;
        dy = z;
        ch = true;
    }
    else
    {
        ch = false;
    }
    e = 2*dy-dx;
    i = 1;
    do
    {
        glcd_put_pixel(x, y, color);
        while(e>=0)
        {
            if( ch )
            {
                x += sx;
            }
            else
            {
                y += sy;
            }
            e -= 2*dx;
        }
        if( ch )
        {
            y += sy;
        }
        else
        {
            x += sx;
        }
        e += 2*dy;
        ++i;
    }
    while(i<=dx);
    glcd_put_pixel(x, y, color);
}

/*************************************************************************
Рисование развертки круга методом Брэзенхема

Центр в точке (xc, yc), радиус r.
*************************************************************************/
void glcd_circle(int xc, int yc, int r,char color)
{
    int x;
    int y;
    int d;

    x = 0;
    y = r;
    d = 3-2*r;
    while(y>=x)
    {
        glcd_put_pixel((x+xc), (y+yc), color);
        glcd_put_pixel((x+xc), (-y+yc), color);
        glcd_put_pixel((-x+xc), (y+yc), color);
        glcd_put_pixel((-x+xc), (-y+yc), color);
        glcd_put_pixel((y+xc), (x+yc), color);
        glcd_put_pixel((y+xc), (-x+yc), color);
        glcd_put_pixel((-y+xc), (x+yc), color);
        glcd_put_pixel((-y+xc), (-x+yc), color);
        
        if( d<0 )d += 4*x+6;
        else{
            d += 4*(x-y)+10;
            --y;
        }
        ++x;
    }
}
Go to the top of the page
 
+Quote Post
prottoss
сообщение Nov 22 2006, 01:30
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(vooon @ Nov 22 2006, 05:21) *
Порылся нашел алгоритмы для расования линий и окружностей...
Код
/*************************************************************************
Рисование развертки круга методом Брэзенхема

Центр в точке (xc, yc), радиус r.
*************************************************************************/
void glcd_circle(int xc, int yc, int r,char color)
{
    int x;
    int y;
    int d;

    x = 0;
    y = r;
    d = 3-2*r;
    while(y>=x)
    {
        glcd_put_pixel((x+xc), (y+yc), color);
        glcd_put_pixel((x+xc), (-y+yc), color);
        glcd_put_pixel((-x+xc), (y+yc), color);
        glcd_put_pixel((-x+xc), (-y+yc), color);
        glcd_put_pixel((y+xc), (x+yc), color);
        glcd_put_pixel((y+xc), (-x+yc), color);
        glcd_put_pixel((-y+xc), (x+yc), color);
        glcd_put_pixel((-y+xc), (-x+yc), color);
        
        if( d<0 )d += 4*x+6;
        else{
            d += 4*(x-y)+10;
            --y;
        }
        ++x;
    }
}
Вот хоть один человек в тему ответил smile.gif

...Да уж, функция glcd_put_pixel не из быстрых...


--------------------
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- zorromen   Lcd12864   Nov 21 2006, 19:22
- - bodja74   Чем то подобным prottos занимался,вроде не бесплат...   Nov 21 2006, 19:48
|- - prottoss   Цитата(bodja74 @ Nov 21 2006, 23:48) Чем ...   Nov 21 2006, 20:26
- - zorromen   у тебя по TWI как я понял. там есть куча быстрых ...   Nov 21 2006, 21:21
|- - prottoss   Цитата(zorromen @ Nov 22 2006, 01:21) у т...   Nov 21 2006, 21:40
- - zorromen   Про ссылку не знал... а тайминги это для экрана 12...   Nov 21 2006, 22:02
|- - prottoss   Цитата(zorromen @ Nov 22 2006, 02:02) Про...   Nov 21 2006, 22:21
- - zorromen   Панятна...у тебя одна функция на очистку и на инве...   Nov 21 2006, 22:32
|- - prottoss   Цитата(zorromen @ Nov 22 2006, 02:32) Пан...   Nov 21 2006, 22:43
- - zorromen   Небуду искать потому что я сам уже написал и пролн...   Nov 21 2006, 23:05
|- - prottoss   Цитата(zorromen @ Nov 22 2006, 03:05) Неб...   Nov 21 2006, 23:10
- - bodja74   >>закрашиваемая или очищаемая область помеща...   Nov 21 2006, 23:32
|- - prottoss   Цитата(bodja74 @ Nov 22 2006, 03:32) ...   Nov 21 2006, 23:58
|- - bodja74   Цитата(prottoss @ Nov 21 2006, 23:58) Зна...   Nov 22 2006, 00:33
|- - prottoss   Цитата(bodja74 @ Nov 22 2006, 04:33) Неа,...   Nov 22 2006, 00:51
- - zorromen   Ура...щас проверим...спасибо за кружечки.....   Nov 22 2006, 08:17
- - at90   Вот выкладываю библиотеку GLCD для контроллера ks...   Nov 22 2006, 08:26
- - zorromen   Огромное спасибо. это просто супер java script:emo...   Nov 22 2006, 08:26
- - zorromen   тоже метод...я использую... void LCD_DrawLine(unsi...   Nov 22 2006, 08:52
- - zorromen   Сколько времени уходит на рисование точки? Это на ...   Nov 22 2006, 19:13
|- - prottoss   Цитата(zorromen @ Nov 22 2006, 23:13) А д...   Nov 22 2006, 20:14
- - zorromen   Уважаемый prottoss не хачу надоедать...но придется...   Nov 22 2006, 22:07
|- - prottoss   Цитата(zorromen @ Nov 23 2006, 02:07) Ува...   Nov 24 2006, 14:55
- - zorromen   Обрашения но...выполнение одной операции занимает ...   Nov 24 2006, 19:22
|- - prottoss   Цитата(zorromen @ Nov 24 2006, 23:22) Обр...   Nov 24 2006, 20:17
- - zorromen   На твоем сайте я вижу мегу16 ... и что влом собрат...   Nov 24 2006, 21:03
- - bodja74   Молодец ,prottos, давно так не смеялся . :D А лу...   Nov 24 2006, 21:05
- - zorromen   Фронт разворота =100 мсек... вот и выходит не чаще...   Nov 24 2006, 21:47


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 19:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01429 секунд с 7
ELECTRONIX ©2004-2016