旋转2D对象的功能?

旋转2D对象的功能?,第1张

旋转2D对象的功能?

首先,我们需要一个绕原点旋转点的函数

当我们绕原点旋转一个点(x,y)theta度时,我们得到的坐标为:

(x cosθ-y sinθ,x sinθ+ y cosθ)

如果要围绕原点以外的其他点旋转它,只需移动它,使中心点成为原点。现在,我们可以编写以下函数:

from math import sin, cos, radiansdef rotate_point(point, angle, center_point=(0, 0)):    """Rotates a point around center_point(origin by default)    Angle is in degrees.    Rotation is counter-clockwise    """    angle_rad = radians(angle % 360)    # Shift the point so that center_point becomes the origin    new_point = (point[0] - center_point[0], point[1] - center_point[1])    new_point = (new_point[0] * cos(angle_rad) - new_point[1] * sin(angle_rad),      new_point[0] * sin(angle_rad) + new_point[1] * cos(angle_rad))    # Reverse the shifting we have done    new_point = (new_point[0] + center_point[0], new_point[1] + center_point[1])    return new_point

一些输出:

print(rotate_point((1, 1), 90, (2, 1)))# This prints (2.0, 0.0)print(rotate_point((1, 1), -90, (2, 1)))# This prints (2.0, 2.0)print(rotate_point((2, 2), 45, (1, 1)))# This prints (1.0, 2.4142) which is equal to (1,1+sqrt(2))

现在,我们只需要使用我们之前的功能旋转多边形的每个角即可:

def rotate_polygon(polygon, angle, center_point=(0, 0)):    """Rotates the given polygon which consists of corners represented as (x,y)    around center_point (origin by default)    Rotation is counter-clockwise    Angle is in degrees    """    rotated_polygon = []    for corner in polygon:        rotated_corner = rotate_point(corner, angle, center_point)        rotated_polygon.append(rotated_corner)    return rotated_polygon

输出示例:

my_polygon = [(0, 0), (1, 0), (0, 1)]print(rotate_polygon(my_polygon, 90))# This gives [(0.0, 0.0), (0.0, 1.0), (-1.0, 0.0)]


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5655075.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存