這是Java畫板開發的最后階段,本章節主要講解分形的繪制。
我們提供的服務有:成都網站設計、網站制作、外貿營銷網站建設、微信公眾號開發、網站優化、網站認證、嫩江ssl等。為上千余家企事業單位解決了網站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的嫩江網站制作公司一、分形? 1、簡述
? 分形看似毫無任何規律,但其實暗藏一定的關系,大部分的分形可以通過某種數學關系的運算,再通過程序遞歸調用,從而可以繪制出許多圖形。其中最常見的圖形就是初中學習勾股定理后繪制的勾股樹。
二、分形繪制? 明確思路后可以自己動手操作,體驗分形的繪制
1、分形樹
????????? 首先繪制分形樹,先來看圖形。
??????一般來說,分形繪制我們可以使用已經提供的函數并通過程序遞歸調用,首先是函數:
?????????????????????????????????????????????????????xn+1?= a xn?+ b yn?+ e
?????? ?yn+1?= c xn?+ d yn?+ f
上述函數即繪制該分形所需的函數,接下來是參數。上述圖形的參數一共有5組,每組有6個參數,這些參數構成一個二維矩陣。在繪制過程中,需要隨機選出一組參數進行計算,一下是圖形繪制的參數:
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
? 接下來是在程序中的實現過程。簡單來說就是在鼠標點擊畫板空白處的時候繪制圖形。
首先創建列表用于保存參數。
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};
接著創建分形繪制的函數,思路如下:
? 首先隨機選擇一組參數,這里將會用到隨機數,將對應的參數取出
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];
? 接著將其帶入公式中計算
double xn = A * x0 + B * y0 + E;
double yn = C * x0 + D * y0 + F;
? 最后是遞歸,這里使用for循環進行遞歸,同時也可以重復調用函數。接下來是整體代碼
public void IFS1(){
Random r = new Random();
//定義兩個變量用于保存遞歸過程產生的值
double x0 = 0;
double y0 = 0;
//定義整數用于接收坐標值
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;
//參數轉型,將浮點型轉為整型,同時放大圖形
x = ((int) (x0 * 600 + 200));
y = ((int) (y0 * 600 + 100));
//圖形位置設置
x = 800 - x;
y = 800 - y;
graphics02.drawLine(x , y , x , y);
}
}
? 最終效果如下:
? 注意事項:分形繪制比較簡單,基本上的分形函數都有提供,但在編程過程中需要注意參數的值一定要正確輸入,如果輸入錯誤,最終圖形的會和原圖形不一致,因為在多次遞歸后差異將會被放大。?
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
文章標題:使用JavaSwing組件開發畫板(4)-創新互聯
文章URL:http://m.newbst.com/article12/discgc.html
成都網站建設公司_創新互聯,為您提供電子商務、品牌網站制作、做網站、手機網站建設、搜索引擎優化、網頁設計公司
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯