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

Đề tài: Đồ họa 2D trên nền DOS : Vẽ bánh xe với Turbo C/Borland C

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

    Red face Đồ họa 2D trên nền DOS : Vẽ bánh xe với Turbo C/Borland C

    Code chỉ chạy trên Turbo C hoặc Borland C và trên Windows XP với chế độ đồ họa đã được bật
    Chú ý : Để chạy được cần thay đổi đường dẫn đến thư mục BGI của bạn , ví dụ của mình là "C:\\BC\\BGI"


    Đây la code mình viết các ban tham khảo, luôn tiện cho mình ý kiến ha! đã chạy gồi nhưng không được tối ưu..
    mới viết không được tốt.
    **********************************
    C Code:
    1. #include <conio.h>
    2. #include <graphics.h>
    3. #include <stdlib.h>
    4. #include <dos.h>
    5. #include <math.h>
    6. float t = 0.0;
    7. float x, y;
    8. void vebanhxe()
    9. {  
    10.     int x1, y1, x2, y2;
    11.     circle(x, y, 20);
    12.     for(int i=0;i<4;i++)
    13.     {
    14.         x1 = x - 20 * cos(t);
    15.         y1 = y - 20 * sin(t);
    16.         x2 = x + 20 * cos(t);
    17.         y2 = y + 20 * sin(t);
    18.         line(x1, y1, x2, y2);
    19.         t=t+45;
    20.     }
    21.     x1=y1=x2=y2=0;
    22.     circle(x+100, y, 20);
    23.     for(int j=0;j<4;j++)
    24.     {
    25.         x1 = x+100 - 20 * cos(t);
    26.         y1 = y - 20 * sin(t);
    27.         x2 = x+100 + 20 * cos(t);
    28.         y2 = y + 20 * sin(t);
    29.         line(x1, y1, x2, y2);
    30.         t=t+45;
    31.     }
    32.    
    33. }
    34. void vexe()
    35. {
    36.     vebanhxe();
    37.     line(x+20,y,x+100-20,y);
    38.     line(x-40,y,x-20,y);
    39.         line(x-40,y,x-40,y-20);
    40.         line(x-40,y-20,x,y-20);
    41.         line(x,y-20,x+30,y-40);
    42.         line(x+30,y-40,x+70,y-40);
    43.         line(x+70,y-40,x+100,y-20);
    44.         line(x+100,y-20,x+140,y-20);
    45.         line(x+140,y-20,x+140,y);
    46.     line(x+140,y,x+120,y);
    47. }
    48. void dichuyen()
    49. {
    50.     while (!kbhit())
    51.     {
    52.         line(0,321,getmaxx(),321);
    53.         while(x<=getmaxx()-150)
    54.         {
    55.                     line(0,321,getmaxx(),321);
    56.                 setcolor(YELLOW);
    57.             vexe();
    58.             delay(10);
    59.                //   setcolor(BLACK);
    60.             //vexe();
    61.                         cleardevice();
    62.             t += 0.05;
    63.                 x += 1 ;
    64.         }
    65.         setcolor(YELLOW);
    66.         vexe();
    67.         cleardevice();
    68.         x=40;
    69.             y=300;
    70.     }
    71.            
    72. }
    73. void main()
    74. {
    75.     int gd = DETECT, gm ;
    76.  
    77.     initgraph(&gd, &gm,"C:\\BORLANDC\\BGI");
    78.     setbkcolor(BLUE);
    79.      x = 40;
    80.     y = 300;
    81.     dichuyen();
    82.     getch();
    83.     closegraph();
    84.  
    85. }
    ********************************************

    Bổ sung thêm code robot 2D ,áp dung thuật toán xoay và tịnh tiến. Mình mới thực hành lúc sáng.
    *****************************
    C Code:
    1. #include<iostream.h>
    2. #include<conio.h>
    3. #include<graphics.h>
    4. #include<dos.h>
    5. #include<math.h>
    6. struct point
    7. {
    8.     float x,y;
    9. };
    10. void myline(point p1,point p2);
    11. void vedg(point *p,int n);
    12. point tilediem(point p,float sx,float sy,point c);
    13. void tiledg(point *p,point *q,int n, float sx,float sy,point c);
    14. void quaydg(point *p,point *q,int n,point c,float a);
    15. point tinhtiendiem(point p,float a,float b);
    16. void tinhtiendg(point *p,point *q,int n, float dx,float dy);
    17.  
    18. void myline(point p1,point p2)
    19. {
    20.     line(p1.x,getmaxy()-p1.y,p2.x,getmaxy()-p2.y);
    21. }
    22. void vedg(point *p,int n)
    23. {
    24.     for(int i=0;i<n-1;i++)
    25.     {
    26.         myline(p[i],p[i+1]);
    27.     }
    28.     myline(p[n-1],p[0]);
    29. }
    30. point tilediem(point p,float sx,float sy,point c)
    31. {
    32.     p=tinhtiendiem(p,-c.x,-c.y);
    33.     p.x*=sx;
    34.     p.y*=sy;
    35.     p=tinhtiendiem(p,c.x,c.y);
    36.     return p;
    37. }
    38. void tiledg(point *p,point *q,int n,float sx,float sy,point c)
    39. {
    40.     for(int i=0;i<n;i++)
    41.     {
    42.         q[i]=tilediem(p[i],sx,sy,c);
    43.     }
    44. }
    45. void quaydg(point *p,point *q,int n,point c,float a)
    46. {
    47.     for(int i=0;i<n;i++)
    48.     {
    49.         q[i].x=p[i].x*cos(a*M_PI/180)-p[i].y*sin(a*M_PI/180)+c.x*(1-cos(a*M_PI/180))+c.y*sin(a*M_PI/180);
    50.         q[i].y=p[i].y*cos(a*M_PI/180)+p[i].x*sin(a*M_PI/180)-c.x*sin(a*M_PI/180)+c.y*(1-cos(a*M_PI/180));
    51.     }
    52. }
    53. point  tinhtiendiem(point p,float a,float b)
    54. {
    55.     point q;
    56.     q.x=p.x+a;
    57.     q.y=p.y+b;
    58.     return q;
    59. }
    60. void tinhtiendg(point *p,point *q,int n,float dx,float dy)
    61. {
    62.     for(int i=0;i<n;i++)
    63.     {
    64.         q[i]=tinhtiendiem(p[i],dx,dy);
    65.     }
    66. }
    67. void main()
    68. {
    69.     int gd=0,gm;
    70.     initgraph(&gd,&gm,"D:\\BORLANDC\\BGI");
    71.     setcolor(RED);
    72.     point p[4]={200,200,200,300,250,300,250,200};
    73.     vedg(p,4);
    74.     point q[4];
    75.     point c={225,250};
    76.  
    77.     point c1={200,300};
    78.     point c2={250,300};
    79.     tiledg(p,q,4,2,0.6,c);
    80.     tinhtiendg(q,q,4,0,100);
    81.     vedg(q,4);
    82.     tiledg(p,q,4,0.5,1,c);
    83.     tinhtiendg(q,q,4,30,-110);
    84.     vedg(q,4);
    85.     tiledg(p,q,4,0.5,1,c);
    86.     tinhtiendg(q,q,4,-30,-110);
    87.     vedg(q,4);
    88.     tiledg(p,q,4,0.5,1,c);
    89.     quaydg(q,q,4,c1,-10);
    90.         tinhtiendg(q,q,4,-50,0);
    91.     vedg(q,4);
    92.     tiledg(p,q,4,0.5,1,c);
    93.     quaydg(q,q,4,c2,10);
    94.     tinhtiendg(q,q,4,50,0);
    95.     vedg(q,4);
    96.         getch();
    97.     closegraph();
    98. }
    *****************************
    Đã được chỉnh sửa lần cuối bởi langman : 25-06-2010 lúc 11:10 PM. Lý do: làm liền, edit cho hợp lý

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

    em chạy nó báo lỗi tùm tum vậy.

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

    trong ham initgraph(&gd,&gm,"") bạn chọn lại đường dẫn cho phần trong ngoặc kép " "
    Hãy làm những gì mình muốn đừng để quá muộn!

  4. #4
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    @luan_cs : bài viết của bạn khá chất lượng, nhưng trình bày còn hơi lôm côm, để tồn tại trong box hướng dẫn cần phải chuẩn hơn ở 1 số chi tiết, detail,
    langman muốn giữ lại bài viết của bạn và cho vào map box hướng dẫn nên sẽ edit sơ qua lại bài viết của bạn cho hợp với box hướng dẫn

    sr vì vấn đề bản quyền. chỗ nào do langman thêm, edit langman sẽ để color=red
    ok?
    Đã được chỉnh sửa lần cuối bởi langman : 25-06-2010 lúc 11:09 PM.
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

  5. #5
    Ngày gia nhập
    11 2013
    Bài viết
    2

    Bác chủ cho em hỏi em thiếu cái thư viện graphics.h thì lấy ở đâu và copy vào đâu ạ?
    Với cả cái thư mục BGI ở chỗ nào sao em tìm ko thấy :(

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

  1. Lập trình C Chỉ em biết mở chương trình C làm sao trên Turbo C++
    Gửi bởi kiesfan trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 26-11-2013, 05:16 PM
  2. Cây nhị phân tìm kiếm trong C [Mã nguồn trên Turbo C/ Borland C++]
    Gửi bởi PoPoPoPo trong diễn đàn Thủ thuật, Tutorials CTDL & Giải thuật
    Trả lời: 4
    Bài viết cuối: 29-03-2012, 10:54 PM
  3. Bài tập C++ Chỉ hiển thị 1 hình tròn, khi cần vẽ n hình tròn trong turbo C?
    Gửi bởi monkey_2513 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: 26-12-2010, 09:59 AM
  4. Chạy được trên Turbo C không được trên DevC
    Gửi bởi thinh191 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 17
    Bài viết cuối: 16-04-2010, 09:05 PM
  5. Sự khác nhau giữa Turbo C, Borland C, Turbo C++ và Borland C++
    Gửi bởi trongduc03 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 11-01-2010, 09:54 AM

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