为什么不能在命令行中打印非整数外摆线?

why cannot print non integer epicycloid in command line?

我想在命令行中打印外摆线:

import math
import sys
WIDTH=30
R=10.0
N=3.0
DELTA=0.01
pixels=[[0 for y in range(WIDTH)] for x in range(WIDTH)]
for f in range(0,(int)(2*math.pi/DELTA)):
    pixels[(int)(R*math.sin(f*DELTA)-R*math.sin((N+1)*f*DELTA)/(N+1)+WIDTH/2)][(int)(R*math.cos(f*DELTA)-R*math.cos((N+1)*f*DELTA)/(N+1)+WIDTH/2)]=1

for row in pixels:
    for cell in row:
        sys.stdout.write('[]' if cell==1 else '  ')
    sys.stdout.write('\n')

并用 N=3,7, 和 3.5 进行测试,当 N=3 和 7 时似乎有效:

N=3

                      [][][][][][][][]                  
                    [][]            [][][]              
                  [][]                  [][]            
                  []                      [][]          
          [][][][][]                        []          
      [][]      [][]                        []          
    [][]                                    [][]        
  [][]                                        []        
  []                                        [][]        
[][]                                        []          
[]                                          []          
[]                                      [][]            
[]                                      [][]            
[]                                          []          
[][]                                        []          
  []                                        [][]        
  [][]                                        []        
    [][]                                    [][]        
      [][][]    [][]                        []          
          [][][][][]                        []          
                  []                      [][]          
                  [][]                  [][]            
                    [][]              [][]              
                      [][][][][][][][]                  

N=7

                          [][][]                        
                      [][][]  [][][]                    
            [][][][][][]          [][]                  
          [][]      [][]            []                  
        [][]                        [][][]              
        []                          []  [][][]          
        []                                  [][]        
        []                                    []        
    [][][][]                                  []        
    []                                        []        
  [][]                                        []        
  []                                      [][][]        
  []                                      [][]          
  [][]                                        []        
    []                                        []        
      [][][]                                  []        
        []                                    []        
        []                                  [][]        
        []                          []  [][][]          
        [][]                        [][][]              
          [][]      [][]            []                  
            [][][][][][]          [][]                  
                      [][][]  [][][]                    
                          [][][]                        

但是当 N=3.5 时,形状不是我预期的(像星星一样):

                    [][][]                              
                [][][]    [][][]                        
            [][]              [][]                      
            []                  [][]                    
          []                      []                    
          []                      [][]                  
        [][]                      [][][][][]            
        [][]                              [][][]        
          []                                  []        
        [][]                                    []      
    [][][]                                      []      
    []                                          [][]    
  [][]                                            []    
  []                                    [][][]          
  []                                        []          
  []                                        [][]        
  []                                          []        
  []                                          []        
  [][]                                        []        
    [][]                                    []          
      [][]            []                    []          
        [][][]    [][][]                  []            
            [][][][]  [][]              [][]            
                        [][][]    [][][]                
                              [][][]                    

我查了这么久的公式,我的参数也是用float直到把结果转换成像素位置,但还是没发现哪里不对,谁能帮忙?

(我想用python来解决,但是我发现原来的java版本也有类似的问题,我什至不知道是哪一类问题(例如:公式错误,数字类型转换,或错误的代码)导致它)

当你有小数N=p/q时,你需要去2*q*math.pi。让我们探讨一下我的意思。

对于N=3.5,

parametric plot (sin(t)-sin(4.5t)/4.5 , cos(t)-cos(4.5t)/4.5) for t in [0,2pi]

Wolfram Alpha 中产生:

这与您的输出相似。

另一方面,[0,4pi] 的 upper limit 得到另一半:

最后,如果N为1/7,我们have to use[0,14pi]得到: