当前位置:  开发笔记 > 编程语言 > 正文

以度python旋转关于另一个点的点

如何解决《以度python旋转关于另一个点的点》经验,为你挑选了1个好方法。

如果你有一个点(在2d),你怎么能在python的另一个点(原点)周围旋转那个点?

例如,您可以将原点周围的第一个点倾斜10度.

基本上你有一个点PointA和它旋转的原点.代码看起来像这样:

PointA=(200,300)
origin=(100,100)

NewPointA=rotate(origin,PointA,10) #The rotate function rotates it by 10 degrees

Mark Dickins.. 51

以下rotate函数以笛卡尔平面周围point的角度angle(逆时针,以弧度表示)旋转点origin,使用通常的轴约定:x从左向右增加,y从垂直向上增加.所有点都表示为表单的长度为2的元组(x_coord, y_coord).

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.对于顺时针旋转,否定角度.

示例:(3, 4)围绕原点(2, 2)逆时针旋转10度角:

>>> point = (3, 4)
>>> origin = (2, 2)
>>> rotate(origin, point, math.radians(10))
(2.6375113976783475, 4.143263683691346)

请注意,rotate函数中有一些明显的重复计算:math.cos(angle)并且math.sin(angle)每个都计算两次,因为px - oxpy - oy.如果有必要,我留给你考虑一下.



1> Mark Dickins..:

以下rotate函数以笛卡尔平面周围point的角度angle(逆时针,以弧度表示)旋转点origin,使用通常的轴约定:x从左向右增加,y从垂直向上增加.所有点都表示为表单的长度为2的元组(x_coord, y_coord).

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.对于顺时针旋转,否定角度.

示例:(3, 4)围绕原点(2, 2)逆时针旋转10度角:

>>> point = (3, 4)
>>> origin = (2, 2)
>>> rotate(origin, point, math.radians(10))
(2.6375113976783475, 4.143263683691346)

请注意,rotate函数中有一些明显的重复计算:math.cos(angle)并且math.sin(angle)每个都计算两次,因为px - oxpy - oy.如果有必要,我留给你考虑一下.

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有