为了账号安全,请及时绑定邮箱和手机立即绑定

从旋转的矩形计算边界框坐标

从旋转的矩形计算边界框坐标

从旋转的矩形计算边界框坐标我有一个矩形左上角的坐标,以及从0到180和-0到-180的宽度,高度和旋转。我试图获取矩形周围的实际框的边界坐标。什么是计算边界框坐标的简单方法Min y,max y,min x,max x?A点并不总是在最小值上,它可以在任何地方。如果需要,我可以在as3中使用矩阵变换工具包。
查看完整描述

3 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

我意识到你要求ActionScript,但是,如果有人来到这里寻找iOS或OS-X答案,它是这样的:

+ (CGRect) boundingRectAfterRotatingRect: (CGRect) rect toAngle: (float) radians{
    CGAffineTransform xfrm = CGAffineTransformMakeRotation(radians);
    CGRect result = CGRectApplyAffineTransform (rect, xfrm);

    return result;}

如果您的操作系统为您提供了所有艰苦的工作,那就试试吧!:)

迅速:

func boundingRectAfterRotatingRect(rect: CGRect, toAngle radians: CGFloat) -> CGRect {
    let xfrm = CGAffineTransformMakeRotation(radians)
    return CGRectApplyAffineTransform (rect, xfrm)}


查看完整回答
反对 回复 2019-08-27
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

MarkusQ概述的方法非常有效,但请记住,如果已经有A点,则不需要转换其他三个角。

另一种更有效的方法是测试旋转角度所在的象限,然后直接计算答案。这样做效率更高,因为你只有两个if语句的最坏情况(检查角度),而另一个方法的最差情况是12个(当检查其他三个角以查看它们是否大于当前时,每个组件为6个)我认为最大或小于当前最小值。

基本算法仅使用了毕达哥拉斯定理的一系列应用,如下所示。我用theta表示了旋转角度,并以度为单位表示检查,因为它是伪代码。

ct = cos( theta );st = sin( theta );hct = h * ct;wct = w * ct;hst = h * st;wst = w * st;if ( theta > 0 ){
    if ( theta < 90 )
    {
        // 0 < theta < 90
        y_min = A_y;
        y_max = A_y + hct + wst;
        x_min = A_x - hst;
        x_max = A_x + wct;
    }
    else
    {
        // 90 <= theta <= 180
        y_min = A_y + hct;
        y_max = A_y + wst;
        x_min = A_x - hst + wct;
        x_max = A_x;
    }}else{
    if ( theta > -90 )
    {
        // -90 < theta <= 0
        y_min = A_y + wst;
        y_max = A_y + hct;
        x_min = A_x;
        x_max = A_x + wct - hst;
    }
    else
    {
        // -180 <= theta <= -90
        y_min = A_y + wst + hct;
        y_max = A_y;
        x_min = A_x + wct;
        x_max = A_x - hst;
    }}

这种方法假设你拥有你所说的你所拥有的东西,即A点和theta的值,它位于[-180,180]的范围内。我还假设theta在顺时针方向上增加,因为在图中旋转了30度的矩形似乎表明你正在使用,我不确定右边的部分试图表示什么。如果这是错误的方法,那么只需交换对称子句以及st术语的符号。


查看完整回答
反对 回复 2019-08-27
  • 3 回答
  • 0 关注
  • 991 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信