2017-03-07 108 views
-4

我想绘制一个椭圆,但它不像我绘制的椭圆。 你可以看到我的椭圆。如何用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"); 
    } 
} 
+0

R^2 =(X - x_bias)^ 2 +(Y - y_bias)^ 2 ==> Y = y_bias±√(R^2-(X - x_bias)^ 2) – BLUEPIXY

+0

这已经是b作为一个重复关闭两次(http://stackoverflow.com/questions/42612311/how-can-i-shift-right-my-equilateral-quadrangle-on-terminal-with-ci-am-beginne)两次使这个一式三份。我们可以摆脱这个职位(和dups)吗? – KevinDTimm

回答

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; 
} 
+0

@myname这似乎是一个非常武断的限制。如果这是作业的一部分,或者你需要这样做的话,那么你应该在问题中提及这个问题。 –

+0

@AololSoftware你可以在没有sqrt的情况下解决问题吗?我不想使用数学库。 – myname

+0

@myname如果你不想使用数学库,你可以定义一个sqrt类似的函数吗? – ApolloSoftware