Как написать алгоритмы Брезенхема в C #? - PullRequest
3 голосов
/ 05 марта 2011

Я написал так, но это работает только в 50% случаев. Может кто-нибудь сказать, что не так?

public void Bresenham(int x1,int y1,int x2,int y2,Color c)
        {            
            double dx = x2 - x1;
            double dy = y2 - y1;
            double d = 2*dy-dx; //aux variable
            double p1 = 2 * dy ;
            double p2 = 2 * (dy - dx);
            int x = x1;
            int y = y1;
            int xend;
            c = kolor;
            if (x1 > x2)
            {
                x = x2;
                y = y2;
                xend = x1;
            }
            else
            {
                x = x1;
                y = y1;
                xend = x2;
            }
            bitmapa.SetPixel(x, y,c);
            try
            {
                while (x < xend)
                {
                    x++;
                    if (d < 0)
                    {
                        d += p1;
                    }
                    else
                    {
                        d += p2;
                        y += 1;
                    }
                    bitmapa.SetPixel(x, y, c);
                }
            }

Спасибо:)

1 Ответ

4 голосов
/ 05 марта 2011

При первом снимке вы пропускаете случай, когда другая координата должна обрабатываться, как сейчас, когда вы обрабатываете Y. Теперь вы обрабатываете случай, когда DY

Чтобы понять, о чем я говорю, посмотрите steep здесь .

И на самом деле ваш алгоритм будет работать только в 1/4 случая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...