如何用C绘制椭圆?

时间:2017-03-07 19:00:51

标签: c

我想绘制一个椭圆,但它不像我绘制的椭圆。 你可以看到我的椭圆。

我应该改变哪些事情? 简而言之,如何画出一个好的椭圆?

在代码中没有错误。

那是我的代码:

#include <stdio.h>
void Circle(int radius);



int main(void){
    int radius;
    Circle(5);
}


void Circle(int radius)
{
    int star,space;
    int i;
    int j;
    star=1;
    space=radius-1;

    for(i=1;i<=radius;i++)
    {
        for(j=1;j<=space;j++){
              printf(" ");
         }
        for(j=1;j<=star;j++){
              printf("*");
         }
        space--;
        star+=2;
        printf("\n");
    }
    star-=4;


    for(i=1;i<radius;i++)
    {
        for(j=1;j<=i;j++){
              printf(" ");
        }
        for(j=1;j<=star;j++){
              printf("*");
        }
        star-=2;
        printf("\n");
    }
}

1 个答案:

答案 0 :(得分:0)

您的圈子功能应如下所示:您的功能的肉和土豆是sqrt((j-(k)/2)*(j-(k)/2) + (i-(k)/2)*(i-(k)/2))<=radius。如果你采用了高级数学,这个公式看起来应该很熟悉。 k是表面,可以调整。

它基本上绘制了你的50x50表面积(或者k是什么)。 x,y是沿着平面的不同点。

(X-中心)^ 2 +(Y-中心)^ 2'=半径

void Circle(int radius) {
    int i,j;
    int k = 50;
    for (i=0; i<k; i++) {
        for (j=0; j<k; j++) {
            if(sqrt((j-(k)/2)*(j-(k)/2) + (i-(k)/2)*(i-(k)/2))<=radius)
                printf("*"); //meets criteria print *
            else
                printf(" "); //blank space
        }
        printf("\n");
    }
}

半径为20:

                     *                        
               *************                  
             *****************                
           *********************              
         *************************            
        ***************************           
       *****************************          
      *******************************         
     *********************************        
     *********************************        
    ***********************************       
    ***********************************       
   *************************************      
   *************************************      
  ***************************************     
  ***************************************     
  ***************************************     
  ***************************************     
  ***************************************     
  ***************************************     
 *****************************************    
  ***************************************     
  ***************************************     
  ***************************************     
  ***************************************     
  ***************************************     
  ***************************************     
   *************************************      
   *************************************      
    ***********************************       
    ***********************************       
     *********************************        
     *********************************        
      *******************************         
       *****************************          
        ***************************           
         *************************            
           *********************              
             *****************                
               *************                  
                     *                        

如果您不想使用math.h,您可以定义自定义sqrt:

double sqrt(float number)
{
    double precision = 0.001;
    double s = number;

    while ((s - number / s) > precision) {
        s = (s + number / s) / 2;
    }
    return s;
}