图形学算法可视化系统实现
图形学算法可视化系统实现
(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;
}

浙公网安备 33010602011771号