這是Java畫(huà)板開(kāi)發(fā)的最后階段,本章節(jié)主要講解分形的繪制。
我們提供的服務(wù)有:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、嫩江ssl等。為上千余家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢(xún)和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的嫩江網(wǎng)站制作公司一、分形? 1、簡(jiǎn)述
? 分形看似毫無(wú)任何規(guī)律,但其實(shí)暗藏一定的關(guān)系,大部分的分形可以通過(guò)某種數(shù)學(xué)關(guān)系的運(yùn)算,再通過(guò)程序遞歸調(diào)用,從而可以繪制出許多圖形。其中最常見(jiàn)的圖形就是初中學(xué)習(xí)勾股定理后繪制的勾股樹(shù)。
二、分形繪制? 明確思路后可以自己動(dòng)手操作,體驗(yàn)分形的繪制
1、分形樹(shù)
????????? 首先繪制分形樹(shù),先來(lái)看圖形。
??????一般來(lái)說(shuō),分形繪制我們可以使用已經(jīng)提供的函數(shù)并通過(guò)程序遞歸調(diào)用,首先是函數(shù):
?????????????????????????????????????????????????????xn+1?= a xn?+ b yn?+ e
?????? ?yn+1?= c xn?+ d yn?+ f
上述函數(shù)即繪制該分形所需的函數(shù),接下來(lái)是參數(shù)。上述圖形的參數(shù)一共有5組,每組有6個(gè)參數(shù),這些參數(shù)構(gòu)成一個(gè)二維矩陣。在繪制過(guò)程中,需要隨機(jī)選出一組參數(shù)進(jìn)行計(jì)算,一下是圖形繪制的參數(shù):
set 1 set 2 set 3 set 4 set 5 a 0.1950 0.4620 -0.6370 -0.0350 -0.0580 b -0.4880 0.4140 0.0000 0.0700 -0.0700 c 0.3440 -0.2520 0.0000 -0.4690 0.4530 d 0.4430 0.3610 0.5010 0.0220 -0.1110 e 0.4431 0.2511 0.8562 0.4884 0.5976 f 0.2452 0.5692 0.2512 0.5069 0.0969
? 接下來(lái)是在程序中的實(shí)現(xiàn)過(guò)程。簡(jiǎn)單來(lái)說(shuō)就是在鼠標(biāo)點(diǎn)擊畫(huà)板空白處的時(shí)候繪制圖形。
首先創(chuàng)建列表用于保存參數(shù)。
public static final double [] a = {.195 , .462 , -.637 , -.035 , -.058};
public static final double [] b = {-.488 , .414 , 0 , .07 , -.07};
public static final double [] c = {.344 , -.252 , 0 , -.469 , .453};
public static final double [] d = {.443 , .361 , .501 , .022 , -.111};
public static final double [] e = {.4431 , .2511 , .8562 , .4884 , .5976};
public static final double [] f = {.2452 , .5692 , .2512 , .5069 , .0969};
接著創(chuàng)建分形繪制的函數(shù),思路如下:
? 首先隨機(jī)選擇一組參數(shù),這里將會(huì)用到隨機(jī)數(shù),將對(duì)應(yīng)的參數(shù)取出
Random r = new Random();
int R1 = r.nextInt(5);
double A = a[R1];
double B = b[R1];
double C = c[R1];
double D = d[R1];
double E = e[R1];
double F = f[R1];
? 接著將其帶入公式中計(jì)算
double xn = A * x0 + B * y0 + E;
double yn = C * x0 + D * y0 + F;
? 最后是遞歸,這里使用for循環(huán)進(jìn)行遞歸,同時(shí)也可以重復(fù)調(diào)用函數(shù)。接下來(lái)是整體代碼
public void IFS1(){
Random r = new Random();
//定義兩個(gè)變量用于保存遞歸過(guò)程產(chǎn)生的值
double x0 = 0;
double y0 = 0;
//定義整數(shù)用于接收坐標(biāo)值
int x , y;
//遞歸體
for (int i = 0; i< 100000; i++) {
int R1 = r.nextInt(5);
double A = a[R1];
double B = b[R1];
double C = c[R1];
double D = d[R1];
double E = e[R1];
double F = f[R1];
double xn = A * x0 + B * y0 + E;
double yn = C * x0 + D * y0 + F;
x0 = xn;
y0 = yn;
//參數(shù)轉(zhuǎn)型,將浮點(diǎn)型轉(zhuǎn)為整型,同時(shí)放大圖形
x = ((int) (x0 * 600 + 200));
y = ((int) (y0 * 600 + 100));
//圖形位置設(shè)置
x = 800 - x;
y = 800 - y;
graphics02.drawLine(x , y , x , y);
}
}
? 最終效果如下:
? 注意事項(xiàng):分形繪制比較簡(jiǎn)單,基本上的分形函數(shù)都有提供,但在編程過(guò)程中需要注意參數(shù)的值一定要正確輸入,如果輸入錯(cuò)誤,最終圖形的會(huì)和原圖形不一致,因?yàn)樵诙啻芜f歸后差異將會(huì)被放大。?
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧