返回顶部
首页 > 资讯 > 精选 >Java分形怎么绘制山脉模型
  • 566
分享到

Java分形怎么绘制山脉模型

2023-06-26 04:06:53 566人浏览 独家记忆
摘要

这篇文章主要为大家分析了Java分形怎么绘制山脉模型的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“Java分形怎么绘制山脉模型”的知识吧。如何绘制一个山脉构

这篇文章主要为大家分析了Java分形怎么绘制山脉模型的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“Java分形怎么绘制山脉模型”的知识吧。

如何绘制一个山脉

构思设计

任意选取三个点,选取一个范围和一个比率,每一个都对这三个点取中点,中点的纵坐标加一个在范围内的随机值,当完成一次递归之后缩小这个范围即range*rate
连线的时候,将三角形的一个点和这个点的两条边生成的中点相连,最后将三条边的中点相连
所以应该有四个递归调用。

Java分形怎么绘制山脉模型

代码实现及注解

package Mountion;import java.awt.Graphics;import java.util.ArrayList;import java.util.List;import java.util.Random;import javax.swing.JFrame;public class ShowUI {    List<Shape> list=new ArrayList<>();    int i=0;    public void divide(int x1,int x2,int x3,int y1,int y2,int y3,int range,double rate,int times,Graphics g,Shape p){        if(times==0){            //画线,构成一个三角形            g.drawLine(x1, y1, x2, y2);            g.drawLine(x3, y3, x2, y2);            g.drawLine(x1, y1, x3, y3);            return ;        }        else{            times--;            Random rand=new Random();            //注意数据需要初始化            int x4=0,x5=0,x6=0,y4=0,y5=0,y6=0;            int flag1=0,flag2=0,flag3=0;            //遍历这个表            for(Shape s : list) {                //相等的两种状况                if((s.pX1()==x1&&s.pX2()==x2&&s.pY1()==y1&&s.pY2()==y2)||(s.pX1()==x2&&s.pX2()==x1&&s.pY1()==y2&&s.pY2()==y1)){                    if(s.show(g)==1){                        //如果这个边已经被使用过了,那么此时说明中点已经生成,只需要读出来中点即可                        x4=s.pX3();                        y4=s.pY3();                        //System.out.println(times+":same:==================size:"+(i++));                    }                    else{                        //如果这条边存在但没有使用,那么生成这个中点,进行更新,其实就是将原来的shape删除掉,加入一个新的。                        x4=(x1+x2)/2;                        y4=(y1+y2)/2+rand.nextInt(range*2)-range;                        //System.out.println(times+":1");                        list.remove(s);                        p =new Shape(x1,x2,x4,y1,y2,y4,1);                        list.add(p);                    }                    flag1=1;                    break;                }                                                            }            if(flag1==0){                //System.out.println(times+":before:==================size:"+(i++));                //如果不存在,这个很简单,只需要构造一个就好了                x4=(x1+x2)/2;                y4=(y1+y2)/2+rand.nextInt(range*2)-range;                p =new Shape(x1,x2,x4,y1,y2,y4,1);                list.add(p);            }            //后面两种情况类似            for(Shape s : list) {                if((s.pX1()==x1&&s.pX2()==x3&&s.pY1()==y1&&s.pY2()==y3)||(s.pX1()==x3&&s.pX2()==x1&&s.pY1()==y3&&s.pY2()==y1)){                    if(s.show(g)==1){                        x5=s.pX3();                        y5=s.pY3();                    }                    else{                        x5=(x1+x3)/2;                        y5=(y1+y3)/2+rand.nextInt(range*2)-range;                        list.remove(s);                        p =new Shape(x1,x3,x5,y1,y3,y5,1);                        list.add(p);                    }                    flag2=1;                    break;                }            }            if(flag2==0){                x5=(x1+x3)/2;                y5=(y1+y3)/2+rand.nextInt(range*2)-range;                //System.out.println(times+":before1:==================size:"+(i++));                p =new Shape(x1,x2,x4,y1,y2,y4,1);                list.add(p);            }            for(Shape s : list){                if((s.pX1()==x2&&s.pX2()==x3&&s.pY1()==y2&&s.pY2()==y3)||(s.pX1()==x3&&s.pX2()==x2&&s.pY1()==y3&&s.pY2()==y2)){                    if(s.show(g)==1){                        x6=s.pX3();                        y6=s.pY3();                    }                    else{                        x6=(x2+x3)/2;                        y6=(y2+y3)/2+rand.nextInt(range*2)-range;                        list.remove(s);                        p =new Shape(x2,x3,x6,y2,y3,y6,1);                        list.add(p);                    }                    flag3=1;                    break;                }            }            if(flag3==0){                x6=(x2+x3)/2;                y6=(y2+y3)/2+rand.nextInt(range*2)-range;                //System.out.println(times+":before2:==================size:"+(i++));                p =new Shape(x1,x2,x4,y1,y2,y4,1);                list.add(p);            }            //逐渐缩小范围            range=(int)(range*rate);            //将边添加进行,类似一个初始话,标记位为0            p =new Shape(x1,x4,y1,y4,0);            list.add(p);            p =new Shape(x1,x5,y1,y5,0);            list.add(p);            p =new Shape(x4,x5,y4,y5,0);            list.add(p);            p =new Shape(x2,x4,y2,y4,0);            list.add(p);            p =new Shape(x2,x6,y2,y6,0);            list.add(p);            p =new Shape(x4,x6,y4,y6,0);            list.add(p);            p =new Shape(x3,x5,y3,y5,0);            list.add(p);            p =new Shape(x3,x6,y3,y6,0);            list.add(p);            p =new Shape(x5,x6,y5,y6,0);            list.add(p);            //画四个三角形            divide(x1,x4,x5,y1,y4,y5,range,rate,times,g,p);            divide(x2,x4,x6,y2,y4,y6,range,rate,times,g,p);                        divide(x3,x5,x6,y3,y5,y6,range,rate,times,g,p);            divide(x4,x5,x6,y4,y5,y6,range,rate,times,g,p);        }    }    public static void main(String[] args) {        // TODO Auto-generated method stub        JFrame moun=new JFrame();        moun.setSize(1000, 600);        moun.setLocationRelativeTo(null);        moun.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        moun.setVisible(true);        Graphics g=moun.getGraphics();//获取窗体        int x1=500,x2=100,x3=850;        int y1=100,y2=400,y3=400;        int range=200;        double rate=0.5;        int times=7;        ShowUI a=new ShowUI();        try {            Thread.sleep(566);        } catch (InterruptedException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        Shape p = null;        //System.out.println(100);        a.divide(x1, x2, x3, y1, y2, y3, range, rate,times,g,p);    }}

Shape类

package Mountion;import java.awt.Graphics;public class Shape {    private int x1,x2,x3,y1,y2,y3;    private int flag;    //这个构造函数存储的是一个边的两个点,以及这个边生成的中点    public Shape(int x1,int x2,int x3,int y1,int y2,int y3,int flag){        this.x1=x1;        this.x2=x2;        this.x3=x3;        this.y1=y1;        this.y2=y2;        this.y3=y3;        this.flag=flag;    }//这个构造函数存储的一条边的两个点    public Shape(int x1,int x2,int y1,int y2,int flag){        this.x1=x1;        this.x2=x2;        this.y1=y1;        this.y2=y2;        this.flag=flag;    }    //flag标记位,这条边是否被使用过    public int show(Graphics g) {        // TODO Auto-generated method stub        return flag;    }    public int pX1(){        return x1;    }    public int pX2(){        return x2;    }    public int pX3(){        return x3;    }    public int pY1(){        return y1;    }    public int pY2(){        return y2;    }    public int pY3(){        return y3;    }}

效果展示

Java分形怎么绘制山脉模型

Java分形怎么绘制山脉模型

这篇文章主要为大家分析了Java分形怎么绘制山脉模型的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“Java分形怎么绘制山脉模型”的知识吧。

--结束END--

本文标题: Java分形怎么绘制山脉模型

本文链接: https://lsjlt.com/news/306799.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java分形绘制山脉模型
    本文实例为大家分享了Java分形绘制山脉模型的具体代码,供大家参考,具体内容如下 如何绘制一个山脉 构思设计 任意选取三个点,选取一个范围和一个比率,每一个都对这三个点取中点,中点的...
    99+
    2024-04-02
  • Java分形怎么绘制山脉模型
    这篇文章主要为大家分析了Java分形怎么绘制山脉模型的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“Java分形怎么绘制山脉模型”的知识吧。如何绘制一个山脉构...
    99+
    2023-06-26
  • java实现三角形分形山脉
    本文实例为大家分享了java实现三角形分形山脉的具体代码,供大家参考,具体内容如下 三角形分形山脉原理 原型图 如图,这是三角形分形山脉的一个原型图。首先我们让x1、x2、x3三个...
    99+
    2024-04-02
  • java实现直线分形山脉
    本文实例为大家分享了java实现直线分形山脉的具体代码,供大家参考,具体内容如下 直线分形 直线分形平面山脉 想要实现这个效果的思想就是,由x1、x2所确定的一条直线,我们取它们的中...
    99+
    2024-04-02
  • java实现平面山脉模型
    本文实例为大家分享了java实现平面山脉模型的具体代码,供大家参考,具体内容如下 核心方法:递归 其实当我第一次看到这个题目时,心中想的不就是个普通的递归吗,直接取两个点,然后不断取...
    99+
    2024-04-02
  • Java递归方法实现山脉绘制
    本文实例为大家分享了Java递归方法实现山脉绘制的具体代码,供大家参考,具体内容如下 一、山脉绘制的思路 给定两个点A(x1,y1),B(x2,y2),递归不断取中点,同时给定一个范...
    99+
    2024-04-02
  • java如何实现平面山脉模型
    这篇文章将为大家详细讲解有关java如何实现平面山脉模型,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。核心方法:递归其实当我第一次看到这个题目时,心中想的不就是个普通的递归吗,直接取两个点,...
    99+
    2023-06-26
  • java怎么绘制图形
    Java中可以使用AWT和Swing库来绘制图形。1. 使用AWT库绘制图形:- 创建一个继承自`java.awt.Canvas`的...
    99+
    2023-10-07
    java
  • java怎么绘制简单图形
    Java中绘制基本图形,可以使用Java类库中的Graphics类,此类位于java.awt包中。在我们自己的java程序文件中,要使用Graphics类就需要使用import java.awt.Graphics语句将Graphics类导入...
    99+
    2021-09-18
    java 绘制 简单图形
  • 怎么使用python绘制火山图
    这篇文章主要讲解了“怎么使用python绘制火山图”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用python绘制火山图”吧!导入模块import numpy as...
    99+
    2023-07-02
  • CSS怎么绘制图形
    这篇文章主要介绍了CSS怎么绘制图形的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇CSS怎么绘制图形文章都会有所收获,下面我们一起来看看吧。正方形/长方形<!DOCTYPE html>&l...
    99+
    2023-06-27
  • CSS怎么绘制心形
    这篇文章主要介绍“CSS怎么绘制心形”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“CSS怎么绘制心形”文章能帮助大家解决问题。具体代码:<!DOCTYPE html><h...
    99+
    2023-06-27
  • 使用python怎么绘制一个火山图
    今天就跟大家聊聊有关使用python怎么绘制一个火山图,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整...
    99+
    2023-06-14
  • 怎么用Canvas绘制图形
    这篇文章主要讲解了“怎么用Canvas绘制图形”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Canvas绘制图形”吧!   Canvas绘制图形 ...
    99+
    2024-04-02
  • HTML5中怎么绘制图形
    本篇内容主要讲解“HTML5中怎么绘制图形”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HTML5中怎么绘制图形”吧! HTML5中...
    99+
    2024-04-02
  • CSS怎么绘制三角形
    本篇文章给大家分享的是有关CSS怎么绘制三角形,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1、绘制方法画出三角形的原理是调整border(边框)的四个方向的宽度,线条样式以及...
    99+
    2023-06-15
  • python怎么绘制正方形
    你可以使用Python的turtle模块来绘制正方形。下面是一个简单的示例代码:```pythonimport turtle# 创建...
    99+
    2023-08-20
    python
  • 怎么用CSS绘制三角形
    本篇内容介绍了“怎么用CSS绘制三角形”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!使用 border 绘...
    99+
    2024-04-02
  • Python pyecharts怎么绘制条形图
    这篇文章主要介绍了Python pyecharts怎么绘制条形图的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python pyecharts怎么绘制条形图文章都会有所收获,下面我们一起来看...
    99+
    2023-06-29
  • PixiJS怎么绘制常见图形
    这篇文章主要介绍“PixiJS怎么绘制常见图形”,在日常操作中,相信很多人在PixiJS怎么绘制常见图形问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PixiJS怎么绘制常见图形”的疑惑有所帮助!接下来,请跟...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作