0

我需要能够基于多个圆圈生成形状。例如:如果我想在一个正方形周围放 8 个圆圈,如何计算要接触每个周围圆圈的正方形的大小。圆形或椭圆形的问题相同。

我尝试添加一些 ascii 格式的图像,不确定是否清晰。

                                        

                     @@@@@ @@@@@                    
                   @@@@@@@@@@@@@@@@@@@@@                  
                  @@@@@ @@@@@@ @@@@@@ @@@@@                 
                 @@@@ @@@@ @@@@ @@@@                
                @@@@ @@@@@@@ @@@@               
                @@@ @@@@@ @@@               
               @@@ @@@ @@@              
               @@@ @@@ @@@              
               @@ @@@ @@              
               @@@ @@@ @@@              
               @@@ @@@ @@@              
                @@ @@@@@ @@               
         @@@@@ @@@ @@@@@ @@@ @@@@@        
      @@@@@@@@@@@@@@@@@ @@@ @@@@@@@@@@@@@@     
     @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@    
    @@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@   
    @@@ @@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@  
   @@@ @@@,,,,,,,,,,,,,,,,,,,,,,, @@@ @@@  
   @@@ @@@, ,@@@ @@  
   @@ @@, ,@@@ @@  
   @@ @@, ,@@ @@  
   @@ @@, ,@@@ @@  
   @@ @@, ,@@@ @@  
   @@@ @@@, , @@ @@@  
   @@@@ @@@@, , @@@ @@@  
    @@@@ @@@@ , , @@@@ @@@   
     @@@@ @@@@ , , @@@@ @@@@@   
      @@@@@@@@@@@ , , @@@@@@@@@@@@@    
       @@@@@@@@@ , , @@@@@@@@@@      
      @@@@@@@@@@@ , , @@@@@@@@@@@@@    
     @@@@ @@@@ , , @@@@ @@@@@   
    @@@@ @@@@ , , @@@@ @@@   
   @@@@ @@@@, , @@@ @@@  
   @@@ @@@, , @@ @@@  
   @@ @@, ,@@@ @@  
   @@ @@, ,@@@ @@  
   @@ @@, ,@@ @@  
   @@ @@, ,@@@ @@  
   @@@ @@@,,,,,,,,,,,,,,,,,,,,,,,@@@ @@  
   @@@ @@@@@@@@@@@ @@@@@@@@@@@@@@@  
    @@@ @@@@@@@@@@@@@ @@@@@@@@@@@@@@ @@@@  
    @@@@ @@@@@@@ @@@@ @@@@ @@@@@@@@@@@@@   
     @@@@@@ @@@@@@@@@@@@ @@@@ @@@@@@@@ @@@@@@    
      @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@     
         @@@@@ @@ @@@@@ @@ @@@@@        
               @@@ @@@ @@@              
               @@@ @@@ @@@              
               @@ @@@ @@              
               @@@ @@@ @@@              
               @@@ @@@ @@@              
                @@ @@@@@ @@               
                @@@ @@@@@@@ @@@               
                @@@@ @@@@ @@@@ @@@@               
                 @@@@@ @@@@ @@@@ @@@@@                
                  @@@@@@@@@@@ @@@@@@@@@@@@                 
                    @@@@@@@@@@@@@@@@                   

圆形而不是中间的正方形应该是相同的。

谢谢你的帮助。

4

2 回答 2

2

如果正方形是 1x1 并且 r 是圆的半径,那么您可以证明以下等式必须成立:

2r + 1 = 2r/sqrt(2) + 2r + 2r/sqrt(2)            (*)

一个小代数表明 r = sqrt(2) / 4 ~ 0.354。

由此很容易得到圆的中心。我会让你弄清楚的。

这是一个用这个大小为圆圈制作的图表,它还显示了如何获得 (*):

显示如何获得 (*) 的图表

如果您有所有相同大小的椭圆,只需按其一侧的纵横比缩放问题。

于 2013-10-22T04:51:53.923 回答
0

感谢大家的回答,我想出了如何为这个问题生成 python 代码。

以下生成请求的形状

   import sys
   import pygame
   import math
   
   pygame.init()
   
   #create the screen
   window = pygame.display.set_mode((640, 480))
  
   n=15; #n satellites
   r=20; #radius of a satellite
   R= abs( (2*r) / (2*(math.sin(math.pi/n))) ); # circumradius of the regular polygon.
   a=360/n; #rotating angle for vertex
   color = (255, 255, 255);
 
    
  #input handling (somewhat boilerplate code):
  while True:
      for event in pygame.event.get():
          if event.type == pygame.QUIT:
              sys.exit(0)
          if event.type == pygame.MOUSEBUTTONUP:
              mpos = pygame.mouse.get_pos();
              mx, my = event.pos
              for angle in range(0, 361):
                  theta = math.radians(angle)
                  x = R * math.cos(theta)
                  y = R * math.sin(theta)
                  print "Theta = "+str(theta)
                  if (angle % int(a) == 0):
                      pygame.draw.circle(window, color, (int(mx+x),int(my+y)), r,1);
              pygame.draw.circle(window, color, (mx,my), int(R-r),1);
              pygame.display.flip();

在此处输入图像描述

于 2013-10-25T05:44:13.140 回答