From
Stanislav Shwartsman (2:400/520)
To
Maxim Petrankov ()
Date
2003-03-04T08:38:46Z
Area
RU.ALGORITHMS
Hello Maxim!

04 Mar 03 07:08, you wrote to All:

 MP> Есть точки с кооpдинатами x1,y1 и x2,y2. Надо постpоить между ними
 MP> линию имея возможность pисовать только точку.

 Алгоритм Брезенхема.

=== Cut ===

void line(DINFO *h, int x1, int y1, int x2, int y2, CTYPE color)
{
    short dy, mx, my, c, sc;

    if(x1 > x2){
        x1 ^= x2 ^= x1 ^= x2;
        y1 ^= y2 ^= y1 ^= y2;
    }

    mx = x2 - x1;           /* compute both distances */
    my = y2 - y1;

    if(!my) {
        h->Hline(h,x1,y1,mx,color);
        return;
    }

    if(!mx) {
        (my > 0) ? h->Vline(h,x1,y1,my,color):
               h->Vline(h,x1,y2,-my,color);
        return;
    }

    if(my < 0) {
        dy = -1;
        my = -my;
    }
    else dy = 1;

    if (mx>my) {
        sc=1+mx;
        mx-=my;
        c=(my-mx) >> 1;
        while( sc ) {
            h->SetPixel(h,x1,y1,color);
            if(c>=0) {
                y1+=dy;
                c-=mx;
            }
            else c+=my;
            x1++;
            sc--;
        }

    }
    else {
        sc=1+my;
        my-=mx;
        c=(my-mx) >> 1;
        while( sc ) {
            h->SetPixel(h,x1,y1,color);
            if(c>=0) c-=mx;
            else {
                x1++;
                c+=my;
            }
            y1+=dy;
            sc--;
        }
    }
}
=== Cut ===

    E-mail: gate@fidonet.org.il
    Voice Phones: 972-4-8330554 (home), 972-5-4481073 (cell)

Bye !
Stanislav     (AKA Night's Man)                        [Team Technion]
---
 * Origin: Gate From Another World ... From Haifa, Israel (2:400/520)