zoukankan      html  css  js  c++  java
  • Fractal Tree

    尝试使用递归方式实现一棵简单的分形树,给出初始点的坐标,在此基础上根据坐标轴旋转的规则计算出子树干与根节点的坐标关系,依次递归画出左子树干和右子树干,并提供一个递归的深度用于控制画的子树的数目。

    在二维坐标系中,坐标轴旋转的公式如下:

    In two dimensions, every rotation matrix has the following form,

    This rotates column vectors by means of the following matrix multiplication,

    So the coordinates (x',y') of the point (x,y) after rotation are

    参考资料见维基百科旋转矩阵:http://en.wikipedia.org/wiki/Rotation_matrix

    将这个分形树的实现添加到之前的绘图框架中,只需要增加一个Tree1类,然后再FractalPanel中调用此类的draw方法即可,并且在FractalMain类中添加相关的Button操作。Tree1类的实现如下:

    package com.elvalad;
    
    import java.awt.*;
    
    /**
     * Created by elvalad on 2015/1/4.
     */
    public class Tree1 {
        private double x;
        private double y;
        private double alpha;
        private int depth;
        private Color color = new Color(43, 77, 219);
    
        public Tree1(double x, double y, double alpha, int depth, Color color) {
            this.x = x;
            this.y = y;
            this.alpha = alpha;
            this.depth = depth;
            this.color = color;
        }
    
        public void draw(Graphics g) {
            g.setColor(this.color);
            this.drawShape(g, this.x, this.y, this.alpha, this.depth);
        }
    
        private void drawShape(Graphics g, double x1, double y1, double angle, double depth) {
            if (depth == 0) {
            } else {
                double x2 = x1 + Math.cos(Math.toRadians(angle)) * depth * 15.0;
                double y2 = y1 + Math.sin(Math.toRadians(angle)) * depth * 15.0;
    
                Graphics2D g2d = (Graphics2D) g;
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,     RenderingHints.VALUE_ANTIALIAS_ON);
                g2d.setStroke(new BasicStroke((float) (0.5f * depth)));
                g.drawLine((int)x1, (int)y1, (int)x2, (int)y2);
    
                drawShape(g, x2, y2, angle + 25, depth - 1);
                drawShape(g, x2, y2, angle - 25, depth - 1);
            }
        }
    }

    ------------------------------- 问道,修仙 -------------------------------
  • 相关阅读:
    山东第一届省赛1001 Phone Number(字典树)
    HD2222 Keywords Search(AC自动机入门题)
    POJ 1947Rebuilding Roads(树形DP + 01背包)
    zoj 3946 Highway Project(最短路 + 优先队列)
    HDU5672String(尺标法)
    HDU5671Matrix(矩阵行列交换)
    HDU5670Machine(抽象进制)
    用户体验评价
    团队冲刺第二阶段-6
    第十四周学习进度
  • 原文地址:https://www.cnblogs.com/elvalad/p/4204773.html
Copyright © 2011-2022 走看看