亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Java Chaos Game噪聲游戲實例代碼

2024-07-13 10:15:08
字體:
來源:轉載
供稿:網友

[簡介]

最近一直在讀《深奧的簡潔》,里面有一章介紹了幾種使用噪聲產生分形圖的方法,感覺很有意思,于是嘗試使用計算機模擬了一下,效果還不錯(噪聲法比傳統迭代法在編程上好實現一些,后來發現這類算法還不少,搜索chaosgame可以找到更多)。

[Sierpinski三角形的噪聲產生法]

chaos,game,java,噪聲游戲

在這些噪聲游戲中,Sierpinski(謝爾賓斯基)三角形的生成規則可謂是最簡單的:

1.在平面上選取三個點,標記為1、2、3,作為大三角形的頂點。

2.選擇其中一點,作為“當前點”(比如選擇1號)。

3.產生1~3的隨機數,在該數表達的頂點與“當前點”的中點繪制一個新點,并將新點作為“當前點”。

4.重復步驟3,即可逼近圖案。

*.注意隨機數最好不要使用以時間作為種子的產生方式。

[模擬程序]

package com.geiv.chaos;import java.awt.event.KeyEvent;import com.thrblock.util.RandomSet;import geivcore.DefaultFactor;import geivcore.KeyFactor;import geivcore.KeyListener;import geivcore.R;import geivcore.UESI;import geivcore.enginedata.obj.Obj;public class Sierpinski extends DefaultFactor implements KeyListener{	UESI UES;	Obj[] basePoint;	Obj crtPoint;	public Sierpinski(UESI UES,int times){		this.UES = UES;		basePoint = new Obj[3];		//創建三個基準點 		for (int i = 0;i < 3;i++){			basePoint[i] = UES.creatObj(UESI.BGIndex);			basePoint[i].addGLPoint("70DBDB",0,0);			basePoint[i].show();		}		basePoint[0].setCentralX(400);		//設置三點位置 		basePoint[0].setCentralY(60);		basePoint[1].setCentralX(60);		basePoint[1].setCentralY(550);		basePoint[2].setCentralX(740);		basePoint[2].setCentralY(550);		crtPoint = basePoint[0];		//將0號點作為當前點 		this.setKeyListener(this);		UES.pushKeyBoardIO(this);		for (int i = 0;i < times;i++){			generateNew();		}	}	@Override 	  public void doKeyBord(KeyFactor whom, int keyCode, Boolean ispressed) {		//掛載回調 		if(ispressed){			if(keyCode == KeyEvent.VK_SPACE){				//空格對應創建一個新點 				generateNew();			} else if(keyCode == KeyEvent.VK_A){				//A對應創建100個新點 				for (int i = 0;i < 100;i++){					generateNew();				}			} else if(keyCode == KeyEvent.VK_B){				//B對應創建1000個新點 				for (int i = 0;i < 1000;i++){					generateNew();				}			}		}	}	public void generateNew(){		Obj flagPoint = basePoint[RandomSet.getRandomNum(0, 2)];		//隨機選擇基準點之一 		float nx = (flagPoint.getCentralX() + crtPoint.getCentralX())/2f;		//計算中點 		float ny = (flagPoint.getCentralY() + crtPoint.getCentralY())/2f;		Obj newPoint = UES.creatObj(UESI.BGIndex);		//創建新點 		newPoint.addGLPoint("70DBDB",0,0);		newPoint.setColor(RandomSet.getRandomColdColor());		newPoint.setCentralX(nx);		//設置坐標 		newPoint.setCentralY(ny);		newPoint.show();		crtPoint = newPoint;		//置為當前點	}	public static void main(String[] args) {		UESI ues = new R();		new Sierpinski(ues,0);		//后面的構造參數可以設置初始點數。	}}

[模擬結果]

在B鍵按下時

chaos,game,java,噪聲游戲

chaos,game,java,噪聲游戲

chaos,game,java,噪聲游戲

[Barnsleyfern的噪聲產生法]

chaos,game,java,噪聲游戲

相比于Sierpinski三角的簡單規則性,Barnsleyfern(分形羊齒草)給人以更加復雜的印象,出于它的復雜性,混沌學科經常拿出它來證明“簡單規則也可產生復雜對象”的結論。

它的產生規則也不是很復雜:

1.首先給定”當前點”(0,0),我們用ox,oy表示橫縱坐標。

2.計算下一點(nx,ny)需要以一定隨機規則選擇下列四種迭代公式之一:

1)以%1的概率選擇此迭代公式:

nx=0;

ny=0.16f*oy;

2)以%85的概率選擇此迭代公式:

nx=0.85*ox+0.04*oy;

ny=-0.04*ox+0.85*oy+1.6;

3)以%7的概率選擇此迭代公式:

nx=0.2*ox-0.26*oy;

ny=0.23*ox+0.22*oy+1.6;

4)以%7的概率選擇此迭代公式:

nx=-0.15*ox+0.28*oy;

ny=0.26*ox+0.24*oy+0.44;

3.繪制(nx,ny),并將其設為當前點,重復2,即可無限逼近結果。

↑以上公式摘自Wiki:http://en.wikipedia.org/wiki/Barnsley_fern。在編程時,我發現一個問題,Wiki并未指明這個坐標的決對值與屏幕大小的關系,也并未說明x、y軸的方向,在我自己定義的坐標系下繪制總是不成功,后來我按照公式搜索,找到了這個面:http://people.sc.fsu.edu/~jburkardt/cpp_src/fern_opengl/fern.cpp。這是一個C++下的OPENGL程序,而里面用了與Wiki相同的公式,也就是說,這組公式是以Opengl的坐標系為基準的,在做了對應變換后終于成功繪制。

[模擬程序]

package com.geiv.chaos;import geivcore.DefaultFactor;import geivcore.KeyFactor;import geivcore.KeyListener;import geivcore.R;import geivcore.UESI;import geivcore.enginedata.obj.Obj;import java.awt.Color;import java.awt.event.KeyEvent;import com.thrblock.util.RandomSet;public class Barnsleyfern extends DefaultFactor implements KeyListener{	UESI UES;	Obj crtPoint;	public Barnsleyfern(UESI UES,int times){		this.UES = UES;		crtPoint = UES.creatObj(UESI.BGIndex);		crtPoint.addGLPoint("70DBDB",0,0);		crtPoint.show();		crtPoint.setCentralX(0);		crtPoint.setCentralY(0);		UES.setViewOffsetX(90);		this.setKeyListener(this);		UES.pushKeyBoardIO(this);		for (int i = 0;i < times;i++){			generateNew();		}	}	@Override 	  public void doKeyBord(KeyFactor whom, int keyCode, Boolean ispressed) {		//鍵盤IO的方式同上例 		if(ispressed){			if(keyCode == KeyEvent.VK_SPACE){				generateNew();			} else if(keyCode == KeyEvent.VK_A){				for (int i = 0;i < 100;i++){					generateNew();				}			} else if(keyCode == KeyEvent.VK_B){				for (int i = 0;i < 1000;i++){					generateNew();				}			}		}	}	public void generateNew(){		float nx,ny;		float ox = crtPoint.getCentralX()/150f,oy = (600 - crtPoint.getCentralY())/60f;		//這里做了OPENGL坐標轉換,在設置新點位置時對應反轉。 		double code = 100.0 * RandomSet.getRandomFloatIn_1();		//隨機浮點數數0~100 		if(code >= 0&&code <= 1){			nx = 0;			ny = 0.00f * ox + 0.16f * oy;		} else if(code > 1&& code <= 86){			nx = 0.85f*ox + 0.04f*oy;			ny = -0.04f*ox + 0.85f*oy + 1.6f;		} else if(code > 86&& code <= 93){			nx = 0.2f*ox - 0.26f*oy;			ny = 0.23f*ox + 0.22f*oy + 1.6f;		} else{			nx = -0.15f*ox + 0.28f*oy;			ny = 0.26f*ox + 0.24f*oy + 0.44f;		}		Obj newPoint = UES.creatObj(UESI.BGIndex);		newPoint.addGLPoint("70DBDB",0,0);		newPoint.setColor(Color.GREEN);		newPoint.setCentralX(nx*150f);		//將之前的坐標變換抵消 		newPoint.setCentralY(600 - ny*60f);		newPoint.show();		crtPoint = newPoint;		//設置新點為當前點。	}	public static void main(String[] args) {		UESI ues = new R();		new Barnsleyfern(ues,0);	}}

[模擬結果]

chaos,game,java,噪聲游戲

chaos,game,java,噪聲游戲

chaos,game,java,噪聲游戲

總結

以上就是本文關于Java Chaos Game噪聲游戲實例代碼的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产在线视频欧美| 欧美一区二区色| 精品久久久久久中文字幕| 国产亚洲精品久久久久久| 午夜精品久久久99热福利| 狠狠久久亚洲欧美专区| 亚洲视频网站在线观看| 一本色道久久综合狠狠躁篇怎么玩| 中文字幕成人在线| 91久久精品美女高潮| 成人国产精品一区二区| 国产精品久久久久久久久久小说| 欧美成人午夜免费视在线看片| 亚洲欧美变态国产另类| 国产在线视频一区| 日韩中文在线中文网在线观看| 亚洲伊人一本大道中文字幕| 亚洲激情视频网站| 国产激情久久久久| 日韩电影中文字幕av| 国产视频亚洲精品| 91香蕉国产在线观看| 久久久噜噜噜久噜久久| 亚洲男人的天堂网站| 国产亚洲激情在线| 欧美激情视频在线免费观看 欧美视频免费一| 久久精品夜夜夜夜夜久久| 久久成人一区二区| 亚洲天堂免费观看| 日韩视频精品在线| 成人亚洲欧美一区二区三区| 在线观看日韩视频| 45www国产精品网站| 欧美一区二区大胆人体摄影专业网站| 久久久久国产精品免费网站| 欧美又大粗又爽又黄大片视频| 欧美日韩在线另类| 国产最新精品视频| 久久久久久久999| 日本精品久久电影| 成人免费看吃奶视频网站| 欧美在线视频一区二区| 伊人激情综合网| 欧美专区在线播放| 97av在线播放| 欧美大片欧美激情性色a∨久久| 日韩高清欧美高清| 久久久久久久久久久免费| 中文字幕久久精品| 欧美性69xxxx肥| 欧美亚洲第一页| 色七七影院综合| 欧美国产日韩在线| 国产精品亚洲网站| 国产精品视频久久久久| 欧洲成人免费视频| 精品人伦一区二区三区蜜桃免费| 欧美成在线视频| 欧美与欧洲交xxxx免费观看| 亚洲老头同性xxxxx| 欧美成人精品三级在线观看| 亚洲欧美日韩区| 欧美视频专区一二在线观看| 中文字幕久久久av一区| 日韩欧美在线免费| 国产精品白丝jk喷水视频一区| 欧洲中文字幕国产精品| 亚洲综合成人婷婷小说| 精品一区二区三区三区| 日韩一区二区在线视频| 色妞在线综合亚洲欧美| 欧美日韩午夜视频在线观看| 欧美性生交xxxxx久久久| 久久久精品久久久久| 日本久久中文字幕| 国外视频精品毛片| 亚洲天堂av电影| 国产精品视频一区二区三区四| 欧美超级乱淫片喷水| 这里只有精品在线播放| 2019中文字幕在线观看| 亚洲精品自在久久| 一区二区三区精品99久久| 午夜精品免费视频| 国产精品久在线观看| 成人午夜在线观看| 78m国产成人精品视频| 久久久久久久久久av| 亚洲福利在线观看| 国产视频精品xxxx| 久久深夜福利免费观看| 最新亚洲国产精品| 亚洲精美色品网站| 精品欧美一区二区三区| 日韩av在线不卡| 日本精品性网站在线观看| 欧美性xxxxxxxxx| 精品久久久久久久久久久久久久| 久久影院资源网| 亚洲国产美女精品久久久久∴| 亚洲xxxx3d| 色一区av在线| 亚洲成人精品久久| 欧美在线www| 538国产精品视频一区二区| 亚洲欧美综合图区| 国产欧美日韩中文字幕| 国产精品一二三在线| 国产亚洲欧洲黄色| 国产精品高潮粉嫩av| 欧美日韩国产成人在线观看| 久久伊人精品天天| 亚洲国产又黄又爽女人高潮的| 久久不射电影网| 亚洲欧洲第一视频| 国产精品网站入口| 亚洲精品视频免费在线观看| 午夜精品免费视频| 日韩在线精品一区| 91久热免费在线视频| 亚洲资源在线看| 亚洲高清福利视频| 国产精品扒开腿做爽爽爽视频| 中文字幕日韩av| 久久久久久伊人| 欧美激情精品久久久久久变态| 欧美成人午夜视频| 久久影院在线观看| 欧美一区二区三区精品电影| 国产精品免费久久久久影院| 色综合天天狠天天透天天伊人| 91精品国产高清自在线| 色哟哟入口国产精品| 久久精品99久久久久久久久| 国产在线精品成人一区二区三区| 精品视频在线播放色网色视频| 国产91九色视频| 色在人av网站天堂精品| 亚洲精品mp4| 日日摸夜夜添一区| 欧美激情一二三| 亚洲日本成人网| 热re91久久精品国99热蜜臀| www.日韩欧美| 中文字幕久久亚洲| 国产午夜精品美女视频明星a级| 国产精品视频一区国模私拍| 一本久久综合亚洲鲁鲁| 欧美日韩在线视频观看| 成人亚洲激情网| 国产精品久久久久久久电影| 久久在线视频在线| 成人网在线观看| 日韩中文字幕在线免费观看| 国产精品毛片a∨一区二区三区|国| 日韩av影视综合网| 性欧美办公室18xxxxhd| 亚洲免费视频网站| 自拍偷拍亚洲区| 精品国内产的精品视频在线观看| 久久久久成人网| 国产精品偷伦免费视频观看的| 欧美日韩国产成人在线| 欧美亚洲在线播放|