立体图形的绘画

本文介绍了如何在Java中定义Draw3DRect类,它继承自JFrame,展示了如何重写paint方法绘制3D矩形,并通过实例代码实现了一个简单的图形效果。初学者将学习到如何使用Graphics API和二维数组来创建和填充复杂的几何形状。
摘要由CSDN通过智能技术生成

定义一个Draw3DRect类继承父类JFrame类

public class Draw3DRect extends JFrame{
    public static void main(String[] args){
        new Draw3DRect ().initUI ();
    }
    public void initUI(){
        setTitle ("");
        setSize (800,800);
        setDefaultCloseOperation (EXIT_ON_CLOSE);
        setVisible (true);
//        Draw3DListener d3l= new Draw3DListener ();
//        addMouseListener (d3l);
//        d3l.g=this.getGraphics ();
    }

重写paint函数

    @Override
    public void paint(Graphics g){
        super.paint (g);
//        draw(g,100,400,300,300,260,220);
        int[][] arr={
                {0,0,0,0,0,0,0,0,0,0},
                {0,0,0,0,0,0,1,0,0,0},
                {0,0,0,0,0,0,0,0,0,0},
                {0,0,0,0,0,0,0,0,0,0},
                {0,0,0,0,1,0,0,0,0,0},
                {0,0,0,0,0,0,0,0,0,0},
                {0,0,1,0,0,0,1,0,0,0},
                {0,0,0,0,0,0,0,0,0,0},
                {0,0,0,0,0,0,0,0,0,0},
                {0,0,0,0,0,0,0,0,0,0}
        };
        for(int j = 0; j < 10; j++){
            for(int i = 0; i < 10; i++){
                if(arr[i][j]==0){
                    draw(g,100+j*30,700-i*30,30,30,26,22);
                }
            }
        }

    }

定义darw函数

public void draw(Graphics g, int x, int y, int w, int h, int dx, int dy){
        // 计算点
        Point p1 = new Point (x,y);
        Point p2 = new Point (p1.x+w,p1.y);
        Point p3 = new Point (p2.x,p2.y+h);
        Point p4 = new Point (p1.x,p1.y+h);
        Point p5 = new Point (p1.x+dx,p1.y-dy);
        Point p6 = new Point (p5.x+w,p5.y);
        Point p7 = new Point (p6.x,p6.y+h);

        g.setColor (new Color (200,200,0));
        g.fillRect(p1.x,p1.y,w,h);
        g.setColor (new Color (0,0,0));
        g.drawLine (p1.x,p1.y,p5.x,p5.y);
        g.drawLine (p5.x,p5.y,p6.x,p6.y);
        g.drawLine (p2.x,p2.y,p6.x,p6.y);
        g.drawLine (p7.x,p7.y,p6.x,p6.y);
        g.drawLine (p7.x,p7.y,p3.x,p3.y);

        // 填充一个平面 p1 p5 p2 p6
        for(int i = 0; i < dy; i++){
            g.drawLine (p1.x+i*dx/dy,p1.y-i,p2.x+i*dx/dy,p2.y-i);
        }
        g.setColor (new Color (100,100,100));
        // 填充一个平面 p2 p6 p3 p7
        for(int i = 0; i < dy; i++){
            g.drawLine (p2.x+i*dx/dy,p2.y-i,p3.x+i*dx/dy,p3.y-i);
            g.drawLine (p2.x+i*dx/dy+1,p2.y-i,p3.x+i*dx/dy+1,p3.y-i);
        }
    }

效果图

 

初学者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值