如何在圆上找到点来定义一个基于比例的矩形,使空间最大化



我的问题来自Android 8.0自适应图标要求:

https://developer.android.com/guide/practices/ui_guidelines/icon_design_adaptive

我正在开发一款Android应用程序,其中的启动器图标是未知的,部署该应用程序的人不知道SVG是什么(也没有人有时间、金钱或耐心来解释/理解SVG是什么(。这意味着PNG图像将需要才能在Android 8.0及更高版本上看起来很好。

自适应图标显示为108dp x 108dp。在xxxhdpi(4x(上,它的总空间为432x432像素。然而,前景中只使用了一个66dp直径的圆圈,在xxxhdpi上为264x264像素。问题是图标位于圆形遮罩内。解释什么是圆形口罩以及为什么需要它也是极其困难的。简言之,收到的图像将是矩形的,大多数人喜欢填充可用空间。

所以我想做的是,取我得到的任何矩形输入图像,并计算其比率(很容易(,然后找到相同比率的矩形,使直径为66dp的受约束圆中的空间最大化。我可以使用欧拉方法,从0度到90度(即猜测(,直到"足够接近",但一个好的、易于遵循的代码,不使用直接从比率到精确矩形的for循环,会干净得多。我更喜欢C/C++风格,但只要可读,我会尽我所能。我对我的三角学很生疏——我上一次必须做任何严肃的数学已经快20年了,所以请不要在LaTeX中使用公式,除非将其转换为我能理解的东西(即代码(——这些天,每当我登陆数学SE网站时,我都会非常失落。

(如果有人认为我在找讲义,只要我知道该找什么,我就完全可以自己做。我有三个未知数:角度、对边的长度和相邻边的长度。经典的SOH-CAH-TOA不直接适用。我有两个未知数:斜边的长度和矩形的比例。我可以一起想出一个解决方案,但如果有一种更清洁的解决方案。(

我想得太难了。更好的解决方案是计算包含原始图像矩形的圆的半径,然后根据源直径与目标直径的比例缩放图像。伪代码示例:

w = 720
h = 405
dp = 66
halfwidth = w / 2
halfheight = h / 2
origdiameter = sqrt(halfwidth * halfwidth + halfheight * halfheight) * 2
destdiameter = dp * 4
newwidth = w * destdiameter / origdiameter
newheight = h * destdiameter / origdiameter

生成230.09 x 129.43,完全适合264像素直径的圆。两个矩形也是~16:9(1.77777(。我可以去掉几个dp,这样我就不必担心抗锯齿会切掉像素。作为一个额外的奖励,这样做可以使图像达到漂亮整洁的256 x 256。

相关内容

  • 没有找到相关文章

最新更新