带笔划算法的Java绘图线

带笔划算法的Java绘图线,java,algorithm,drawing,line,Java,Algorithm,Drawing,Line,我知道画简单线条的算法,但我很难找到java如何用笔划创建线条。起初我以为他们可能会沿着直线为每个像素绘制一个矩形,但后来我意识到,重新绘制已经绘制的像素可能需要额外的时间。我想知道这个算法的原因是,我可以接收从绘画中改变的像素 注:该行算法来自Tech-Algorithm.com public void line(int x,int y,int x2, int y2, int color) { int w = x2 - x ; int h = y2 - y ; int

我知道画简单线条的算法,但我很难找到java如何用笔划创建线条。起初我以为他们可能会沿着直线为每个像素绘制一个矩形,但后来我意识到,重新绘制已经绘制的像素可能需要额外的时间。我想知道这个算法的原因是,我可以接收从绘画中改变的像素

注:该行算法来自Tech-Algorithm.com

public void line(int x,int y,int x2, int y2, int color) {
    int w = x2 - x ;
    int h = y2 - y ;
    int dx1 = 0, dy1 = 0, dx2 = 0, dy2 = 0 ;
    if (w<0) dx1 = -1 ; else if (w>0) dx1 = 1 ;
    if (h<0) dy1 = -1 ; else if (h>0) dy1 = 1 ;
    if (w<0) dx2 = -1 ; else if (w>0) dx2 = 1 ;
    int longest = Math.abs(w) ;
    int shortest = Math.abs(h) ;
    if (!(longest>shortest)) {
        longest = Math.abs(h) ;
        shortest = Math.abs(w) ;
        if (h<0) dy2 = -1 ; else if (h>0) dy2 = 1 ;
        dx2 = 0 ;            
    }
    int numerator = longest >> 1 ;
    for (int i=0;i<=longest;i++) {
        buffer.setRGB(x, y, color);

        numerator += shortest ;
        if (!(numerator<longest)) {
            numerator -= longest ;
            x += dx1 ;
            y += dy1 ;
        } else {
            x += dx2 ;
            y += dy2 ;
        }
    }
}
公共虚线(整数x,整数y,整数x2,整数y2,整数颜色){
int w=x2-x;
int h=y2-y;
int dx1=0,dy1=0,dx2=0,dy2=0;
如果(w0)dx1=1;
如果(h0)dy1=1;
如果(w0)dx2=1;
int longest=Math.abs(w);
int最短=数学绝对值(h);
如果(!(最长>最短)){
最长=数学绝对值(h);
最短=数学abs(w);
如果(h0)dy2=1;
dx2=0;
}
整数分子=最长>>1;

对于(int i=0;我不确定Java是否会。我想你会发现很多这方面的问题将被处理到DirectX或OpenGL层…@MadProgrammer我更愿意尝试自己做这些算法,以允许灵活处理我能做和不能做的事情。我更愿意坚持使用Java,尽管这可能比使用OpenGL和我不是说你不应该这样做,但是如果你想知道Java是如何做到的,很可能这些信息会通过管道传递到本机图形层,并由这些API提供的功能来处理……只是说;)@MadProgrammer好的,那么如果我查看这两个API上的源代码,假设大部分源代码尚未编译,我可以根据OpenGL和DirectX提供的内容重新创建我想要的?这就是您要找的吗?:。用户提供了一个指向