クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

座標と回転、向きの表し方

このレッスンのあとで: 点の位置を座標で表し、原点を中心に回した点の新しい座標を求められる。

50分のレッスンコマンド3件JupyterLab データサイエンスラボ:pandas、Matplotlib、scikit-learn をブラウザーで

位置と向きを数で表す

座標は、ものの位置を数の組で表す方法です。ロボットアームを動かす計算は、手先がどこにあり、どちらを向くかを、座標と角度で表すことから始まります。

このモジュールの動きは、すべてコンピュータの中のシミュレーションです。実際のロボットは動かしません。

このレッスンのゴール

メモ

点の位置を座標で表し、原点を中心に回した点の新しい座標を求められる。

キーワード

ことばいみ
座標位置を表す数の組。(x, y) と書く
原点座標が (0, 0) の基準の点
角度どれだけ回ったかを表す数。単位は度
回転原点を中心に、点を角度だけ回すこと
ラジアン角度のもう1つの単位。180度は約3.14
向きものが、どちらを向いているか

学生が入力するセルは、このプレビューでは空白です。

位置は x と y の2つの数

平面の上の点は、座標 (x, y) で表します。x は原点から右へ、y は上へ進んだ長さです。原点は (0, 0) です。

原点から点までの距離は、直角三角形の斜めの辺として求まります。向きは、x 軸から左回りに測った角度で表します。

例: 点の距離と向き

点原点からの距離向き(x 軸から)
(5, 0)50度
(0, 2)290度
(-4, 0)4180度
(3, 4)5約 53.13度

学生が入力するセルは、このプレビューでは空白です。

距離と向きはコマンドで確かめる

np.hypot(x, y) は原点までの距離を、np.arctan2(y, x) は向きを返します。向きは、ラジアンという単位で返るので、np.degrees で度に直します。

点 (3, 4) の距離と向き

コマンド
docker exec jupyter python3 -c "import numpy as np; print(np.hypot(3, 4), round(np.degrees(np.arctan2(4, 3)), 2))"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

回転すると、距離は変わらず向きだけ変わる

点を原点のまわりに a 度回すと、原点からの距離は同じで、向きだけ a 度増えます。新しい座標は、次の2つの式で求まります。

新しい x は「x × cos a − y × sin a」、新しい y は「x × sin a + y × cos a」です。cos と sin は、角度から決まる数です。

例: 点を回した結果

もとの点回す角度回したあと
(1, 0)90度(0, 1)
(1, 0)180度(-1, 0)
(2, 1)90度(-1, 2)
(0, 3)-90度(3, 0)

学生が入力するセルは、このプレビューでは空白です。

Python の cos と sin はラジアンで受け取る

Python の cos と sin は、度ではなくラジアンで角度を受け取ります。180度が約 3.14159 ラジアンです。

度からラジアンへは math.radians で変えます。この教材で言葉に出てくる角度は、すべて度です。

180度は何ラジアンか

コマンド
docker exec jupyter python3 -c "import numpy as np; print(np.radians(180))"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

点 (2, 1) を90度回す

コマンド
docker exec jupyter python3 -c "import numpy as np; a = np.radians(90); print(round(2 * np.cos(a) - 1 * np.sin(a), 3), round(2 * np.sin(a) + 1 * np.cos(a), 3))"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

回転を Python で書く

コード: python
import math
# 点 (3, 0) を、原点を中心に 60 度回します。
x = 3
y = 0
angle = 60
a = math.radians(angle)
new_x = x * math.cos(a) - y * math.sin(a)
new_y = x * math.sin(a) + y * math.cos(a)
print(round(new_x, 3), round(new_y, 3))
# angle を 180 に変えて、もう一度実行します。
# 点はどこへ動きますか。

よくある間違い

注意

度のまま cos や sin に渡すと考えがちです。実際は、ラジアンで渡す決まりです。90度を渡したつもりでも、90ラジアンとして計算されます。必ず math.radians で変えます。

このラボとソースについて: JupyterLab データサイエンスラボ:pandas、Matplotlib、scikit-learn をブラウザーで

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。