三角関数を使って物体を楕円軌道で動かそう
前回は物体を円軌道で動かしました。
今回は物体を楕円軌道で動かしてみましょう。
物体の軌道を楕円にするは、半径を長半径と短半径に分けるだけです。
物体を楕円形で動かすプログラム
物体が楕円を描くように動かすプログラムは、以下のようになります。
前回のプログラムを物体の動きが楕円になるように、X座標の半径を長半径、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 |
### インポート import math import pygame from pygame.locals import * ### 定数 WIDTH = 640 # 幅 HEIGHT = 400 # 高さ L_RAD = 300 # 長半径 S_RAD = 180 # 短半径 SIZE = 20 # 辺長 CENTER = int(WIDTH/2),int(HEIGHT/2) ### モジュール初期化 pygame.init() ### 時間オブジェクト生成 clock = pygame.time.Clock() ### 画面設定 surface = pygame.display.set_mode((WIDTH,HEIGHT)) ### 四角形作成 rect = pygame.Rect(0, 0, SIZE, SIZE) ### 角度初期値 angle = 0 ### 無限ループ while True: ### 画面初期化 surface.fill((0,0,0)) ### 四角形の位置 rect.left = round(math.cos(math.radians(angle))*L_RAD+CENTER[0]-SIZE/2) rect.top = round(math.sin(math.radians(angle))*S_RAD+CENTER[1]-SIZE/2) ### 四角形描画 surface.fill((255,255,255), rect) ### 画面更新 pygame.display.update() ### フレームレート設定 clock.tick(60) ### 角度加算 angle += 1 ### 角度初期化 if angle >= 360: angle = 0 ### イベント処理 for event in pygame.event.get(): if event.type == KEYDOWN and event.key == K_ESCAPE: break else: continue ### whileループ終了 break ### 終了処理 pygame.quit() |
プログラムを実行すると、物体が楕円を描くように移動します。