gpt4 book ai didi

python - 旋转二维物体的功能?

转载 作者:太空狗 更新时间:2023-10-29 21:14:45 44 4
gpt4 key购买 nike

是否可以在 python 中编写一个函数来旋转任何二维结构,参数仅为结构中点的坐标 (x,y)?将包括轴、速度和方向的附加参数。

据我所知,只有通过计算对称点和轴的点距离才有可能,因此它总是会变化,因此除了由标准形状(三角形、矩形、正方形等)组成的二维结构外,这是不可能的

我们将不胜感激。

最佳答案

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

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

(x*cos(theta)-y*sin(theta), x*sin(theta)+y*cos(theta))

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

from math import sin, cos, radians

def 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)]

关于python - 旋转二维物体的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20023209/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com