當前位置:編程學習大全網 - 編程語言 - 用Java做壹個明星案例

用Java做壹個明星案例

請參考此代碼。可以運行的程序包公用程序;公共類測試{

公共靜態void main(String[] args){

五角星筆=新五角星(10,0,' ','★');

draw . print canvas(pen . get pentagram());

}

}//Pentagram.java五角星

類五角星形{

私有final char FILL _ CHAR//填充字符

私有final char SPACE _ CHAR//中性字符

私有final int R;//五角星外接圓的半徑

私人最終浮動輪換;//五角星逆時針旋轉的角度

private final int X;//用於生成繪圖數組。

私人最終int Y;//用於生成繪圖數組/* *

*構建壹個五角星形對象

*

* @param半徑

*五角星的半徑

* @param旋轉

*五角星的逆時針旋轉角度

* @param spaceChar

*用字符填充畫布上的空白區域。

* @param fillChar

*畫布上的線條充滿了字符。

*/

公共五角星形(int radius,float rotation,char spaceChar,char fillChar) {

這個。R =半徑;

這個。旋轉=旋轉;

這個。FILL _ CHAR = fillChar

這個。SPACE _ CHAR = spaceChar

這個。x = 2 * R+1;

這個。y = 2 * R+1;

} public char[][] getPentagram() {

char[][]canvas = init canvas();

Draw Draw = new Draw(FILL _ CHAR);

//設五角星最右邊的點為A,逆時針選擇點B~E。

//通過圓的極坐標公式,可以得出:

//獲取以下點的坐標

// A點坐標(0.951R,0.309R)

// B點坐標(0,R)

// C點坐標(-0.951R,0.309R)

// D點坐標(-0.588R,-0.809R)

// E點坐標(0.588R,-0.809R)

//畫壹條線段CA

draw . drawline(mcos(162)* R,msin(162) * R,mcos(18) * R,msin(18) * R,

畫布);

//畫壹條線段DA

draw.drawLine(mcos(234) * R,msin(234) * R,mcos(18) * R,msin(18) * R,

畫布);

//畫壹條線段CE

draw . drawline(mcos(162)* R,msin(162) * R,mcos(306) * R,msin(306)

* R,畫布);

//畫壹條線段DB

draw.drawLine(mcos(234) * R,msin(234) * R,mcos(90) * R,msin(90) * R,

畫布);

//畫壹條線段BE

draw.drawLine(mcos(90) * R,msin(90) * R,mcos(306) * R,msin(306) * R,

畫布);

返回畫布;

}//指定兩點在方形字符數組中畫線。

//初始化圖形數組並填空。

private char[][] initCanvas() {

char[][]canvas = new char[Y][X];

for(int I = 0;我& lty;i++) {

for(int j = 0;j & ltx;j++) {

canvas[I][j]= SPACE _ CHAR;

}

}

返回畫布;

}//根據角度求正弦值,保留兩位小數。

私有雙精度msin(浮點a) {

return((int)(math . sin(math . tora dians(a+ROTATION))* 100))/100.0;

}//根據角度求余弦值,保留兩位小數。

私有雙mco(浮動a) {

return((int)(math . cos(math . tora dians(a+ROTATION))* 100))/100.0;

}

}//Draw.java繪圖工具類

班級抽簽{

private char fillChar公共抽獎(char fillChar) {

this . fill char = fill char;

} /**

*根據兩個點在二維字符數組上畫壹條線。

*

* @param x1

* @param y1

* @param x2

* @param y2

* @param畫布

*/

公共無效繪制線(雙x1,雙y1,雙x2,雙y2,

char[][] canvas) {

int radius =(canvas . length-1)/2;

//從X方向填充

if(x 1 & gt;x2) {

雙t = x 1;

x 1 = x2;

x2 = t;

t = y 1;

y 1 = y2;

y2 = t;

}

//獲得線性方程的兩個系數

雙a =(y 1-y2)/(x 1-x2);

雙b = y 1-a * x 1;

//根據X方向的值求Y值,填圖。

for(int I =(int)math . round(x 1);我& lt=(int)math . round(x2);i++) {

//根據線性方程y = ax+b,求y。

int y =(int)math . round(a* I+b);

//因為y和I計算的結果可能是負數,

//為了使用數組表示坐標,進行了以下轉換。

// c[R][R]是坐標原點。

//c [r] [0...r]是X方向的負半軸。

//c [r] [r+1...2 * r]是X方向的正半軸。

// c[0..R][R]是Y方向的正半軸。

//C [R+1...2 * R] [R]是Y方向的負半軸。

int YY = radius-y;

int xx = radius+I;

yy = yy & lt0 ?0:YY;

yy = yy & gt2 *半徑?2 *半徑:YY;

xx = xx & lt0 ?0:xx;

xx = xx & gt2 *半徑?2 *半徑:xx;

canvas[YY][xx]= fill char;

}

//從Y方向填充,方便減少間距問題造成的字符間隙。

if(y 1 & gt;y2) {

雙t = x 1;

x 1 = x2;

x2 = t;

t = y 1;

y 1 = y2;

y2 = t;

}

//根據Y方向的值求X值,填圖。

for(int I =(int)math . round(y 1);我& lt=(int)math . round(y2);i++) {

//根據x = (y-b)/a,求x。

int y =(int)math . round((I-b)/a);

int YY = radius-I;

int xx =半徑+y;

yy = yy & lt0 ?0:YY;

yy = yy & gt2 *半徑?2 *半徑:YY;

xx = xx & lt0 ?0:xx;

xx = xx & gt2 *半徑?2 *半徑:xx;

canvas[YY][xx]= fill char;

}

} /**

*將繪圖後的畫布輸出到控制臺。

*

* @param畫布

*/

public static void print canvas(char[][]canvas){

for(int I = 0;我& lt畫布.長度;i++) {

for(int j = 0;j & lt畫布[i]。長度;j++) {

system . out . print(canvas[I][j]);

}

system . out . println();

}

}

}

  • 上一篇:誇克算法壹鍵移除女性衣物
  • 下一篇:不打電競的“電競專業”,都在學些什麽呢?
  • copyright 2024編程學習大全網