Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Vẽ một bông hoa bằng cách vẽ các elip nghiêng 1 góc G độ với các màu khác nhau?

  1. #1
    Ngày gia nhập
    12 2007
    Bài viết
    1

    Mặc định Vẽ một bông hoa bằng cách vẽ các elip nghiêng 1 góc G độ với các màu khác nhau?

    Đề bài: Vẽ một bông hoa bằng cách vẽ các elip nghiêng 1 góc G độ với các màu khác nhau. Vẽ đến khi nào ấn phím bất kỳ thì ngưng.
    Yêu cầu: Tọa độ tâm, bán kính của elip và góc nghiêng G được nhập vào từ bàn phím
    mọi người giúp đỡ or gợi ý em bt trên với.
    thanks

  2. #2
    Ngày gia nhập
    09 2009
    Bài viết
    240

    Mình mới code xong cái ellipse theo giải thuật của Jack Elton Bresenham. Để hiểu giải thuật, bạn theo đường link dưới nhé. Nhớ phản hồi sau khi chạy nhé.
    http://lifc.univ-fcomte.fr/home/~ede...cts/bresenham/

    C Code:
    1. #include <graphics.h>
    2. #include <dos.h>
    3. #include <math.h>
    4. #include <conio.h>
    5.  
    6. struct point
    7. {
    8.   float x, y;
    9.   point(float _x=0, float _y=0){x = _x; y = _y;}
    10. };
    11.  
    12. void getpoints(float a, float b, point p[], int &num)
    13. {
    14.     float x, y, xp, yp, c, v;
    15.     c= a/b; c=c*c; v=2*c-2*a+1;
    16.     y=0;x=a; num = 0;
    17.  
    18.     do
    19.         {
    20.             p[num] = point(x,y); num++;
    21.             if (v<0) v += 2*c*(2*y+3);
    22.             else
    23.                 {
    24.                     v += 4*(1-x)+2*c*(2*y+3);
    25.                     x--;
    26.                 }
    27.             y++;
    28.         } while (c*y<=x);
    29.  
    30.     c= b/a; c=c*c; v = 2*c-2*b+1;
    31.     x=0;y=b;
    32.     int old = num;
    33.     do
    34.         {
    35.             p[num] = point(x,y); num++;
    36.             if (v<0) v += 2*c*(2*x+3);
    37.             else
    38.                 {
    39.                     v += 4*(1-y)+2*c*(2*x+3);
    40.                     y--;
    41.                 }
    42.             x++;
    43.         } while (c*x<=y);
    44.     for (int k = 0; k < (num-old)/2; k++)
    45.         {
    46.             point t = p[old+k];
    47.             p[old+k]= p[num-k-1];
    48.             p[num-k-1]=t;
    49.         }
    50. }
    51. /*
    52. xc, yc: Tâm ellipse
    53. xradius, yradius: Các bán trục x, y
    54. angle: Góc xoay theo chiều dương
    55. color: Màu vẽ
    56. delays: Thời gian trễ sau mỗi điểm vẽ
    57. scale: Tỷ lệ cho trục y, thay đổi tùy theo mode đồ họa
    58. */
    59. void myellipse(float xc, float yc,float xradius, float yradius, float angle=0,int color=15,int delays = 0, float scale = 1.2)
    60. {
    61.     point p[400]; int num, k;
    62.     getpoints(xradius,yradius, p, num);
    63.     float x, y, xp, yp;
    64.     float co = cos(angle*(M_PI/180));
    65.     float si = sin(angle*(M_PI/180));
    66.     setcolor(color);
    67.     xp = p[0].x*co - p[0].y*si;
    68.     yp = -p[0].x*si - p[0].y*co;
    69.     moveto(xc+xp,yc + scale*yp);
    70.  
    71.     for (k = 1; k < num; k++)
    72.         {
    73.             xp = p[k].x*co - p[k].y*si;
    74.             yp = -p[k].x*si - p[k].y*co;
    75.             lineto(xc+xp,yc + scale*yp);
    76.             delay(delays);
    77.         }
    78.  
    79.     for (k = num-1; k >=0; k--)
    80.         {
    81.             xp = -p[k].x*co - p[k].y*si;
    82.             yp = p[k].x*si - p[k].y*co;
    83.             lineto(xc+xp,yc + scale*yp);
    84.             delay(delays);
    85.         }
    86.  
    87.     for (k = 0; k < num; k++)
    88.         {
    89.             xp = -p[k].x*co + p[k].y*si;
    90.             yp = +p[k].x*si + p[k].y*co;
    91.             lineto(xc+xp,yc + scale*yp);
    92.             delay(delays);
    93.         }
    94.  
    95.     for (k = num-1; k >=0; k--)
    96.         {
    97.             xp = p[k].x*co + p[k].y*si;
    98.             yp = -p[k].x*si + p[k].y*co;
    99.             lineto(xc+xp,yc + scale*yp);
    100.             delay(delays);
    101.         }
    102. }
    103.  
    104. void main()
    105. {
    106.      int gd= DETECT, gm;
    107.      initgraph(&gd,&gm,"C:/BC/BGI");
    108.      myellipse(320,240,120,80,30,11,10);
    109.      getch();
    110.      closegraph();
    111. }
    Đã được chỉnh sửa lần cuối bởi onminh : 06-04-2010 lúc 01:08 AM.

  3. #3
    Ngày gia nhập
    10 2010
    Bài viết
    2

    Wink Hoi lai thuat toan ban viet

    C Code:
    1. c= a/b; c=c*c;// cai nay la sao?????
    2. void getpoints(float a, float b, point p[], int &num);
    3. // Trong ham nay ban khoi tao hai bien xp,yp, nhung sao khong thay su dung?
    4. void myellipse(float xc, float yc,float xradius, float yradius, float angle=0,int color=15,int delays = 0, float scale = 1.2);
    5. // Trong ham nay bien x,y ban khoi tao ma khong dung???
    6. int gd= DETECT, gm;
    7. // cai nay de lam gi.
    8.  
    9. // Minh dinh chuyen bai nay qua c++. Gap mot so loi.
    10. // Ban giai thich cho minh nhe! cam on.(:-*)

Các đề tài tương tự

  1. Kỹ thuật C++ Vẽ elip bằng thuật toán bresenham trong C chạy không ra kết quả đúng?
    Gửi bởi timduncanboy trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 08-10-2013, 08:37 PM
  2. Vẽ một bông hoa bằng hình elip mình viết hàm xoay nhưng nó không chạy
    Gửi bởi biencute trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 29-06-2011, 12:17 AM
  3. Trả lời: 2
    Bài viết cuối: 24-05-2011, 12:29 AM
  4. Vẽ bông hoa bằng hình elip trong C?
    Gửi bởi biencute trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 08-05-2011, 07:43 AM
  5. Hỏi về hàm vẽ elip trong c#
    Gửi bởi rambolun trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 5
    Bài viết cuối: 03-06-2010, 10:05 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn