2014-02-07 5 views
0

나는 PyGraph를 호출하고있는 그래프 프로그램에 대해 연구 중이다. 당신은 어떤 크기의 그래프를 만들어 그 위에 그림을 그릴 수 있습니다. 그리고 나중에 개발할 때 좌표와 사물을 제공 할 것입니다.하지만 지금은 하나의 질문이 있습니다 : 원점을 나타 내기 위해 중심을 통과하는 교차 선을 어떻게 그릴 수 있습니까? 여기파이썬/파이 게임 : 그래프의 기원을 수학적으로 그리기?

는 내가 지금까지 무엇을 가지고 :

#pygraph 
import pygame 
from pygame.locals import * 

pygame.init() 
screen=pygame.display.set_mode((640,480)) 
x=0 
y=0 
size=16 
screen.fill((255,255,255)) 
pygame.draw.line(screen, (0,0,0), (screen.get_width()/2,0),(screen.get_width()/2,screen.get_height()),5) 
pygame.draw.line(screen, (0,0,0), (0,screen.get_height()/2),(screen.get_width(),screen.get_height()/2),5) 
while True: 
    while y<480: 
     pygame.draw.rect(screen,(0,0,0),(x,y,size,size),1) 
     if x>640: 
      x=0 
      y+=size 
      pygame.draw.rect(screen,(0,0,0),(x,y,size,size),1) 
     x+=size 
    for e in pygame.event.get(): 
     if e.type==QUIT: 
      exit() 
     if e.type==KEYUP: 
      if e.key==K_SPACE: 
       x=0 
       y=0 
       screen.fill((255,255,255)) 
       pygame.draw.line(screen, (0,0,0), (screen.get_width()/2,0),(screen.get_width()/2,screen.get_height()),5) 
       pygame.draw.line(screen, (0,0,0), (0,screen.get_height()/2),(screen.get_width(),screen.get_height()/2),5) 
       size=input('Enter size: ') 
    pygame.display.flip() 

선이 중심이지만 이동하지만, 모든 크기의 그래프 작동하지 않습니다. 나는 수학에서 최고가 아니지만, 이것이 명확하지 않다는 것을 희망한다. 어떤 충고?

답변

1

문제는 왼쪽 상단 모서리를 앵커로 사용하여 눈금을 그립니다. 즉, 모든 그리드 사각형은 왼쪽 상단에 하나의 모서리가 있습니다. 이것은 중심선과 화면 가장자리 사이의 거리가 크기로 나눌 수없는 경우 문제가됩니다. 예를 들어 640 단위의 선을 15의 짝수 구분으로 나눌 수 없습니다.

훨씬 더 나은 해결책은 센터를 앵커로 사용하는 것입니다. 기본적으로 모든 그리드 사각형은 그래프의 중앙에 하나의 코너를 가지고 있습니다. 즉, 중심선에서 "나머지"를 얻지 못할 것이고, 나머지는 그래프의 경계에있게 될 것입니다. 좋네.

다음 코드는 (원래 while y<480 루프를 교체해야합니다) 중심에 당신의 사각형을 고정하기위한 것입니다 :

while y<=480/2+size: 
    pygame.draw.rect(screen,(0,0,0),(640/2+x, 480/2+y,size,size),1) 
    pygame.draw.rect(screen,(0,0,0),(640/2-x, 480/2+y,size,size),1) 
    pygame.draw.rect(screen,(0,0,0),(640/2+x, 480/2-y,size,size),1) 
    pygame.draw.rect(screen,(0,0,0),(640/2-x, 480/2-y,size,size),1) 
    x+=size 
    if x>=640/2+size: 
     x=0 
     y+=size 

간략한 설명 : 나는 사각형 (당신은 파이 게임으로 통과 점의 앵커를 변경 .draw.rect)를 그래프의 중앙에 놓고 하나의 직사각형을 그리는 대신 그래프의 각 사분면에 4 개의 직사각형을 그립니다.

또한 if 문에서 pygame.draw.rect()를 호출 할 필요가 없도록 코드를 수정했습니다.

작은 스타일 팁 : 480 및 640을 "screen.width"및 "screen.height"로 바꾸면 문제없이 너비와 높이를 조정할 수 있습니다.

+0

와우, 나는 결코 그것을 이해하지 못했을 것이다. 고마워 :)하지만 그냥 질문, 내 원래 코드가됐다 .. 나쁜가요? –

+1

"좋은 코드"는 정의하기가 약간 어렵습니다. 코드가 올바르다는 의미에서 "좋은"코드입니다. 그러나 "다른 사람들을 이해하는 것이 얼마나 쉬운가"와 "코드를 개선하는 것이 얼마나 쉬운가"와 같이 코드에서 고려해야 할 다른 많은 것들이 있습니다. 코드에 대한 좋은 점 중 하나는 변수 이름, x, y 및 크기가 의미가 있으며 기억하기 쉽고 코드가 블록으로 구성되지 않아 읽기/후에. – icedtrees

+0

의견에 감사드립니다. 도와 줘서 고마워. –

관련 문제