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

 更新时间:2017年07月08日 10:27:15   投稿:lqh  
这篇文章主要介绍了Java 中几种分形的方法详解的相关资料,需要的朋友可以参考下

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);
        }
      }
    }
  }

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

相关文章

  • Spring AOP实现原理解析

    Spring AOP实现原理解析

    这篇文章主要为大家详细介绍了Spring AOP的实现原理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Spring Boot打jar包后配置文件的外部优化配置方法

    Spring Boot打jar包后配置文件的外部优化配置方法

    这篇文章主要介绍了Spring Boot打jar包后配置文件的外部优化配置方法,需要的朋友可以参考下
    2018-02-02
  • java实现投票程序设计

    java实现投票程序设计

    这篇文章主要介绍了java实现投票程序设计,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2015-12-12
  • 基于Mybatis-plus实现多租户架构的全过程

    基于Mybatis-plus实现多租户架构的全过程

    多租户是一种软件架构技术,在多用户的环境下,共有同一套系统,并且要注意数据之间的隔离性,下面这篇文章主要给大家介绍了关于基于Mybatis-plus实现多租户架构的相关资料,需要的朋友可以参考下
    2022-02-02
  • Springboot实现人脸识别与WebSocket长连接的实现代码

    Springboot实现人脸识别与WebSocket长连接的实现代码

    这篇文章主要介绍了Springboot实现人脸识别与WebSocket长连接的实现,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-11-11
  • 解析Jmeter脱离Jenkins后Ant集成邮件通知问题

    解析Jmeter脱离Jenkins后Ant集成邮件通知问题

    今天来讲下本地的ant构建并发送邮件。配置下来挺顺利也挺简单的,对Jmeter脱离Jenkins后Ant集成邮件通知问题感兴趣的朋友跟随小编一起看看吧
    2021-12-12
  • SpringBoot 创建容器的实现

    SpringBoot 创建容器的实现

    这篇文章主要介绍了SpringBoot 创建容器的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • SpringCloud Webflux过滤器增加header传递方式

    SpringCloud Webflux过滤器增加header传递方式

    这篇文章主要介绍了SpringCloud Webflux过滤器增加header传递方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Spring详细解读事务管理

    Spring详细解读事务管理

    Spring事务的本质就是对数据库事务的支持,没有数据库事务,Spring是无法提供事务功能的。Spring只提供统一的事务管理接口,具体实现都是由数据库自己实现的,Spring会在事务开始时,根据当前设置的隔离级别,调整数据库的隔离级别,由此保持一致
    2022-04-04
  • AQS同步组件Semaphore信号量案例剖析

    AQS同步组件Semaphore信号量案例剖析

    这篇文章主要为大家介绍了AQS同步组件Semaphore信号量案例剖析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08

最新评论