def getInscribedRectangle(self, angle, rectSz):
"""
From https://stackoverflow.com/questions/5789239/calculate-largest-rectangle-in-a-rotated-rectangle
:param angle: angle in radians
:param rectSz: rectangle size
:return:
"""
imgSzw = rectSz[0]
imgSzh = rectSz[1]
quadrant = int(numpy.floor(angle / (numpy.pi / 2.))) & 3
sign_alpha = angle if (quadrant & 1) == 0 else numpy.pi - angle
alpha = (sign_alpha % numpy.pi + numpy.pi) % numpy.pi
bbw = imgSzw * numpy.cos(alpha) + imgSzh * numpy.sin(alpha)
bbh = imgSzw * numpy.sin(alpha) + imgSzh * numpy.cos(alpha)
gamma = numpy.arctan2(bbw, bbh) if imgSzw < imgSzh else numpy.arctan2(bbh, bbw)
delta = numpy.pi - alpha - gamma
length = imgSzh if imgSzw < imgSzh else imgSzw
d = length * numpy.cos(alpha)
a = d * numpy.sin(alpha) / numpy.sin(delta)
y = a * numpy.cos(gamma)
x = y * numpy.tan(gamma)
return (int(x), int(y), int(x + bbw - 2*x), int(y + bbh - 2*y))
评论列表
文章目录