日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java编写科赫曲线_分形——科赫曲线

發布時間:2024/10/8 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java编写科赫曲线_分形——科赫曲线 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? 這幾天在因為在和別人合作寫一個程序,就在想比如我要寫一個科赫曲線,那么我寫來給別人用的話,怎樣是用著最方便的,即使是別人沒有去詳細看你的代碼,拿到手就像寫一個界面那樣,直接 new 一個對象,然后調用函數就 ok 啦!然后我就想到啦封裝,就是我直接寫一個科赫曲線的類,有不同的構造器方法,也就是提供給別人不同的選擇,比如想自定義偏轉角,步長,起始點,遞歸次數 等等。

? ? ? ? 然后,這個我是用L-system 規則寫的科赫曲線,而L-system就是自定義規則,然后生成最終用來畫線的字符串,比如字符 'F'代表在畫布上畫一條長度為一定的直線,"-"和"+"則代表偏轉的角度,比如:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?F的規則: ? ?F -> F-F++F-F

?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?遞歸: ?F-F++F-F-F-F++F-F++F-F++F-F-F-F++F-F

實現的效果:

?

?

代碼:

class="java" name="code">public class KeheLine {

private String goal;

private int angle=0;

private int leftangle=60;

private int rightangle=60;

private int length=300;

private int depth=1;

private double x1=200,y1=500;

private double pi=Math.PI;

/**

* 無參數構造

*/

public KeheLine(){

String son="F-F++F-F";

this.goal=getString(son, 1);

}

/**

* 自定義規則構造器

* @param son

*/

public KeheLine(String son){

this.goal=getString(son, 1);

}

/**

* 自定義規則和遞歸層次的構造器

* @param son 定義的規制字符串

* @param depth 深度

*/

public KeheLine(String son,int depth){

this.goal=getString(son, depth);

this.depth=depth;

}

/**

* 自定義規則和遞歸層次和旋轉角的科赫曲線的構造器

* @param son 定義的規制字符串

* @param depth 深度

* @param angle 旋轉角

*/

public KeheLine(String son,int depth,int angle){

this.goal=getString(son, depth);

this.angle=angle;

this.depth=depth;

}

/**

* 自定義規則和遞歸層次和旋轉角和左右偏轉角相等的科赫曲線的構造器

* @param son 定義的規制字符串

* @param depth 深度

* @param angle 旋轉角

* @param leftangle 偏轉角

*/

public KeheLine(String son,int depth,int angle ,int leftangle){

this.goal=getString(son, depth);

this.angle=angle;

this.leftangle=leftangle;

this.rightangle=leftangle;

this.depth=depth;

}

/**

* 自定義規則和遞歸層次和旋轉角和左右偏轉角不相等的科赫曲線的構造器

* @param son 定義的規制字符串

* @param depth 深度

* @param angle 旋轉角

* @param leftangle 左偏轉角

* @param rightangle 右偏轉角

*/

public KeheLine(String son,int depth,int angle ,int leftangle,int rightangle){

this.goal=getString(son, depth);

this.angle=angle;

this.leftangle=leftangle;

this.rightangle=rightangle;

this.depth=depth;

}

/**

* 自定義規則和遞歸層次和旋轉角和左右偏轉角不相等的科赫曲線的構造器

* @param son 定義的規制字符串

* @param depth 深度

* @param angle 旋轉角

* @param leftangle 左偏轉角

* @param rightangle 右偏轉角

*/

public KeheLine(String son,int depth,int angle ,int leftangle,int rightangle,int length ){

this.goal=getString(son, depth);

this.angle=angle;

this.leftangle=leftangle;

this.rightangle=rightangle;

this.length=length;

this.depth=depth;

}

/**

* 得到科赫曲線的字符串

* @param son 定義的規制字符串

*/

public String getString(String son,int depth){

String relust="F";

for(int i=0;i

StringBuffer str=new StringBuffer();

for(int j=0;j

if(relust.charAt(j)=='F'){

str.append(son);

}else{

str.append(relust.charAt(j));

}

}

relust=str.toString();

}

return relust;

}

/**

* 畫科赫曲線

* @param g 畫布對象

*/

public void drawKehe(Graphics g){

System.out.println("depth=:"+depth);

double rangle=angle;

double rlength=length/(4*depth);

for(int i=0;i

if(goal.charAt(i)=='F'){

double x2=x1+rlength*Math.cos(rangle*pi/180);

double y2=y1-rlength*Math.sin(rangle*pi/180);

g.setColor(Color.green);

g.drawLine((int)x1,(int) y1, (int)x2, (int)y2);

x1=x2;

y1=y2;

}else if(goal.charAt(i)=='-'){

rangle+=leftangle;

}else if(goal.charAt(i)=='+'){

rangle-=rightangle;

}else if(goal.charAt(i)=='*'){

rangle+=angle;

}

}

}

}

?

大小: 3.2 KB

查看圖片附件

總結

以上是生活随笔為你收集整理的java编写科赫曲线_分形——科赫曲线的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。