: コードは次のように見ることができます:xは左から右に増加し、yは垂直上向きに増加する。すべての点は、(x_coord, y_coord)
という形の長さ2のタプルとして表されます。あなたの角度を度で指定されている場合
import math
def rotate(origin, point, angle):
"""
Rotate a point counterclockwise by a given angle around a given origin.
The angle should be given in radians.
"""
ox, oy = origin
px, py = point
qx = ox + math.cos(angle) * (px - ox) - math.sin(angle) * (py - oy)
qy = oy + math.sin(angle) * (px - ox) + math.cos(angle) * (py - oy)
return qx, qy
することは、あなたが最初にmath.radians
を使用してラジアンに変換することができます。時計回りの場合は、角度を無効にします。
例:10度の角度で(2, 2)
反時計回りの原点を中心点(3, 4)
回転:
>>> point = (3, 4)
>>> origin = (2, 2)
>>> rotate(origin, point, math.radians(10))
(2.6375113976783475, 4.143263683691346)
注意するいくつかの明白な繰り返し計算がrotate
関数でありますこと:math.cos(angle)
とmath.sin(angle)
各回計算され、 px - ox
とpy - oy
です。私はそれを必要に応じて除外するためにあなたに任せます。
これはC++ですが、まったく同じ問題です。https://stackoverflow.com/questions/2259476/rotating-a-point-about-another-point-2d – CoryKramer
コードを表示してください。 Pythonでは 'point 'の定義はないので、明確にする必要があります。 – iled
回転は1行のコードです。しかし:2Dまたは3D、ポイントの定義方法、回転角度(3Dの場合)などを定義する方法は?これは最初から書き込むと、あなたのユースケースにはまったく合致しないボイラープレートがたくさんあります。 – tom10