zoukankan      html  css  js  c++  java
  • 生成内部三角形

    import java.awt.Color;
    import java.awt.Component;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Point;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.util.LinkedList;
    import java.util.List;
    
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    /**
     * 三角形
     * @author tiger
     * 每点击一次屏幕,生成现有三角形的内部三角形,重画屏幕
     */
    public class Triangle {
    
    	Point p1 , p2, p3;
    	boolean isCenterT = false;
    	
    	public Triangle(Point p1, Point p2, Point p3) {
    		this.p1 = p1;
    		this.p2 = p2;
    		this.p3 = p3;
    	}
    	
    	public Triangle(Point p1, Point p2, Point p3, boolean isCenterT) {
    		this.p1 = p1;
    		this.p2 = p2;
    		this.p3 = p3;
    		this.isCenterT = isCenterT;
    	}
    	
    	@SuppressWarnings("unchecked")
    	public void createInner(List list)
    	{
    		Point m1 = this.getMiddle(p1, p2);
    		Point m2 = this.getMiddle(p1, p3);
    		Point m3 = this.getMiddle(p2, p3);
    		list.add(new Triangle(m1, m2, m3, true));
    		list.add(new Triangle(p1, m1, m2));
    		list.add(new Triangle(p2, m1, m3));
    		list.add(new Triangle(p3, m2, m3));
    	}
    	
    	private Point getMiddle(Point p1, Point p2)
    	{
    		return new Point((p1.x + p2.x) / 2, (p1.y + p2.y) / 2);
    	}
    	
    	public void draw(Graphics g)
    	{
    		g.drawLine(p1.x, p1.y, p2.x, p2.y);
    		g.drawLine(p1.x, p1.y, p3.x, p3.y);
    		g.drawLine(p2.x, p2.y, p3.x, p3.y);
    	}
    	
    	@SuppressWarnings("unchecked")
    	static List list = new LinkedList();
    	
    	public static void main(String[] args) {
    		
    		int width = 400;
    		int height = 400;
    		
    		//也可以在按键事件中再添加初始图像(最好是随机图形)
    		Point p1 = new Point(width / 2, 20);
    		Point p2 = new Point(20, height - 20);
    		Point p3 = new Point(width - 20, height - 20);
    		list.add(new Triangle(p1, p2, p3));
    		
    		JFrame frame = new JFrame("triangle");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		JPanel panel = new JPanel()
    		{
    			@Override
    			protected void paintComponent(Graphics g) {
    				super.paintComponent(g);
    				g.setColor(Color.black);
    				for (int i = 0; i < list.size(); i++) {
    					Triangle t = (Triangle)list.get(i);
    					t.draw(g);
    				}
    			}
    		};
    		
    		panel.addMouseListener(new MouseAdapter()
    		{
    			@SuppressWarnings("unchecked")
    			@Override
    			public void mouseClicked(MouseEvent e) {
    				List list2 = new LinkedList();
    				for (int i = 0; i < list.size(); i++) {
    					Triangle t = (Triangle)list.get(i);
    					if(t.isCenterT)continue;
    					t.createInner(list2);
    				}
    				list.clear();
    				list = list2;
    				Component c = e.getComponent();
    				c.repaint();
    			}
    		});
    		panel.setFocusable(true);
    		panel.setPreferredSize(new Dimension(width,height));
    		frame.getContentPane().add(panel);
    		frame.pack();
    		
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
    	}
    	
    }
    
  • 相关阅读:
    Luogu P1020 导弹拦截
    洛谷 p1196 带权并查集
    gradle 语法基础
    Codeforces Round #542 div.2 C
    我了解的字符编码
    洛谷p3374 树状数组1
    树状数组2
    线段树模板 求区间和, 区间加法,乘法更新
    洛谷 p1886 滑动窗口
    HDOJ.1251
  • 原文地址:https://www.cnblogs.com/chaohi/p/2064098.html
Copyright © 2011-2022 走看看