全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1928
推到 Plurk!
推到 Facebook!

看不懂劃歪斜橢圓的程式碼

尚未結案
joen0000
一般會員


發表:47
回覆:47
積分:18
註冊:2004-11-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-02-04 16:54:30 IP:211.76.xxx.xxx 未訂閱
 
  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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-02-14 14:06:14 IP:219.68.xxx.xxx 未訂閱
參考一下這個網站.. 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"> =程式是一種藝術 也是訓練自己的分析規劃= =是段落分明 或是雜亂無章= =是一言以敝 或是廢話連篇= =是一目了然 或是艱深難懂= 體會這份藝術 您會了解另一份喜悅與成就
發表人 - geniustom 於 2005/02/14 14:10:17
joen0000
一般會員


發表:47
回覆:47
積分:18
註冊:2004-11-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-02-14 15:52:07 IP:211.76.xxx.xxx 未訂閱
挖...經過反覆看了三四遍之後 似乎有點懂了.... 好厲害阿 大大 發表人 - joen0000 於 2005/02/14 15:53:46
系統時間:2024-05-09 13:22:37
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!