图形学算法可视化系统实现

图形学算法可视化系统实现

(javafx + maven + jogl )(个人记录)

项目使用javafx实现前端的界面展示,添加jogl依赖

实现的算法如下

/**
 * @title 直线Wu反走样
 * @description P0起点 P1中点
 * @author zhenjie
 * @param
 * @updateTime 2022/3/18 16:10
 * @throws
 */
public static void WuLine(GraphicsContext gc, MyPoint P0, MyPoint P1)
    {
        MyPoint p,t;
        if(Math.abs(P0.x-P1.x)==0)      //绘制垂线
        {
            if(P0.y>P1.y)           //交换顶点,使得起始点低于终点顶点
            {
                t=P0;P0=P1;P1=t;
            }

            for(p=P0;p.y<P1.y;p.y++)
            {
                drawPoint(gc,p);
            }
        }
        else
        {
            double k,e=0;
            k=(P1.y-P0.y)/(P1.x-P0.x);
            if(k>1.0)            //绘制k>1
            {
                if(P0.y>P1.y)
                {
                    t=P0;P0=P1;P1=t;
                }
                for(p=P0;p.y<P1.y;p.y++)
                {
                    drawPoint(gc,p);
                    drawPoint(gc,p.x+1,p.y);
                    e=e+1/k;
                    if(e>=1.0)
                    {
                        p.x++;
                        e--;
                    }
                }
            }
            if(0.0<=k && k<=1.0)     //绘制0≤k≤1
            {
                if(P0.x>P1.x)
                {
                    t=P0;P0=P1;P1=t;
                }
                for(p=P0;p.x<P1.x;p.x++)
                {
                    drawPoint(gc,p);
                    drawPoint(gc,p.x,p.y+1);
                    e=e+k;
                    if(e>=1.0)
                    {
                        p.y++;
                        e--;
                    }
                }
            }
            if(k>=-1.0 && k<0.0)     //绘制-1≤k<0
            {
                if(P0.x>P1.x)
                {
                    t=P0;P0=P1;P1=t;
                }
                for(p=P0;p.x<P1.x;p.x++)
                {
                    drawPoint(gc,p);
                    drawPoint(gc,p.x,p.y-1);
                    e=e-k;
                    if(e>=1.0)
                    {
                        p.y--;
                        e--;
                    }
                }
            }
            if(k<-1.0)           //绘制k<-1
            {
                if(P0.y<P1.y)
                {
                    t=P0;P0=P1;P1=t;
                }
                for(p=P0;p.y>P1.y;p.y--)
                {
                    drawPoint(gc,p);
                    e=e-1/k;
                    if(e>=1.0)
                    {
                        p.x++;
                        e--;
                    }
                }
            }
        }
        P0=P1;
    }
posted @ 2022-03-21 15:25  *Sakura/*  阅读(12)  评论(0)    收藏  举报