gpt4 book ai didi

algorithm - 给定矩形的纵横比,找到最大比例和角度以使其适合另一个矩形

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:20:07 25 4
gpt4 key购买 nike

我已经阅读了几十个关于这个主题的问题,但似乎没有一个正是我要找的,所以我希望这不是重复的。

我有一张图片,我想保持其宽高比,因为它是一张图片。

我想找到最大比例因子,以及介于 0 度和 90 度(含)之间的对应角度,以便图像完全适合给定的矩形。

示例1:如果图像和矩形的比例相同,则角度为0,比例因子为矩形的宽度与图像的宽度之比。 (或高度到高度。)

示例 2:如果图像和矩形比例互为倒数,比例因子将与第一个示例相同,但角度将为 90 度。

那么,对于一般情况,给定 image.width、image.height、rect.width、rect.height,我如何找到 image.scale 和 image.angle?

最佳答案

好吧,我自己想通了。

首先,计算纵横比。如果您的图像是 1:1,则没有意义,因为角度始终为零,并且比例始终为 min(Width, Height)。退化。

否则,你可以使用这个:

// assuming below that Width and Height are the rectangle's

_imageAspect = _image.width / _image.height;
if (_imageAspect == 1) { // div by zero implied
trace( "square image...this does not lend itself to rotation ;)" );
return;
}
_imageAspectSq = Math.pow( _imageAspect, 2 );

var rotate:Float;
var newHeight:Float;
if (Width > Height && Width / Height > _imageAspect) { // wider aspect than the image
newHeight = Height;
rotate = 0;
} else if (Height > Width && Height / Width > _imageAspect) { // skinnier aspect than the image rotated 90 degrees
newHeight = Width;
rotate = Math.PI / 2;
} else {
var hPrime = (_imageAspect * Width - _imageAspectSq * Height) / ( 1 - _imageAspectSq );
var wPrime = _imageAspect * (Height - hPrime);
rotate = Math.atan2( hPrime, wPrime );
var sine = Math.sin(rotate);
if (sine == 0) {
newHeight = Height;
} else {
newHeight = (Width - wPrime) / sine;
}
}

前两种情况也是退化的:图像的纵横比小于矩形。这类似于矩形中的正方形情况,只是在那种情况下,正方形总是退化。

代码假定弧度而不是度数,但转换起来并不难。

(此外,我对浏览器的字典中没有“弧度”感到有点震惊。)

关于algorithm - 给定矩形的纵横比,找到最大比例和角度以使其适合另一个矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35240101/

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