*

şükela:  tümü | bugün
  • gelistirdigi iki cok unlu algoritmasiyla taninir. (bkz: cizgi) (bkz: cember) algoritmaları carpmas bolmez cok hizli olur bu sebepten, halen ibmde calistigi rivayet olunur..
  • bir noktadan diger noktaya giden bir dogrunun sabit hareket ettigi eksenin karsit ekseninde ilerlemesi gereken adim sayisini hesaplamayi, toplama ve cikarma basitligine indiren, kendi ismiyle anilan algoritmanin mucidi. (bkz: mucid)
  • eksensel adım sayıları zaten toplama ve cıkarmadır. x ekseni boyunca: x2-x1, y ekseni boyunca y2-y1 kadar adim vardir. muhim olan bu adimlar arasi orandır ki cogu zaman realda gerceklesen bu islem basit toplama cikarma islemlerine dokulebilmektedir bu algoritma sayesinde...
  • adım adım giderken hesaplanmakta kullanıldığı için y(x) bilinmezdir, dolayısıyla y2-y1 değil y(x)-y(x-1)i kolay hesaplayan algoritmadır. bu durumda x ekseni boyunca x2-x1, y ekseni boyunca y2-y1 adım vardır demek, "3 beyaz 5 kırmızı topun olduğu bir torbadan 4 tane top çekildiğinde en az ikisinin kırmızı olma ihtimali kaçtır" gibi bir soruya "torbada 8 top var abi" cevabı vermekle aynı şeydir, bresenham güzel bir insandır.
  • bresenhamj@winthrop.edu adresinden ula$ilabilecek ki$i..
  • bresenham algoritmasinda carpma ve bolme vardir (cok az) fakat karekok ya da cos, sin gibi yavas islemler olmadigi icin canavar bir algoritmadir kendisi.
  • kendi dahilinde "doğru çizme" algoritması bulundurmayan, sdl gibi apiları kullanırken hayat kurtarmış "line algorithm"i yazmış olan üstad. aynı güzellikte bir kaç algoritma daha kullandım fakat anlaşılabilirliği, hızı açısından bresenham'ınki en iyisiydi. c/c++'da şöyledir kendileri.

    not: putpixel kullanıcı tanımlı bir fonksiyondur. gidin kendinizinkini yazın.

    void drawline(sdl_surface* surface, int x1, int y1, int x2, int y2) {
    int x, y;
    int dx, dy;
    int incx, incy;
    int balance;

    if (x2 >= x1)
    {
    dx = x2 - x1;
    incx = 1;
    }
    else
    {
    dx = x1 - x2;
    incx = -1;
    }

    if (y2 >= y1)
    {
    dy = y2 - y1;
    incy = 1;
    }
    else
    {
    dy = y1 - y2;
    incy = -1;
    }

    x = x1;
    y = y1;

    if (dx >= dy)
    {
    dy <<= 1;
    balance = dy - dx;
    dx <<= 1;

    while (x != x2)
    {
    putpixel(surface,x, y,yellow);
    if (balance >= 0)
    {
    y += incy;
    balance -= dx;
    }
    balance += dy;
    x += incx;
    } putpixel(surface,x, y,yellow);
    }
    else
    {
    dx <<= 1;
    balance = dx - dy;
    dy <<= 1;

    while (y != y2)
    {
    putpixel(surface,x, y,yellow);
    if (balance >= 0)
    {
    x += incx;
    balance -= dy;
    }
    balance += dx;
    y += incy;
    } putpixel(surface,x, y,yellow);
    }
    }
  • bir formun içerisini boyamak için de bir algoritması bulunan insan.
  • çarpma ve bölme işlemini her adımda (her adım derken her pixel için) yapmadığı için çarpma işlemi yoktur denir. sadece başta sabitleri hesaplarken bir çarpma işlemi (oda 2 ile çarpma yani, bir kere shift ediyorsun sadece) onun dışında da yoktur. 'dda' da yoktur yoksa çarpma işlemi

    bu algoritmanın bu kadar iyi olmasının sebebi sadece integer lar üzerinde işlem yaparak çizim noktalarını bulmasıdır. dda da ise toplama işlemleri float* tipi değerler üzerinde yapılır ve ayrıca her seferinde round kullanılır.
  • kendisinin çizgi algoritmasını çok eksenli, bilgisayar kontrollü aktüatörleri kontrol etmek için implemente ettim ve çok başarılı sonuçlar aldım. cnc torna, freze olsun 3d printer olsun, robot kol olsun.

    eksenlerden birinin diğerinin iki katı mesafeyi aynı zamanda kat etmesi gerektiğinde ben sana step pulse'larını gönderirken yarısı kadar zaman bekleyeyim 2 kat hızlı gitmiş ol diyemiyorsun. yazdığın koddaki overheadler yüzünden 1ms ve 2ms ayarlamak istediğin aralıklar (1+5)ms ve (2+5)ms oluyor. noldu? oran 1/2 yerine 6/7 oldu. çözüm? bresenham. ver koordinatları al stepleri.

    en güzel yanı da gömülü sitemlerle çalışırken veba gibi uzak durmanız gereken floating point işlemleri kullanmıyor olması. yani aslında kullanıyor ama en başta eğimi hesaplarken, burada kullanmıyor demek her iterasyonda kullanarak şımarıklık etmiyor anlamına geliyor.