plotlinedda.c

来自「Digital Differential Analyzer for Lines 」· C语言 代码 · 共 40 行

C
40
字号
	extern void SetPixel (int x, int y);

    typedef void SetPixelFunc (int a, int b);

    void xySetPixel (int x, int y) { SetPixel (x, y); }

    void yxSetPixel (int y, int x) { SetPixel (x, y); }

    void PlotLineDDA (SetPixelFunc* pfPlot, int a1, int a2, int b, int da, int db, int bc) {
        int g1= db + db;
        int g2= g1 - da - da;
        int g= g1 - da;
        for (int a= a1; a < a2; ++a) {
            pfPlot (a, b);
            if (g < 0)
                g= g + g1;
            else {
                g= g + g2;
                b= b + bc;
            }
        }
        pfPlot (a, b);
    }

    void PlotLine (int x1, int y1, int x2, int y2) {
        int dxabs= abs (x2 - x1);
        int dyabs= abs (y2 - y1);
        if (dxabs >= dyabs) {
            if (x1 < x2)
                PlotLineDDA (xySetPixel, x1, x2, y1, dxabs, dyabs, y1 < y2? 1:-1);
            else
                PlotLineDDA (xySetPixel, x2, x1, y2, dxabs, dyabs, y2 < y1? 1:-1);
        } else {
            if (y1 < y2)
                PlotLineDDA (yxSetPixel, y1, y2, x1, dyabs, dxabs, x1 < x2? 1:-1);
            else
                PlotLineDDA (yxSetPixel, y2, y1, x2, dyabs, dxabs, x2 < x1? 1:-1);
        }
    }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?