资源简介
三种算法java实现画线,java没有自带画点函数,所以用drawline画点,主要是图形学算法实现。
代码片段和文件信息
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class DrawLinePanel1 extends JPanel
{
private static final long serialVersionUID = 1L;
private int startX = 0;
private int startY = 0;
private int endX = 0;
private int endY = 0;
public DrawLinePanel1()
{
addMouseListener(new MouseHandler());
}
private class MouseHandler extends MouseAdapter
{
public void mousePressed(MouseEvent event) {// 鼠标按下时
if (event.getButton() == MouseEvent.BUTTON1)
{
startX = event.getX();
startY = event.getY();
}
}
public void mouseReleased(MouseEvent event) {// 鼠标释放时
if (event.getButton() == MouseEvent.BUTTON1)
{
endX=event.getX();
endY=event.getY();
Container c = (Container) event.getSource();
Graphics g = c.getGraphics(); //get a graphics context
g.setColor(Color.BLUE);
DDA(startXstartYendXendYg);//下面注释的是中点画线算法和Bresenham算法
// MidPoint(startXstartYendXendYg);
// Bresenham(startXstartYendXendYg);
}
}
private void DDA(int x0 int y0 int x1 int y1Graphics g)
{
double dxdyk;
dx = x1-x0;dy = y1-y0;
k = dy/dx;
if(Math.abs(k) >= 1.0)
{
int y = 0;
k = dx/dy;
double x = Math.max(x1 x0);
if(k >= 0)
x = Math.min(x1 x0);
for(y = Math.min(y1y0); y <= Math.max(y0 y1); y++)
{
g.drawLine((int)(x+0.5) y (int)(x+0.5)y);
x = x+k;
}
}
else
{
int x = 0;
double y = Math.min(y0y1);
if(k>-1 && k<0)
y = Math.max(y0y1);
for(x = Math.min(x0x1); x <= Math.max(x0x1); x++)
{
g.drawLine(x (int)(y+0.5) x (int)(y+0.5));
y = y+k;
}
}
}
private void MidPoint(int x0 int y0 int x1 int y1Graphics g){
int abd1d2dx = 0y;double k = 0;
a=y0-y1;b=x1-x0;
k = (-1.0*a)/b;
if(Math.abs(k)<=1)
{
if(k>=0)
{
a = Math.abs(y1-y0)*-1; b = Math.abs(x1-x0);
d = 2*a + b;
d1 = 2*a; d2 = 2*(a+b);
x = Math.min(x0x1); y = Math.min(y0y1);
g.drawLine(x y x y);
while(x {
if(d<0)
{x++; y++; d+=d2;}
else
{x++;d+=d1;}
g.drawLine(x y x y);
}
}
else
{
//a=Math.max(y1y0)-Math.min(y1 y0);b=Math.max(x1x0)-Math.min(x1x0);
a = Math.abs(y1-y0); b = Math.abs(x1-x0);
d=2*a-b;d2=2*a-2*b;d1=2*a;
x =Math.min(x1 x0);
y = Math.max(y1 y0);
g.drawLine(x y x y);
while (x {
if (d>0)
{
x++;
y--;
d+=d2;
}
else
{
相关资源
- 三角网构TIN生成算法,Java语言实现
- 推荐算法的JAVA实现
- 回归算法Java程序
- java实现的搜索引擎
- C#和Java实现互通的RSADES加解密算法
- java国密算法SM4加密.zip
- java算法大全含源码包
- 算法设计、分析与实现从入门到精通
- DES加密解密算法论文
- 华科密码学课设之SPN的差分攻击以及
- RSA数字签名算法的具体实现
- 银行家算法的java代码实现,Swing写的
- 大宝CA版本的国密算法DoubleCA-JCE实现,
- Java基于双向链表实现双端队列结构(
- 国密版本的SSL库
- RSA算法JAVA公钥加密,C#私钥解密
- aes加密算法 五种模式
- 论文研究 - 使用混合密码算法的端到
- des加密算法实现任意文件加解密
- Java模拟操作系统实验之四种进程调度
- 银行家算法JAVA代码实现,附带图形化
- HDP java代码,非参数主题模型学习算法
- EM算法java实现
- 数据结构与算法分析Java语言描述-英文
- SM2 SM3 SM4国密算法JAVA与JS实现版本
- N后问题 算法课设Java代码和报告
- 2017-广东工业大学操作系统课程设计银
- 数据结构与算法:C#语言描述(中,英
- Java编写的k-means文本聚类算法
- 计算机网络课程设计报告_DH算法_Wir
评论
共有 条评论