資源簡介
Java實現圖結點著色圖形化演示,里面包含完整源代碼,是學習算法設計不可多得的好材料,各位親,心動不如行動啊,趕快下載吧!

代碼片段和文件信息
import?java.awt.Color;
import?java.awt.Graphics;
import?java.util.ArrayList;
import?java.util.List;
/**
?*?實現作圖和對點著色的算法
?*?@author?zzx
?*
?*/
public?class?DuoBianXing?{
?private?int?startX;//?頂點的X坐標
?private?int?startY;//?頂點的Y坐標
?private?int?r;//?外接圓的半徑
?List?ps?=?new?ArrayList();
?List?ls?=?new?ArrayList();
?PaintColor?pc;
?
?public?DuoBianXing(?PaintColor?pc)?{
?this.pc?=?pc;
?startX?=?400;
?startY?=?10;
?r?=?200;
?}
?/**
??* 確定每個點的位置
??*?@param?size?頂點的個數(多邊形的邊數)
??*/
?public?void?posOfPoint(int?size)?{
?ps.add(new?Point(startXstartYColor.RED?pc));
?Point?p;
?for?(int?i?=?1;?i? ?p?=?nextPoint(((2?*?Math.PI)?/?size)?*?i);
?ps.add(p);
?}
?}
?/**
??*?在頂點處建立直角坐標系,用r和arc確定下一個點的坐標
??*?@param?arc?為弧度
??*?@return?下一個點的坐標
??*/
?public?Point?nextPoint(double?arc)?{
?int?x?=?(int)?(startX?-?r?*?Math.sin(arc));
?int?y?=?(int)?(startY?+?r?-?r?*?Math.cos(arc));
?Point?p?=?new?Point(x?yColor.YELLOW?pc);
?return?p;
?}
?/**
??*?計算產生count條邊
??*?@param?count?不連通圖中邊的個數
??*/
?public?void?posOfLine(int?count){
?int?m?=?count?-?ps.size();
?
?for(int?i?=?1;?i?<=?count;?i++?){
?if(i? ?ls.add(getLine(ps.get(i-1)?ps.get(i)));
?}
?else?if(i?==?ps.size()?){
?ls.add(getLine(ps.get(0)?ps.get(i-1)));
?}
?else{
?if(?m?<=?0?)?continue;
?if(m?>=?2?){
?ls.add(getLine(ps.get(m-2)?ps.get(m)));
?}else{
?ls.add(getLine(ps.get(1)?ps.get(ps.size()-1)));
?}
?m--;
?}
?}
?}
?
?public?Line?getLine(Point?p1?Point?p2){
?Line?l?=??new?Line(p1?p2?pc);
?return?l;
?}
?
?public?void?draw(Graphics?g){
g.drawString(“點數:“+?ps.size()?10?10);
g.drawString(“邊數:“+?ls.size()?10?20);
pointColorTest(0?ps?ls);
for(int?i?=?0;?i? Point?p1?=?ps.get(i);
p1.draw(g);
}
for(int?i?=?0;?i? Line?l?=?ls.get(i);
l.draw(g);
}
?}
?/**
??*?遞歸判斷下標為num的點與?在點集中下標大于num之后的點是否有連線,
??*?若有,在判斷兩點顏色,一樣則把之后的點涂上隨機顏色,不一樣則繼續,若無連線,就涂上num相同的顏色
??*?@param?num?當前遞歸時的點下標
??*?@param?ps?點集
??*?@param?ls?邊集
??*/
?public?void?pointColorTest(int?num?List?ps?List?ls){
?if(num?==?ps.size()){
?return?;
?}
?Point?point?=?ps.get(num)?p;
?for(int?i?=?num+1;?i? ?p?=?ps.get(i);
?if(!?pointIsConnect(point??p?ls)?){
?p.color?=?point.color;
?}
?else{
?if(?isColorIsValid(point.color?p.color)){
?p.color?=?selectColor(point.color);
?}
?}?
??}
?if(num?==?ps.size()-1){
?for(int?i?=?0;?i? ?p?=?ps.get(i);
?if(pointIsConnect(point??p?ls)?){
?if(?isColorIsValid(p.color?point.color)){
?point.color?=?selectColor(p.color);
?}
?}
?}
?}
?pointColorTest(?++num?ps?ls);
?}
?/**
??*?判斷兩點是否在一條線上
??*/
?publ
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????232??2006-01-01?00:45??圖結點著色\.classpath
?????文件????????388??2006-01-01?00:45??圖結點著色\.project
?????文件???????4476??2006-01-01?00:47??圖結點著色\bin\DuoBianXing.class
?????文件???????1249??2006-01-01?00:46??圖結點著色\bin\Line.class
?????文件????????888??2006-01-01?00:46??圖結點著色\bin\PaintColor$MyPanel.class
?????文件???????3366??2006-01-01?00:46??圖結點著色\bin\PaintColor.class
?????文件???????1011??2006-01-01?00:46??圖結點著色\bin\Point.class
?????文件???????3983??2006-01-01?00:47??圖結點著色\src\DuoBianXing.java
?????文件????????624??2006-01-01?00:46??圖結點著色\src\Line.java
?????文件???????3086??2006-01-01?00:46??圖結點著色\src\PaintColor.java
?????文件????????483??2006-01-01?00:46??圖結點著色\src\Point.java
?????目錄??????????0??2014-11-27?13:47??圖結點著色\bin
?????目錄??????????0??2014-11-27?13:47??圖結點著色\src
?????目錄??????????0??2014-11-27?13:47??圖結點著色
-----------?---------??----------?-----??----
????????????????19786????????????????????14
- 上一篇:復雜多邊形運算并、交、差
- 下一篇:推箱子java實現源碼
評論
共有 條評論