Java 中分形图的几种方法详解

所属分类: 软件编程 / java 阅读数: 17
收藏 0 赞 0 分享

Java分形

Java的分形主要有一下几种:

1.类似Clifford的分形。这种分形的特点是:分形的初始坐标为(0,0),通过初始坐标经过大量的迭代,得到一系列的点,根据得到的点来绘制分形曲线。这类分形的参数有限,可以很简单的实现。

2.类似IFS fern这样的分形。这种分形比上一种分形具有更多的参数,值得注意的是IFS fern分形的参数列表中有一项P值,该值表示的是各组不同的参数应该出现的概率,如果这个值没用上是无法得到想要的图形的。

3.类似Mandelbrot这样的分形。这种分形涉及到了复数的知识,以及时间逃逸算法。本质上是复平面上一系列点的集合,用时间逃逸算法来确定点是否在集合内,得到一系列的点,根据这些点来绘制图形。

4.类似L-System Sticks这样的分形。这类的分形需要定义母串,以及演变的规则,通过不同的母串和演变规则的到的点来绘制图形。演变规则和母串等的理解并不难,主要是涉及了坐标之间的变换较为难以计算。

下面是一段关于Mandelbrot分形的代码。

/**
 * 复数类
 * @author CBS
 */
public class Complex {
  
  public double r;
  public double i;
  
  public Complex(double real,double image){
    this.r=real;
    this.i=image;
  }
  //取复数的模
  public double modulus(){
    return Math.sqrt(r*r+i*i);
  }
  //复数的加法
  public Complex add(Complex z){
    double addr=r+z.r;
    double addi=i+z.i;
    return new Complex(addr,addi);
  }
  //复数的乘法
  public Complex mul(Complex z){
    double mulr=r*z.r-i*z.i;
    double muli=i*z.r+r*z.i;
    return new Complex(mulr,muli);
  }
}
// 求最大的迭代次数的算法,时间逃逸算法
  public int mand(Complex z, int maxIte) {
    Complex curComp = new Complex(0, 0);
    for (int i = 0; i < maxIte; i++) {
      if (curComp.modulus() > 2)
        return i;
      curComp = curComp.mul(curComp).add(z);
    }
    return maxIte;
  }

// 画图的算法
  public void drawMand(Complex z, double scale, int MaxIte) {
    double pixUnit = 3 / (1080 * scale);
    double startx = z.r - 1080 * pixUnit / 2;
    double starty = z.i - 720 * pixUnit / 2;

    for (int i = 0; i < 1080; i++) {
      for (int j = 0; j < 720; j++) {
        double x0 = startx + i * pixUnit;
        double y0 = starty + j * pixUnit;
        Complex curComplex = new Complex(x0, y0);
        int time = mand(curComplex, MaxIte);
        if (time == MaxIte) {
          double x = x0 * 150 + 500;// 扩大出现方格
          double y = y0 * 150 + 500;
          g.drawLine((int) x, (int) y, (int) x, (int) y);
        }
      }
    }
  }

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

更多精彩内容其他人还在看

Java数据类型的规则

这篇文章主要介绍了Java数据类型的规则的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Spring整合TimerTask实现定时任务调度

这篇文章主要介绍了Spring整合TimerTask实现定时任务调度的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

详解SpringMVC使用MultipartFile实现文件的上传

本篇文章主要介绍了SpringMVC使用MultipartFile实现文件的上传,本地的文件上传到资源服务器上,比较好的办法就是通过ftp上传。这里是结合SpringMVC+ftp的形式上传的,有兴趣的可以了解一下。
收藏 0 赞 0 分享

SpringMVC上传文件的三种实现方式

本篇文章主要介绍了SpringMVC上传文件的三种实现方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

微信公众帐号开发-自定义菜单的创建及菜单事件响应的实例

本篇文章主要介绍了微信公众帐号开发-自定义菜单的创建及菜单事件响应的实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
收藏 0 赞 0 分享

浅析Java中的继承与组合

本文将介绍组合和继承的概念及区别,并从多方面分析在写代码时如何进行选择。文中通过示例代码介绍的很详细,有需要的朋友可以参考借鉴,下面来一起看看吧。
收藏 0 赞 0 分享

利用反射获取Java类中的静态变量名及变量值的简单实例

下面小编就为大家带来一篇利用反射获取Java类中的静态变量名及变量值的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

java启动线程的3种方式对比分析

这篇文章主要为大家对比分析了java启动线程的3种方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

SpringMVC上传和解析Excel方法

这篇文章主要介绍了SpringMVC上传和解析Excel方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

JAVA中String类与StringBuffer类的区别

这篇文章主要为大家详细介绍了JAVA中String类与StringBuffer类的区别,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享
查看更多