java实现计算机图形学中点画线算法

代码;DrawLine.java;

import javax.swing.*;
import java.awt.*;

public class DrawLine extends JPanel {

    public static void main(String[] args) {
        JFrame frame = new JFrame("Midpoint line drawing algorithm");        
frame.getContentPane().add(new DrawLine());        
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        
frame.setSize(350, 350);        
frame.setVisible(true);
    
}

    protected void paintComponent(Graphics g) {
        
        super.paintComponent(g);
        //g.drawLine(50, 50, 200, 250);
        //g.fillRect(80+7, 80+7, 8, 8);

        Point p1=new Point(0,0);
        Point p2=new Point(200,200);

	int x,y,xEnd;
	int a,b,p;
	
	if(p1.x>p2.x)
	{
		x=p2.x;
		y=p2.y;
		xEnd = p1.x;
	}
	else
	{
		x=p1.x;
		y=p1.y;
		xEnd = p2.x;
	}
	a =p1.y-p2.y;
	b =p2.x-p1.x;
	p =2*a+b;
 
	//SetPixel(hdc, x,y,color);
        g.fillRect(x+7, y+7, 8, 8);
 
	while(x

这里需要自定义一个Point类,包含x、y成员;

使用 g.fillRect(x+7, y+7, 8, 8) 在坐标x、y画一个 8 像素大小的方块,代替设置一个像素点的颜色;fillRect,填充方块;

引入swing库,swing.*;

命令行构建并运行,结果如下;

java实现计算机图形学中点画线算法_第1张图片

java实现计算机图形学中点画线算法_第2张图片

    这是中点画线算法,一个点一个点出来的,不是用 drawLine 函数画的;

如果把算法中x++、y++修改;

    while(x     {
        x=x+10;
        if(p<0)
        {
            y=y+10;
            p+=2*(a+b);
        }
        else
            p +=2*a;
        //SetPixel(hdc, x,y,color);
                g.fillRect(x+7, y+7, 8, 8);
    }

    改为每次增加10,因为方块是8个像素大小;则效果如下;

java实现计算机图形学中点画线算法_第3张图片

 

中点画线算法原理可参阅网上,或,

https://blog.csdn.net/qq_41883085/article/details/102730878

你可能感兴趣的:(图形学和3D,Java,java,swing,JFrame,中点画线算法)