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

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

我有一个矩形左上角的坐标,以及从0到180和-0到-180的宽度,高度和旋转。

我试图获取矩形周围的实际框的边界坐标。

什么是计算边界框坐标的简单方法

  • Min y,max y,min x,max x?

A点并不总是在最小值上,它可以在任何地方。

如果需要,我可以在as3中使用矩阵变换工具包。


12345678_0001
浏览 1001回答 3
3回答

慕无忌1623718

我意识到你要求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)}

胡子哥哥

MarkusQ概述的方法非常有效,但请记住,如果已经有A点,则不需要转换其他三个角。另一种更有效的方法是测试旋转角度所在的象限,然后直接计算答案。这样做效率更高,因为你只有两个if语句的最坏情况(检查角度),而另一个方法的最差情况是12个(当检查其他三个角以查看它们是否大于当前时,每个组件为6个)我认为最大或小于当前最小值。基本算法仅使用了毕达哥拉斯定理的一系列应用,如下所示。我用theta表示了旋转角度,并以度为单位表示检查,因为它是伪代码。ct&nbsp;=&nbsp;cos(&nbsp;theta&nbsp;);st&nbsp;=&nbsp;sin(&nbsp;theta&nbsp;);hct&nbsp;=&nbsp;h&nbsp;*&nbsp;ct;wct&nbsp;=&nbsp;w&nbsp;*&nbsp;ct;hst&nbsp;=&nbsp;h&nbsp;*&nbsp;st;wst&nbsp;=&nbsp;w&nbsp;*&nbsp;st;if&nbsp;(&nbsp;theta&nbsp;>&nbsp;0&nbsp;){ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;theta&nbsp;<&nbsp;90&nbsp;) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;0&nbsp;<&nbsp;theta&nbsp;<&nbsp;90 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y_min&nbsp;=&nbsp;A_y; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y_max&nbsp;=&nbsp;A_y&nbsp;+&nbsp;hct&nbsp;+&nbsp;wst; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x_min&nbsp;=&nbsp;A_x&nbsp;-&nbsp;hst; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x_max&nbsp;=&nbsp;A_x&nbsp;+&nbsp;wct; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;90&nbsp;<=&nbsp;theta&nbsp;<=&nbsp;180 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y_min&nbsp;=&nbsp;A_y&nbsp;+&nbsp;hct; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y_max&nbsp;=&nbsp;A_y&nbsp;+&nbsp;wst; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x_min&nbsp;=&nbsp;A_x&nbsp;-&nbsp;hst&nbsp;+&nbsp;wct; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x_max&nbsp;=&nbsp;A_x; &nbsp;&nbsp;&nbsp;&nbsp;}}else{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;theta&nbsp;>&nbsp;-90&nbsp;) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;-90&nbsp;<&nbsp;theta&nbsp;<=&nbsp;0 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y_min&nbsp;=&nbsp;A_y&nbsp;+&nbsp;wst; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y_max&nbsp;=&nbsp;A_y&nbsp;+&nbsp;hct; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x_min&nbsp;=&nbsp;A_x; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x_max&nbsp;=&nbsp;A_x&nbsp;+&nbsp;wct&nbsp;-&nbsp;hst; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;-180&nbsp;<=&nbsp;theta&nbsp;<=&nbsp;-90 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y_min&nbsp;=&nbsp;A_y&nbsp;+&nbsp;wst&nbsp;+&nbsp;hct; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y_max&nbsp;=&nbsp;A_y; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x_min&nbsp;=&nbsp;A_x&nbsp;+&nbsp;wct; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x_max&nbsp;=&nbsp;A_x&nbsp;-&nbsp;hst; &nbsp;&nbsp;&nbsp;&nbsp;}}这种方法假设你拥有你所说的你所拥有的东西,即A点和theta的值,它位于[-180,180]的范围内。我还假设theta在顺时针方向上增加,因为在图中旋转了30度的矩形似乎表明你正在使用,我不确定右边的部分试图表示什么。如果这是错误的方法,那么只需交换对称子句以及st术语的符号。
打开App,查看更多内容
随时随地看视频慕课网APP