资源简介
三种算法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
{
相关资源
- 算法第四版,源代码非jar包,放src下
- PCA用java实现
- 旅行商问题-A*算法-java
- 史上最强大的java版的银行家算法
- 简单实现AES-CBC-MAC算法
- FIFO置换算法java代码实现
- java实现神经网络BP算法
- 电梯调度算法java实现
- 关联规则算法实现 java
- java实现银行家算法操作系统
- JAVA实现国际象棋算法
- delaunay三角剖分的java实现算法
- Java数据结构算法面试题
- 银行家算法java实现
- 数据挖掘Kmeans算法源代码 Java
- JAVA经典算法90题
- OATH标准OTP算法
- java实现基于SMO算法的SVM分类器
- java实现基于ID3算法的决策树分类器
- 带权图的多种算法有向图,无向图,
- Java实现的K-Means算法的动态演示
- C#、C++、HTML5、JAVA、Python、数据结构与
- 银行家算法java实现带UI界面修正版
- Tomasulo算法Java模拟器
- 图形学 Bezier曲线的递推(de Casteljau)
- java实现的棋盘算法
- 多维k-means聚类算法java实现,导入直接
- GN算法的java实现
- Apriori算法的Java实现
- 操作系统os页面置换算法java实现Cloc
评论
共有 条评论