三角関数を使って物体を目標に向かって移動させよう
今回はスタート地点からゴール地点に向かって移動させてみましょう。
座標(0,0)からスタートして、ゴール地点の座標(620,380)まで移動します。
座標(0,0)と座標(620,380)の角度を、mathライブラリーのatan2()を使って計算します。
atan2()の戻り値はラジアンです。
math.atan2(Y座標, X座標)
目標に向かって移動するプログラム
スタートとゴールの座標の角度を計算して、そこから斜線の長さをコサインを使って取得します。
物体は斜線に沿って移動するイメージになります。
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 |
### インポート import sys import math import pygame from pygame.locals import * ### 定数 WIDTH = 640 # 幅 HEIGHT = 400 # 高さ SIZE = 20 # 辺長 GOAL_X = WIDTH -SIZE # ゴールX座標 GOAL_Y = HEIGHT-SIZE # ゴールY座標 ### モジュール初期化 pygame.init() ### 時間オブジェクト生成 clock = pygame.time.Clock() ### 画面設定 surface = pygame.display.set_mode((WIDTH,HEIGHT)) ### 四角形作成 rect = pygame.Rect(0, 0, SIZE, SIZE) ### ゴール作成 font = pygame.font.SysFont("hg丸ゴシックmpro", SIZE, bold=True) text = font.render("G", True, (255,0,0), (0,0,0)) ### 角度取得 angle = math.atan2(GOAL_Y, GOAL_X) ### 斜線長取得 bias = int(GOAL_X/math.cos(angle)) ### 無限ループ while True: ### 斜線移動 for pos in range(bias): ### 画面初期化 surface.fill((0,0,0)) ### ゴール描画 surface.blit(text, (GOAL_X,GOAL_Y)) ### 四角形の位置 rect.left = round(math.cos(angle)*pos) rect.top = round(math.sin(angle)*pos) ### 四角形描画 surface.fill((255,255,255), rect) ### 画面更新 pygame.display.update() ### フレームレート設定 clock.tick(100) ### イベント処理 for event in pygame.event.get(): if event.type == KEYDOWN and event.key == K_ESCAPE: ### 終了処理 pygame.quit() sys.exit() |
プログラムを実行すると、物体が目標に向かって移動します。