0

私は時計のポインターと同じように動く線を描こうとしていますが、プログラムを実行すると線が20度のように動き、プログラムがフリーズし、それを読むことができます:「ValueError: math domain error」
はここにあります私が書いたコード:

import pygame
import sys
import time
import math

from pygame.locals import *
pygame.init()
windowSurface = pygame.display.set_mode((300, 600), 0, 32)
pygame.display.set_caption("circle_line")

BLACK = (0, 0, 0)
WHITE = (250, 250, 250)


R = 50
CIRCLE_LINE_START_X = 150
CIRCLE_LINE_START_Y = 300
CIRCLE_LINE_END_X = CIRCLE_LINE_START_X
CIRCLE_LINE_END_Y = CIRCLE_LINE_START_Y - R


MOVE_SPEED = 3




while True:
    for event in pygame.event.get(): 
        if event.type == QUIT: 
            pygame.quit() 
            sys.exit()



    if CIRCLE_LINE_END_X <= CIRCLE_LINE_START_X and CIRCLE_LINE_END_Y <= CIRCLE_LINE_START_Y :
        CIRCLE_LINE_END_X -= MOVE_SPEED
        CIRCLE_LINE_END_Y = math.sqrt(R**2 - ((CIRCLE_LINE_END_X - CIRCLE_LINE_START_X)**2)) + CIRCLE_LINE_START_Y

    if CIRCLE_LINE_END_X <= CIRCLE_LINE_START_X and CIRCLE_LINE_END_Y >= CIRCLE_LINE_START_Y :
        CIRCLE_LINE_END_X += MOVE_SPEED
        CIRCLE_LINE_END_Y = math.sqrt(R**2 - ((CIRCLE_LINE_END_X - CIRCLE_LINE_START_X)**2)) + CIRCLE_LINE_START_Y

    if CIRCLE_LINE_END_X >= CIRCLE_LINE_START_X and CIRCLE_LINE_END_Y >= CIRCLE_LINE_START_Y :
        CIRCLE_LINE_END_X += MOVE_SPEED
        CIRCLE_LINE_END_Y = math.sqrt(R**2 - ((CIRCLE_LINE_END_X - CIRCLE_LINE_START_X)**2)) + CIRCLE_LINE_START_Y

    if CIRCLE_LINE_END_X >= CIRCLE_LINE_START_X and CIRCLE_LINE_END_Y <= CIRCLE_LINE_START_Y :
        CIRCLE_LINE_END_X -= MOVE_SPEED
        CIRCLE_LINE_END_Y = math.sqrt(R**2 - ((CIRCLE_LINE_END_X - CIRCLE_LINE_START_X)**2)) + CIRCLE_LINE_START_Y




    windowSurface.fill(WHITE) 
    pygame.draw.line(windowSurface, BLACK, (CIRCLE_LINE_START_X, CIRCLE_LINE_START_Y), (CIRCLE_LINE_END_X, CIRCLE_LINE_END_Y), 3)

    pygame.display.update()
    time.sleep(0.02)

私の間違いを見つけるための助けをいただければ幸いです。

ありがとうございました。

4

2 に答える 2

3

このエラーは、負の数の平方根、具体的には の結果を計算しようとしているためですR**2 - ((CIRCLE_LINE_END_X - CIRCLE_LINE_START_X)**2)

ただし、円形の動きに基づいて何かを描画する場合は、という変数を使用して、DEGREES反復ごとにインクリメントすることをお勧めします。次に、 と を使用math.sinmath.cosて、角度に基づいて距離を計算できます。

于 2013-05-18T23:35:33.403 に答える