討論區快速選單
知識庫快速選單
討論區最近新進100則主題 掌握Salesforce雲端管理秘訣
[ 回上頁 ] [ 討論區發言規則 ]
請問如何畫橢圓???
更改我的閱讀文章字型大小
作者 : yohji(阿泰) C++ Builder卓越專家貼文超過500則
[ 貼文 566 | 人氣 3153 | 評價 3150 | 評價/貼文 5.57 | 送出評價 10 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2002/7/17 上午 11:29:21
請問大家:
   該怎麼畫一個橢圓...不是用Image->Canvas->Ellipes...
   而是逐點畫出來的...橢圓方程式是x^2/a^2+y^2/b^2=1
   
謝謝大家...



作者 : hgffly(飛) 貼文超過200則人氣指數超過10000點
[ 貼文 246 | 人氣 23261 | 評價 290 | 評價/貼文 1.18 | 送出評價 11 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2002/7/17 下午 09:37:05
假如你是要逐點畫出來,
建議你把公式化成極標座

     x=cosQ
    y=sinQ
   a,b 自定
然後讓Q從 0 到 360 逐點畫應該就可以了!
作者 : yohji(阿泰) C++ Builder卓越專家貼文超過500則
[ 貼文 566 | 人氣 3153 | 評價 3150 | 評價/貼文 5.57 | 送出評價 10 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2002/7/19 下午 03:21:29
先謝謝你的回答..
我有看到有人(外國人)用以下的程式畫出橢圓,卻看不太懂
還有一個問題..有了這函式那怎麼在image上把橢圓給畫出來
我是初學者,所以請大家幫忙一下...謝謝大家

以下是source code

//宣告區
const int MAX_OUTLINE_SZ=25;
const int MIN_OUTLINE_SZ=15;
typedef struct
   {
    int perim_length;
    short *perim;
    int halfsize_x;
    int halfsize_y;
    unsigned char *mask;
   }OUTLINE;

OUTLINE outlines[MAX_OUTLINE_SZ+1];
//------------------------------------------------------------------------
void makeEllipticalOutline(OUTLINE *outline,int xrad,int yrad )
{
         short *ptr;
         int xradsq=xrad*xrad;
         int yradsq=yrad*yrad;
         int xradbkpt=(int)(xradsq/sqrt(xradsq+yradsq));
         int yradbkpt=(int)(yradsq/sqrt(xradsq+yradsq));
         int x,y,curx,cury;
         outline->perim_length=4*xradbkpt+4*yradbkpt+4;
         outline->perim=(short*)new short[2*outline->perim_length];
         ptr=outline->perim;
         *(ptr)++=curx=0;
         *(ptr)++=cury=-yrad;

  for (x=1;x<=xradbkpt;x++ )//0到45度
  {
  y=(int)(-yrad*sqrt(1-((float)x/xrad)*((float)x/xrad)));
    *(ptr)++=x-curx;
    *(ptr)++=y-cury;
    curx=x;
    cury=y;
  }

  for (y=-yradbkpt;y<=yradbkpt;y++ ) //45到135度(含右軸)
  {
  x=(int)(xrad*sqrt(1-((float)y/yrad)*((float)y/yrad)));
    *(ptr)++=x-curx;
    *(ptr)++=y-cury;
    curx=x;
    cury=y;
  }

...依此類推到360度...最後

  outline->halfsize_x=xrad;
  outline->halfsize_y=yrad;

謝謝大家
作者 : hgffly(飛) 貼文超過200則人氣指數超過10000點
[ 貼文 246 | 人氣 23261 | 評價 290 | 評價/貼文 1.18 | 送出評價 11 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2002/7/19 下午 08:51:38
你參考這個程式碼吧!
 
  int a=200,b=100;
  int x,y;
  const float PI=3.14159;

  for(int i=1;i<=3600;i++)
    {
    x=200+a*cos(PI*i/1800);
    y=150+b*sin(PI*i/1800);
    ImgDraw->Canvas->Pixels[x][y]=clBlack;
    }
作者 : yohji(阿泰) C++ Builder卓越專家貼文超過500則
[ 貼文 566 | 人氣 3153 | 評價 3150 | 評價/貼文 5.57 | 送出評價 10 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2002/7/22 下午 07:01:48
to 飛:

非常感謝...
作者 : sucheng(書誠)
[ 貼文 2 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2012/10/8 下午 02:29:07
double value;
  double x,y;
  double x1,y1;
  double h,k;
  canvas->Ellipse(100-5 ,100-5,100+5,100+5);

  for(int t=-180;t<=180;t++)
  {

value=(3.14/180)*t;
x=30*cos(value);
y=15*sin(value);
  canvas->Ellipse(100+x-5 ,100+y-5,100+x+5,100+y+5);
}
圓心為100 100 長軸30短軸15 的正橢圓
 板主 : 徵求中
 > C++ Builder - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - C++ Builder - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
C++ Builder
1 windblown 5420 
2 Raynor 3120 
3 阿泰 2980 
4 workman 1650 
5 Linkin 1360 
6 CrazyStar 1260 
7 青衫 1160 
8 jonay 1080 
9 charlie 900 
10 小呆 770 
C++ Builder
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.0625