You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取旋转矩形的顶点?旋转矩阵实现仅角度为0时有效

问题分析与解决

你的代码有两个核心问题:

  1. 旋转逻辑错误:旋转操作应该针对顶点相对于矩形中心的偏移量,而不是直接用顶点的绝对坐标。直接旋转绝对坐标会让矩形的中心偏离预设位置,同时破坏矩形的直角结构。
  2. 代码笔误:x2y2和x4y4的计算存在明显错误,比如x2y2的y分量误用了x1y10[1],x4y4的x和y分量计算完全错误,这直接导致非0角度时顶点混乱。

修正后的代码

import random
import numpy as np

def rand_angle():
    # 假设这个函数返回0到2π之间的随机弧度
    return random.uniform(0, 2 * np.pi)

def main_rec():
    width = random.randint(150, 250)
    height = random.randint(150, 250)
    angle = rand_angle()
    c, s = np.cos(angle), np.sin(angle)
    R = np.array(((c, -s), (s, c)))

    center = np.array([random.randint(0, 640), random.randint(0, 480)])
    # 定义相对于中心的四个原始顶点偏移量(未旋转的矩形)
    rel_points = np.array([
        [-width/2, height/2],   # 左上
        [width/2, height/2],    # 右上
        [width/2, -height/2],   # 右下
        [-width/2, -height/2]   # 左下
    ])
    # 旋转偏移量,再加上中心坐标得到最终顶点
    rotated_points = (rel_points @ R.T) + center
    # 转换为元组列表(保持原返回格式)
    points = [tuple(p) for p in rotated_points]
    # 转换为角度返回
    return points, np.rad2deg(angle)

关键修正点

  • 使用相对坐标旋转:先计算每个顶点相对于中心的偏移,旋转这个偏移量后再加上中心坐标,确保旋转围绕矩形中心进行,不会破坏矩形的形状。
  • 修正笔误:完全重构了顶点计算逻辑,避免了原代码中的手动计算错误,利用numpy矩阵运算让代码更简洁且不易出错。
  • 用np.rad2deg替代手动转换:更准确且符合numpy规范。

这样修改后,无论旋转角度是多少,生成的矩形都会保持直角,且中心位置正确。

内容的提问来源于stack exchange,提问作者dthedog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 09:30:57