三角関数を使って線分を動かそう
前回は三角関数を使って計算した値を元に線分を表示しましたが、今回はその線分を動かしてみましょう。
3時の方向から反時計回りに線分が動くプログラム
以下のプログラムは、初期角度を0にしているため、線分は3時の方向(X:180,Y:0)からスタートします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
### インポート import math import pygame from pygame.locals import * ### 定数 WIDTH = 400 # 幅 HEIGHT = 400 # 高さ RADIUS = 180 # 半径 CENTER = int(WIDTH/2),int(HEIGHT/2) ### モジュール初期化 pygame.init() ### 時間オブジェクト生成 clock = pygame.time.Clock() ### 画面設定 surface = pygame.display.set_mode((WIDTH,HEIGHT)) ### 初期角度 angle = 0 ### 無限ループ while True: ### 画面初期化 surface.fill((0,0,0)) ### 円表示 pygame.draw.circle(surface, (255,0,0), (CENTER), RADIUS, 2) ### 線の終端位置 pos_x = round(math.cos(math.radians(angle))*RADIUS) pos_y = round(math.sin(math.radians(angle))*RADIUS) ### 線表示 pygame.draw.line(surface, (255,255,255), (CENTER), (CENTER[0]+pos_x,CENTER[1]-pos_y), 2) ### 画面更新 pygame.display.update() ### フレームレート設定 clock.tick(50) ### 角度計算 if angle > 359: angle = 0 else: angle += 1 ### イベント処理 for event in pygame.event.get(): if event.type == KEYDOWN and event.key == K_ESCAPE: break else: continue ### whileループ終了 break ### 終了処理 pygame.quit() |
プログラムを実行すると、線分が3時の方向から反時計回りに動きます。
0時の方向から時計回りに線分が動くプログラム
以下は0時からスタートして、時計回りに線分が動くプログラムです。
角度を90度にすると垂直になりますので、0時の方向(X:0,Y:180)に線分が表示されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
### インポート import math import pygame from pygame.locals import * ### 定数 WIDTH = 400 # 幅 HEIGHT = 400 # 高さ RADIUS = 180 # 半径 CENTER = int(WIDTH/2),int(HEIGHT/2) ### モジュール初期化 pygame.init() ### 時間オブジェクト生成 clock = pygame.time.Clock() ### 画面設定 surface = pygame.display.set_mode((WIDTH,HEIGHT)) ### 初期角度 angle = 90 ### 無限ループ while True: ### 画面初期化 surface.fill((0,0,0)) ### 円表示 pygame.draw.circle(surface, (255,0,0), (CENTER), RADIUS, 2) ### 線の終端位置 pos_x = round(math.cos(math.radians(angle))*RADIUS) pos_y = round(math.sin(math.radians(angle))*RADIUS) ### 線表示 pygame.draw.line(surface, (255,255,255), (CENTER), (CENTER[0]+pos_x,CENTER[1]-pos_y), 2) ### 画面更新 pygame.display.update() ### フレームレート設定 clock.tick(50) ### 角度計算 if angle < -269: angle = 90 else: angle -= 1 ### イベント処理 for event in pygame.event.get(): if event.type == KEYDOWN and event.key == K_ESCAPE: break else: continue ### whileループ終了 break ### 終了処理 pygame.quit() |
プログラムを実行すると、線分が0時の方向から時計回りに動きます。