java 画线段(bresenham,mid-bresenham)
来源:互联网 发布:蜜桃诱导充值视频源码 编辑:程序博客网 时间:2024/05/31 19:16
package myline;
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.Line2D;
import java.awt.image.BufferedImage;
import javax.swing.JLayeredPane;
import javax.swing.JTextField;
import javax.swing.JTextArea;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JCheckBox;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.Line2D;
import java.awt.image.BufferedImage;
import javax.swing.JLayeredPane;
import javax.swing.JTextField;
import javax.swing.JTextArea;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JCheckBox;
import javax.swing.AbstractAction;
import javax.swing.Action;
public class line extends JFrame {
private JTextField textField;
private JTextField textField_1;
private JTextField textField_2;
private JTextField textField_3;
public line() {
setBounds(450, 300, 450, 300);
JLayeredPane layeredPane = new JLayeredPane();
getContentPane().add(layeredPane, BorderLayout.CENTER);
textField = new JTextField();
textField.setBounds(116, 154, 66, 21);
layeredPane.add(textField);
textField.setColumns(10);
textField_1 = new JTextField();
textField_1.setBounds(209, 153, 66, 21);
layeredPane.add(textField_1);
textField_1.setColumns(10);
textField_2 = new JTextField();
textField_2.setBounds(116,104 , 66, 21);
layeredPane.add(textField_2);
textField_2.setColumns(10);
textField_3 = new JTextField();
textField_3.setBounds(209, 104, 66, 21);
layeredPane.add(textField_3);
textField_3.setColumns(10);
JCheckBox chckbxMidbresenham = new JCheckBox("mid-bresenham");
chckbxMidbresenham.setBounds(299, 103, 103, 23);
layeredPane.add(chckbxMidbresenham);
chckbxMidbresenham.setSelected(false);
JCheckBox chckbxBresenham = new JCheckBox("bresenham");
chckbxBresenham.setBounds(299, 153, 103, 23);
layeredPane.add(chckbxBresenham);
chckbxBresenham.setSelected(false);
chckbxBresenham.setBounds(299, 153, 103, 23);
layeredPane.add(chckbxBresenham);
chckbxBresenham.setSelected(false);
JButton btnOjk = new JButton("ok");
btnOjk.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
if(arg0.getSource()==btnOjk){
chckbxMidbresenham.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(chckbxMidbresenham.isSelected()){
String a=textField_2.getText();
String b=textField_3.getText();
String c=textField.getText();
String d=textField_1.getText();
boolean flag=true;
dispose();
jjjj j=new jjjj(a,b,c,d,flag);
j.setVisible(true);
System.out.println("mid");
}
}
});
chckbxBresenham.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(chckbxBresenham.isSelected()){
String aa=textField_2.getText();
String bb=textField_3.getText();
String cc=textField.getText();
String dd=textField_1.getText();
boolean flagg=true;
dispose();
jjjj j=new jjjj(aa,bb,cc,dd,flagg);
j.setVisible(true);
System.out.println("not mid");
}
}
});
@Override
public void actionPerformed(ActionEvent e) {
if(chckbxBresenham.isSelected()){
String aa=textField_2.getText();
String bb=textField_3.getText();
String cc=textField.getText();
String dd=textField_1.getText();
boolean flagg=true;
dispose();
jjjj j=new jjjj(aa,bb,cc,dd,flagg);
j.setVisible(true);
System.out.println("not mid");
}
}
});
}
}
});
btnOjk.setBounds(100, 200, 93, 23);
layeredPane.add(btnOjk);
JTextArea txtrX = new JTextArea();
txtrX.setEnabled(false);
txtrX.setText("\u8D77\u59CB\u5750\u6807");
txtrX.setBounds(26, 103, 66, 24);
layeredPane.add(txtrX);
JTextArea txtrY = new JTextArea();
txtrY.setEnabled(false);
txtrY.setText("\u7EC8\u70B9\u5750\u6807");
txtrY.setBounds(26, 153, 72, 24);
layeredPane.add(txtrY);
}
});
btnOjk.setBounds(100, 200, 93, 23);
layeredPane.add(btnOjk);
JTextArea txtrX = new JTextArea();
txtrX.setEnabled(false);
txtrX.setText("\u8D77\u59CB\u5750\u6807");
txtrX.setBounds(26, 103, 66, 24);
layeredPane.add(txtrX);
JTextArea txtrY = new JTextArea();
txtrY.setEnabled(false);
txtrY.setText("\u7EC8\u70B9\u5750\u6807");
txtrY.setBounds(26, 153, 72, 24);
layeredPane.add(txtrY);
}
public static void main(String[] args){
line a=new line();
a.setVisible(true);
a.setVisible(true);
}
}
package myline;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.EventQueue;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
public class jjjj extends JFrame {
private JPanel contentPane;
public String x000;
public String y000;
public String x111;
public String y111;
public boolean flag=false;
public String x000;
public String y000;
public String x111;
public String y111;
public boolean flag=false;
/**
* Launch the application.
*/
* Launch the application.
*/
/**
* Create the frame.
*/
public jjjj(String x00,String y00,String x11,String y11,boolean flag) {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(450, 300, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
this.x000=x00;
this.y000=y00;
this.x111=x11;
this.y111=y11;
this.flag=flag;
}
public int rex0(){
int x0=Integer.parseInt(this.x000);
return x0;
}
public int rey0(){
int y0=Integer.parseInt(this.y000);
return y0;
}
public int rex1(){
int x1=Integer.parseInt(this.x111);
return x1;
}
public int rey1(){
int y1=Integer.parseInt(this.y111);
return y1;
}
public boolean ref(){
return this.flag;
}
// @Override
int x0=Integer.parseInt(this.x000);
return x0;
}
public int rey0(){
int y0=Integer.parseInt(this.y000);
return y0;
}
public int rex1(){
int x1=Integer.parseInt(this.x111);
return x1;
}
public int rey1(){
int y1=Integer.parseInt(this.y111);
return y1;
}
public boolean ref(){
return this.flag;
}
// @Override
public void paint(Graphics g) {
super.paint(g);
int x0,y0,x1,y1,k;
boolean fl=false;
x0=this.rex0();
y0=this.rey0();
x1=this.rex1();
y1=this.rey1();
fl=this.ref();
int dx=x1-x0;
int dy=y1-y0;
k=dy/dx;
if((k<0)&&(k>=-1)){
if(fl==true){
int D=dx+2*dy;
int x=x1,y=y1;
while(x>=x0){
g.drawLine(x,y,x,y);
if(D<0){
x--;
y++;
D=D+2*dx+2*dy;
}
else{
x--;
D=D+2*dy;
}
}
}
}
else if(k<-1){
if(fl==true){
int D=dy+2*dx;
int x=x1,y=y1;
while(y>=y0){
g.drawLine(x,y,x,y);
if(D<0){
y--;
x++;
D=D+2*dy+2*dx;
}
else{
y--;
D=D+2*dx;
}
}
}
}
else if(k<=1){
if(fl==true)
{
int d=dx-2*dy;
int x=x0,y=y0;
while(x<=x1){
g.drawLine(x,y,x,y);
if(d<0){
x++;
y++;
d=d+2*dx-2*dy;
}
else{
x++;
d=d-2*dy;
}
}
}
if(fl==false){
int e=-dx;
int xx=x0,yy=y0;
while(xx<=x1){
g.drawLine(xx,yy,xx,yy);
e=e+2*dy;
if(e>0){
yy++;
xx++;
e=e-2*dx;
}
else{
xx++;
}
}
}}
else if(k>1){
if(fl==true)
{
int d=dy-2*dx;
int x=x0,y=y0;
while(y<=y1){
g.drawLine(x,y,x,y);
if(d<0){
x++;
y++;
d=d+2*dy-2*dx;
}
else{
y++;
d=d-2*dx;
}
}}
if(fl==false){
int e=-dy;
int xx=x0,yy=y0;
while(yy<=y1){
g.drawLine(xx,yy,xx,yy);
e=e+2*dx;
if(e>0){
yy++;
xx++;
e=e-2*dy;
}
else{
yy++;
}
}
}
}
}
}
ps:
坐标只能是正的,斜率正负都可以,但斜率负的时候只能用bresenham算法
输入两点坐标后,先点击ok,然后再选择算法类型
0 0
- java 画线段(bresenham,mid-bresenham)
- Bresenham画线
- 基于Bresenham和DDA算法画线段
- Bresenham画线算法(原创)
- 画线算法 - Bresenham原理及Java实现
- 图形学_画线算法(DDA、Bresenham)
- Bresenham 画线算法
- Bresenham高效画线算法
- Bresenham 画线算法
- Bresenham 画线算法
- Bresenham 画线算法
- Bresenham画线算法
- Bresenham 画线算法
- Bresenham高效画线算法
- Bresenham高效画线算法
- bresenham 画线算法
- Bresenham画线算法
- Bresenham画线算法
- 每天一个常用的linux命令(12)--whereis
- C#语法小知识(十二)匿名方法与Lambda表达式
- uva437 DAG
- linux C编程 进程操作
- 栏目简介
- java 画线段(bresenham,mid-bresenham)
- 2016年十月十五日
- 秒杀业务 架构优化之路
- Oracle用户管理学习总结
- SQL 数据库 学习 018 查询-01 计算列 的用法
- 浅析Webservice
- strongswan 搭建ikev1 for Android and iOS
- 带字数限制的文本域制作
- kibaba 选择字段