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

Đề tài: Help Đồ Họa C !! Cần Pro

  1. #1
    No Avatar
    hoake Khách

    Unhappy Help Đồ Họa C !! Cần Pro

    Em có bt vẽ đồ hoạ, em vẽ con thuyền nhưng mà ko bít cho nó chuyển động như thế nào , Pác nào pro test hộ em với. Thanks nhìu nhìu !!
    Attached Files Attached Files

  2. #2
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Mình đã làm chuyển động cho bạn rồi đó. Code của mình chạy hơi giật màn hình nhưng chủ yếu là để bạn hình dung xem cách tạo chuyển động như thế nào thôi.

    C++ Code:
    1. #include<stdio.h>
    2. #include<dos.h>
    3. #include<conio.h>
    4. #include<graphics.h>
    5. #include<stdlib.h>
    6. #include<math.h>
    7. #include<alloc.h>
    8. #define RADS 0.017453293
    9.  
    10.  
    11. //Khoi tao do hoa
    12.  
    13.  
    14. //Thuat toan ve duong tron
    15. void put8pixel(int x,int y,int xr,int yr,int color)
    16. {
    17.    putpixel(x+xr,y+yr,color);
    18.    putpixel(-x+xr,y+yr,color);
    19.    putpixel(x+xr,-y+yr,color);
    20.    putpixel(-x+xr,-y+yr,color);
    21.    putpixel(y+xr,x+yr,color) ;
    22.    putpixel(-y+xr,x+yr,color);
    23.    putpixel(y+xr,-x+yr,color) ;
    24.    putpixel (-y+xr,-x+yr,color);
    25. }
    26.  
    27. void dtron(int xr,int yr,int r,int color)
    28. {
    29.     int x,y,p;
    30.     x=0; y=r;
    31.     p=3-2*r;
    32.     put8pixel(x,y,xr,yr,color);
    33.     while(x<y)
    34.     {
    35.         x=x+1;
    36.         if (p<0)   p=p+4*x+6;
    37.         else
    38.         {
    39.             p=p+4*(x-y)+10;
    40.             y=y-1;
    41.         }
    42.         put8pixel(x,y,xr,yr,color);
    43.     }
    44.  
    45.  
    46. }
    47.  
    48.  
    49. // Thuat toan ve duong thang
    50. void B_Line(int x1,int y1, int x2, int y2, int c)
    51. {
    52.     if(x1 == x2)
    53.  {
    54.   int i;
    55.   if(y1 < y2)
    56.    for(i = y1; i <= y2;i ++)
    57.     {
    58.      putpixel(x1,i,c);          //delay(10);
    59.     }
    60.   else
    61.    for(i = y2; i<= y1; i ++)
    62.     {
    63.      putpixel(x1,i,c);          //delay(10);
    64.     }
    65.  }
    66.  if(y1 == y2)
    67.  {
    68.   int i;
    69.   if(x1 < x2)
    70.    for(i = x1; i <= x2; i ++)
    71.    {
    72.      putpixel(i,y1,c);//delay(10);
    73.    }
    74.   else
    75.    for(i = x2; i <= x1; i ++)
    76.    {
    77.      putpixel(i,y1,c);       //delay(10);
    78.     }
    79.  }
    80.  if(x1 < x2)
    81.  {
    82.     if(y1 < y2)
    83.     {
    84.   if((y2 - y1)/(x2-x1) < 1)
    85.   {
    86.    int i;
    87.    int Dx = x2 - x1;
    88.    int Dy = y2 - y1;
    89.    int p = 2*Dy - Dx;
    90.    putpixel(x1,y1,c);
    91.     for(i = x1; i < x2; i ++)
    92.    {
    93.     if(p < 0)
    94.      p += 2*Dy;
    95.     else
    96.     {
    97.      p += 2*(Dy - Dx);
    98.      y1 ++;
    99.     }
    100.     x1 ++;
    101.      putpixel(x1,y1,c);        //delay(10);
    102.     }
    103.   }
    104.   else
    105.   {
    106.    int i;
    107.    int Dx = x2 - x1;
    108.    int Dy = y2 - y1;
    109.    int p = 2*Dx - Dy;
    110.    putpixel(x1,y1,c);
    111.    for(i = y1; i < y2; i ++)
    112.    {
    113.     if(p < 0)
    114.      p += 2*Dx;
    115.     else
    116.     {
    117.       p += 2*(Dx - Dy);
    118.      x1 ++;
    119.     }
    120.     y1 ++;
    121.      putpixel(x1,y1,c);          //delay(10);
    122.    }
    123.   }
    124.      }
    125.      if(y1 > y2)
    126.      {   if((y2 - y1)/(x2 - x1)> -1 )
    127.   {
    128.    int i;
    129.    int Dx = x2 - x1;
    130.     int Dy = y2 - y1;
    131.    int p = 2*Dy + Dx;
    132.    putpixel(x1,y1,c);
    133.    for(i = x1; i <= x2; i ++)
    134.    {
    135.     if(p > 0)
    136.      p += 2*Dy;
    137.     else
    138.     {
    139.      p += 2*(Dy + Dx);
    140.      y1-- ;
    141.     }
    142.     x1 ++;
    143.      putpixel(x1,y1,c);       //delay(10);
    144.    }
    145.    }
    146.    else
    147.    {
    148.    int i;
    149.    int Dx = x2 - x1;
    150.    int Dy = y2 - y1;
    151.    int p = 2*Dx + Dy;
    152.    putpixel(x1,y1,c);
    153.    for(i = y1; i >= y2; i --)
    154.    {
    155.     if(p < 0)
    156.       p += 2*Dx;
    157.     else
    158.     {
    159.      p += 2*(Dx + Dy);
    160.      x1++ ;
    161.     }
    162.     y1 --;
    163.      putpixel(x1,y1,c);      //delay(10);
    164.    }
    165.    }
    166.      }
    167.  }
    168.  if(x1 > x2)
    169.  {
    170.   if(y1 < y2)
    171.     { if((y2-y1)/(x2-x1) > -1)
    172.    {
    173.    int i;
    174.    int Dx = x2 - x1;
    175.    int Dy = y2 - y1;
    176.    int p = -2*Dy - Dx;
    177.    putpixel(x1,y1,c);
    178.    for(i = x1; i > x2; i --)
    179.    {
    180.     if(p < 0)
    181.     {
    182.       p=p - 2*Dy - 2*Dx;
    183.      y1 ++;
    184.     }
    185.     else
    186.      p =p -  2*Dy;
    187.     x1 --;
    188.      putpixel(x1,y1,c);//delay(10);
    189.    }
    190.          }
    191.          else
    192.          {
    193.    int i;
    194.    int Dx = x2 - x1;
    195.     int Dy = y2 - y1;
    196.    int p = -2*Dx - Dy;
    197.    putpixel(x1,y1,c);
    198.    for(i = y1; i < y2; i ++)
    199.    {
    200.     if(p < 0)
    201.      p -= 2*Dx;
    202.     else
    203.     {
    204.      p -= 2*(Dx + Dy);
    205.      x1 --;
    206.     }
    207.     y1 ++;
    208.      putpixel(x1,y1,c);   //delay(10);
    209.    }
    210.       }
    211.   }
    212.       if(y1 > y2)
    213.          {
    214.          if((y2-y1)/(x2-x1) < 1)
    215.          {
    216.    int i;
    217.    int Dx = x2 - x1;
    218.    int Dy = y2 - y1;
    219.    int p = 2*Dy - Dx;
    220.    putpixel(x1,y1,c);
    221.     for(i = x1; i > x2; i --)
    222.    {
    223.     if(p > 0)
    224.     {
    225.      p =p - 2*Dy +2*Dx ;
    226.      y1--;
    227.     }
    228.     else
    229.  
    230.      p -= 2*Dy;
    231.  
    232.  
    233.     x1 --;
    234.      putpixel(x1,y1,c);             //delay(10);
    235.    }
    236.    }
    237.    else
    238.         {
    239.    int i;
    240.    int Dx = x1 - x2;
    241.    int Dy = y1 - y2;
    242.    int p = 2*Dx + Dy;
    243.    putpixel(x1,y1,c);
    244.    for(i = y1; i > y2; i --)
    245.    {
    246.     if(p < 0)
    247.               {
    248.       p =p - 2*Dx + 2*Dy  ;
    249.       x1 --;
    250.       }
    251.      else
    252.         p =p - 2*Dx  ;
    253.      y1 --;
    254.      putpixel(x1,y1,c);//          delay(10);
    255.    }
    256.   }
    257.  
    258.      }
    259.  }
    260. }
    261.  
    262.  
    263.  
    264. void mattroi()
    265. {
    266.     setcolor(YELLOW);
    267.     setfillstyle(SOLID_FILL, YELLOW);
    268.     fillellipse(500,30,30,30);
    269.  
    270. }
    271.  
    272.  
    273.  
    274. void ungdung(int vitritau) // Ve Tau
    275. {
    276.     //Than Tau
    277.     B_Line(300+vitritau,300,100+vitritau,300,WHITE);
    278.     B_Line(300+vitritau,300,400+vitritau,250,WHITE);
    279.     B_Line(400+vitritau,250,300+vitritau,250,WHITE);
    280.     B_Line(300+vitritau,250,290+vitritau,260,WHITE);
    281.     B_Line(290+vitritau,260,100+vitritau,260,WHITE);
    282.     B_Line(100+vitritau,300,100+vitritau,260,WHITE);
    283.     //Cot Buom
    284.     B_Line(100+vitritau,260,270+vitritau,100,WHITE);
    285.     B_Line(270+vitritau,100,400+vitritau,250,WHITE);
    286.     //Boom
    287.     B_Line(150+vitritau,260,165+vitritau,245,WHITE);
    288.     B_Line(165+vitritau,245,165+vitritau,230,WHITE);
    289.     B_Line(165+vitritau,230,340+vitritau,230,WHITE);
    290.     B_Line(340+vitritau,230,340+vitritau,250,WHITE);
    291.     B_Line(185+vitritau,230,185+vitritau,210,WHITE);
    292.     B_Line(185+vitritau,210,310+vitritau,210,WHITE);
    293.     B_Line(310+vitritau,210,340+vitritau,230,WHITE);
    294.     //Ong khoi
    295.     B_Line(220+vitritau,210,220+vitritau,160,WHITE);
    296.     B_Line(220+vitritau,160,250+vitritau,160,WHITE);
    297.     B_Line(250+vitritau,160,250+vitritau,210,WHITE);
    298.     //Dai quan sat
    299.     B_Line(250+vitritau,180,290+vitritau,180,WHITE);
    300.     B_Line(290+vitritau,180,290+vitritau,210,WHITE);
    301.     B_Line(270+vitritau,180,270+vitritau,100,WHITE);
    302.     //Cua so
    303.  
    304.     //Khoi
    305.     B_Line(225+vitritau,155,225+vitritau,145,WHITE);
    306.     B_Line(235+vitritau,155,235+vitritau,145,WHITE);
    307.     B_Line(245+vitritau,155,245+vitritau,145,WHITE);
    308. }
    309.  
    310. //Main
    311. void main()
    312. {
    313.     int gr_drive = DETECT, gr_mode;
    314.     initgraph(&gr_drive, &gr_mode, "C:\\TC\\BGI");
    315.  
    316.  
    317.     for (int vitritau=-100;vitritau<=250;vitritau+=20)
    318.     {
    319.         cleardevice();
    320.         mattroi();
    321.         ungdung(vitritau);
    322.         delay(500);
    323.     }
    324.  
    325.     setwritemode(0);
    326.  
    327.     getch();
    328.     closegraph();
    329. }
    Đã được chỉnh sửa lần cuối bởi meoconlongvang : 08-12-2008 lúc 10:39 PM.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  3. #3
    No Avatar
    hoake Khách

    Hì !
    Cảm ơn bạn nhé, sau mình nghiên cứu thêm. À tiện đây bạn cho mình hỏi thuật toán tô màu theo vết dầu loang với, mình có code của cô giáo cho nhưng mà chỉ tô đc với những hình bé, còn những hình to hơn thì bị lỗi. Đây là code mình đang test.
    Code:
    #include <graphics.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <conio.h>
    void put4pixel(int Xc,int Yc,int X,int Y,int color)
    {
    	putpixel(Xc+X,Yc+Y,color);
    	putpixel(Xc+X,Yc-Y,color);
    	putpixel(Xc-X,Yc+Y,color);
    	putpixel(Xc-X,Yc-Y,color);
    }
    void Bre_Ellipse(int xc,int yc,int a,int b,int color)
    {
           /*......ve khi x tang deu va y giam cham .....*/
    	int x,y;
    	long p;
    	long u=(long)a*a;
    	long v=(long)b*b;
    	long uv=2*u;
    	long vu=2*v;
    	x=0;
    	y=b;
    	p=u-2*u*b+2*v;
    	put4pixel(xc,yc,x,y,color);
    while(u*y>v*x)
    {
    	if(p>=0)
    	{
    		p+=vu*(2*x+3)-uv*(2*y-2);
    		y--;
    	}
    	else
    		p+=vu*(2*x+3);
    		x++;
    		put4pixel(xc,yc,x,y,color);
    
    }
          /*....ve khi y tang deu va x giam cham ......*/
    	x=a;
    	y=0;
    	p=v-2*v*a+2*u;
    	put4pixel(xc,yc,x,y,color);
    while(u*y<=v*x)
    {
    	if(p>=0)
    	{
    		p+=uv*(2*y+3)-vu*(2*x-2);
    		x--;
    	}
    	else
    		p+=uv*(2*y+3);
    		y++;
    		put4pixel(xc,yc,x,y,color);
    
    }
    
    }
    
    void mauloang(int x,int y,int mauto,int mauvien)
    {
       int maudiem;
       maudiem=getpixel(x,y);
       if(maudiem!=mauto && maudiem!=mauvien)
         {
          putpixel(x,y,mauto);
          mauloang(x-1,y,mauto,mauvien);
          mauloang(x+1,y,mauto,mauvien);
          mauloang(x,y-1,mauto,mauvien);
          mauloang(x,y+1,mauto,mauvien);
         }
    
    
    }
    void main
    
    {
    
       int gdriver = DETECT, gmode, errorcode;
    
       initgraph(&gdriver, &gmode, "..\\BGI");
    
       errorcode = graphresult();
    
       if (errorcode != grOk)
       {
          printf("Graphics error: %s\n", grapherrormsg(errorcode));
          printf("Press any key to halt:");
          getch();
          exit(1);
       }
       Bre_Ellipse(200,200,200,100,RED);
       mauloang(200,200,BLUE,RED);
       getch();
       closegraph();
    
    }
    Đây là phần cô giáo cho
    Code:
    void mauloang(int x,int y,int mauto,int mauvien)
    {
       int maudiem;
       maudiem=getpixel(x,y);
       if(maudiem!=mauto && maudiem!=mauvien)
         {
          putpixel(x,y,mauto);
          mauloang(x-1,y,mauto,mauvien);
          mauloang(x+1,y,mauto,mauvien);
          mauloang(x,y-1,mauto,mauvien);
          mauloang(x,y+1,mauto,mauvien);
         }
    
    
    }

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