Как решить ошибку ValueError, возникающую при рисовании круга со значением ширины, превышающим его радиус, в модуле pygame?

#python #pygame #border #valueerror

#python #pygame #граница #ошибка valueerror

Вопрос:

Я кодирую для моделирования преобразования Фурье. Здесь мне нужно нарисовать много эпициклов. У меня есть некоторые значения radius, которые меньше 1, например: 7×10 ^ -14, 0 и т.д. Итак, когда я рисую круги и присваиваю ширину границы 1, я получаю ошибку значения: ширина больше радиуса. Если я установлю ширину границы равной нулю, то круг будет заполнен цветом и будет выглядеть очень некрасиво. Итак, пожалуйста, покажите мне способ, как я могу нарисовать круг с границей и значениями радиуса меньше 1. Вот код:

 radius_list = [0.0, 8.539660890638339e-15, 66.66666666666669, 3.3275832379191784e-14, ` 
1.1234667099445444e-14, 2.534379764899661e-14, 33.333333333333336, 1.018719954857117e-14, 
2.0236265985141534e-14, 2.4825216024150285e-14, 66.66666666666674, 1.5953403096630258e-13`]

run = False

while not run:
    clock.tick(fps)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

    x = x_pos
    y = y_pos       
    
    for i in range(iteration):  
        
        prevx = x
        prevy = y

        frequency = freq_list[i]    
        radius = radius_list[i]
        phase = phase_list[i]
        print(radius)
            
        x = int(radius*math.cos((frequency*time)   phase   math.pi/2))
        y = int(radius*math.sin((frequency*time)   phase   math.pi/2))  
        
        **pygame.draw.circle(screen, white, (prevx, prevy), int(radius),1)**
  

Ответ №1:

[…] пожалуйста, покажите мне способ, как я могу нарисовать круг со значениями границы и радиуса меньше 1

Вы не можете. Единицей рисования в PyGame являются пиксели. PyGame не может нарисовать половину пикселя. Нет смысла рисовать что-то размером меньше 1, потому что PyGame не может этого сделать:

Убедитесь, что минимальный радиус равен 1:

 pygame.draw.circle(screen, white, (prevx, prevy), min(1, round(radius)), 1)
  

Все, что вы можете сделать, это пропустить круги с радиусом менее 0,5:

 if radius >= 0.5;
    pygame.draw.circle(screen, white, (prevx, prevy), min(1, round(radius)), 1)