三角関数を使って物体が三角形を描くように動かそう
今回は物体が正三角形を描くように動かしてみましょう。
以下の図のように、角度を120度ずつずらして物体を移動させます。
三角形を描くように物体を動かすプログラム
物体が正三角形を描くように動かすプログラムは、以下のようになります。
指定したドット数分移動したら角度を120度ずらして、また指定したドット数分移動します。
以降はこれの繰り返しです。
座標をサイン、コサインを使って計算すると1以下の小数になってしまいますが、Rectプロパティは小数に対応していません。
そのため、一旦変数に座標の計算結果を代入してからRectプロパティに座標を設定しています。
また、座標(0,0)が左上なので、物体が上に移動するとY座標が小さくなっていくため、Y座標の値はサインで得た値で減算しています。
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 64 65 66 67 68 69 70 |
### インポート import sys import math import pygame from pygame.locals import * ### 定数 WIDTH = 640 # 幅 HEIGHT = 400 # 高さ SIZE = 20 # 辺長 POS_X = 170 # 初期X座標 POS_Y = 310 # 初期Y座標 ### モジュール初期化 pygame.init() ### 時間オブジェクト生成 clock = pygame.time.Clock() ### 画面設定 surface = pygame.display.set_mode((WIDTH,HEIGHT)) ### 四角形作成 rect = pygame.Rect(POS_X, POS_Y, SIZE, SIZE) ### 角度初期値 angle = 0 ### 座標初期値 pos_x = POS_X pos_y = POS_Y ### 無限ループ while True: ### 辺長分ループ for tmp in range(300-SIZE): ### 画面初期化 surface.fill((0,0,0)) ### 四角形描画 surface.fill((255,255,255), rect) ### 四角形の位置設定 rect.left = round(pos_x) rect.top = round(pos_y) ### 画面更新 pygame.display.update() ### フレームレート設定 clock.tick(100) ### 四角形の位置計算 pos_x += math.cos(math.radians(angle)) pos_y -= math.sin(math.radians(angle)) ### イベント処理 for event in pygame.event.get(): if event.type == KEYDOWN and event.key == K_ESCAPE: ### 終了処理 pygame.quit() sys.exit() ### 角度変更 angle += 120 if angle == 360: angle = 0 |
プログラムを実行すると、物体が正三角形を描くように移動します。