看不懂劃歪斜橢圓的程式碼 |
尚未結案
|
joen0000
一般會員 發表:47 回覆:47 積分:18 註冊:2004-11-07 發送簡訊給我 |
private void my_paint() { int x,y,ang; Calendar c1=Calendar.getInstance(tz); int hr=c1.get(Calendar.HOUR_OF_DAY); int min=c1.get(Calendar.MINUTE); int sec=c1.get(Calendar.SECOND); ang=30*hr min/2; x=(int)(0.34*r*Math.sin(ang*Math.PI/180)); y=(int)(0.34*r*Math.cos(ang*Math.PI/180)); ellipsef(r x,r-y,(int)(0.26*r),(int)(0.07*r),90 ang,Color.red); ang=6*sec; x=(int)(0.34*r*Math.sin(ang*Math.PI/180)); y=(int)(0.34*r*Math.cos(ang*Math.PI/180)); ellipsef(r x,r-y,(int)(0.26*r),(int)(0.07*r),90 ang,Color.BLUE); image(im,fc.x-r,fc.y-r,this); } private void polygonf(int[]x,int[]y,int n,Color c) { Polygon sh=new Polygon(x,y,n); img.setColor(c); img.fill(sh); } private void ellipsef(int x,int y,int rx,int ry,Color c) { Ellipse2D.Double sh=new Ellipse2D.Double((double)(x-rx) ,(double)(y-ry),(double)(2*rx),(double)(2*ry)); img.setColor(c); img.fill(sh); } private void ellipsef(int x,int y,int rx,int ry,int ang,Color c) { int n=60; int[]xx=new int[n]; int[]yy=new int[n]; for(int i=0;i這是寫時鐘的部份程式碼,我所知道的是java函式庫不能畫歪斜橢圓的東西 要用多邊形來劃 紅色的程式碼就是在劃歪斜橢圓 可是看不懂 有大大能解決我ㄉ問題嗎? |
geniustom
版主 發表:100 回覆:303 積分:260 註冊:2003-01-03 發送簡訊給我 |
參考一下這個網站..
http://steiner.math.nthu.edu.tw/ne01/tjy/edu-ellipse/ConstructEllipses.htm 其中..
http://steiner.math.nthu.edu.tw/ne01/tjy/edu-ellipse/ellipse(parameter).htm
他是利用三角函數去畫橢圓..就如同你的程式..
而你的
int u=(int)(x_*Math.cos(ang*Math.PI/180)-y_*Math.sin(ang*Math.PI/180)); int v=(int)(x_*Math.sin(ang*Math.PI/180)+y_*Math.cos(ang*Math.PI/180)); 其實這個步驟就是求偏移XY軸的歪斜橢圓的偏移向量..才是對一般橢圓旋轉的關鍵步驟 如果您學過線性代數裡面的線性映射..就會知道其實這是一個幾何旋轉的算子 以二維座標系來說..對X軸順時鐘旋轉Θ角..對應的線性映射就是 |cosΘ sinΘ| | X Y |* | | |-sinΘ cosΘ| X,Y這個矩陣與右邊的矩陣相乘就會是(X,Y)對X軸旋轉Θ角後的新座標 相乘之後(矩陣乘法應該會吧).. | XcosΘ-YsinΘ XsinΘ+YcosΘ | 則對應的新座標就會是(XcosΘ-YsinΘ,XsinΘ+YcosΘ) 所以這整個函數的動作就是..先使用三角函數求出該點的座標.. 在利用旋轉算子將該點作Θ角的旋轉.. 每一點依序代入相乘.. 就會得到一個旋轉Θ角的橢圓...這樣應該就解釋的很明白了 ^^ GOOD LUCK <> <> <> < >> > <> < class="code"> =程式是一種藝術 也是訓練自己的分析規劃= =是段落分明 或是雜亂無章= =是一言以敝 或是廢話連篇= =是一目了然 或是艱深難懂= 體會這份藝術 您會了解另一份喜悅與成就 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |