数学难题,如何计算长宽比例? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
61162833
V2EX    问与答

数学难题,如何计算长宽比例?

  •  
  • 61162833 2021-03-10 15:30:38 +08:00 3917 次点击
  • 这是一个创建于 1716 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我们知道分辨率有 16:9,也有 4:3

    比如几组分辨为:982x737 、1080x608,怎么计算出来这是什么比例的?

    也就是怎么推算出 982x737 = 4:3
    第 1 条附言    2021-03-10 16:06:57 +08:00
    比如我们都知道一个 16:9 比例,那现在给一个 32x18,难道现在的数学就没办法推算出 16:9 这两个数字了吗?
    (我知道 32x18 可以用 32/2 与 18/2 得出 16:9 这个结果,这就是我想要的,可如果数字是 1920x1080 怎么算出 16:9 呢?)
    第 2 条附言    2021-03-10 16:13:15 +08:00
    回复都是说做一个表格,16/9 约等于几,然后 1920/1080 约等于几,这样去遍历对比,可我想知道的是 16 与 9 这两个数字,也就是根据 1920 与 1080 这两个值,算出 16 与 9 这两个值,而不是根据表格表格遍历
    53 条回复    2021-03-11 15:34:05 +08:00
    wesleywaters
        1
    wesleywaters  
       2021-03-10 15:33:52 +08:00 via iPhone
    公约数
    Muniesa
        2
    Muniesa  
       2021-03-10 15:34:49 +08:00
    982÷737≈4÷3
    tcfenix
        3
    tcfenix  
       2021-03-10 15:37:37 +08:00
    16/9 = 1.7777777
    4/3 = 1.333333

    982/737 = 1.33

    1080/608 = 1.77

    这个除法很明显了吧?
    61162833
        4
    61162833  
    OP
       2021-03-10 15:39:40 +08:00
    @wesleywaters 谢谢大佬,我在公约数计算器里输入 982,737,得到最小公倍数:723734 最大公约数:1,怎么得出 4:3 呢?

    @Muniesa 谢谢,同样 3÷4≈737÷982,但问题是我怎么根据 982x737 推算出 4:3 这两个值?
    61162833
        5
    61162833  
    OP
       2021-03-10 15:41:31 +08:00
    @tcfenix 谢谢,得出 982/737 = 1.33 ,怎么根据 1.33 得出 4:3 呢?

    4:3 只是一个例子,如果除的结果是 1.53 ,这是什么尺寸的分辨率?
    61162833
        6
    61162833  
    OP
       2021-03-10 15:45:07 +08:00
    遇见数学的美好,就是头发都想掉了也解决不了

    好难啊
    tcfenix
        7
    tcfenix  
       2021-03-10 15:47:14 +08:00
    @61162833
    https://zh.wikipedia.org/wiki/%E9%95%B7%E5%AF%AC%E6%AF%94_(%E5%BD%B1%E5%83%8F)

    1.19:1:"Movietone",早期使用 35 毫米胶片的有声电影,大部分拍摄于 20 至 30 年代,尤其欧洲。光学音效轨被放置于 1.33 框面的侧边,因此减少了画面的宽度。“学院孔径( Academy Aperture )”扩张了胶片的使用面积而能达到 1.37 。此种比例的最佳示例为 Fritz Lang 所拍摄的《 M 》和《 The Testament of Dr. Mabuse 》。在今日的横向画面比例中,它几乎不被使用。
    1.25:1:电脑常用的分辨率 1280x1024 即此种比例,这是许多 LCD 显示器的原生分辨率。它也是 4x5 胶片冲洗照片的比例。英国早期的水平 405 线规格使用这种比例,从 1930 至 1950 年代直到被更通用的 4:3 取代为止。
    1.33:1:即 4:3,35 毫米无音效轨胶片的原始比例,在电视和视频上都同样常见。也是 IMAX 和 MPEG-2 影像压缩的标准比例。
    1.37:1:35 毫米全屏的有音轨胶片,在 1932 年到 1953 年间几乎是通用的。作为“学院比例”它在 1932 年被美国电影艺术学院立为标准,至今仍然偶尔使用。亦是标准 16 毫米胶片的比例。
    1.43:1:或为 1.44:1,IMAX 70 毫米胶片的水平格式。
    1.5:1:35 毫米胶片用于静物拍摄的比例。亦用于较宽的电脑显示( 3:2 ),曾用于苹果电脑的 PowerBook G4 15.2 英寸的屏幕,分辨率为 1440x960 。这个比例也用于苹果电脑的 iPhone 产品。(微软 Surface Pro 亦用此长宽比触屏携带式平板电脑)
    1.56:1:即宽屏的 14:9 比例。是为 4:3 和 16:9 之间的折衷比例,常用于拍摄广告或者在两种屏幕上都会放映的影像,两者之间的转换都只会产生微量的剪裁。
    1.6:1:即 16:10 ( 8:5 ),是电脑宽屏幕常见的比例,用于 WSXGAPlus 、WUXGA 和其他种分辨率。因为它能同时显示两个完整页面(左右各一页),所以十分受欢迎。[1]
    1.66:1:35 毫米欧洲宽屏标准;亦为 Super 16 毫米胶片的比例( 5:3,有时精确的标志为 1.67 )。
    1.75:1:早期 35 毫米胶片的宽屏比例,最主要是米高梅影业在使用,但已经被抛弃。
    1.77:1:即所谓 16:9 (= 42:32 ),标准宽屏。使用于高清晰度( HD )电视和 MPEG-2 的影像压缩上,也是现在电脑屏幕、电视、手机最常用的比例。
    1.85:1:35 毫米胶片,美国和英国用于拍摄在戏院放映的电影的比例,即是 37:20 。在四齿格的框面中画面大约占了三格高,也可直接使用三格高拍摄,以节省胶片成本。
    2:1:主要在 1950 和 60 年代早期为环球影业所使用,还有派拉蒙影业的一些 VistaVision 视频;也是 SuperScope 诸多比例中的一种。现代启示录的 DVD 版本、侏罗纪世界的 Blu-ray 版本亦使用这种比例; 2017/2/26 LG 推出首款 QHD+ 分辨率 2:1 (宣传为 18:9 )屏幕的智能手机 LG G6[4]。
    2.2:1:70 毫米胶片标准。在 1950 年代为了 Todd-AO 这部片而开发的。另有 2.21:1 在 MPEG-2 规格中写明但未使用。
    2.35:1:1970 年以前用 35 毫米胶片拍摄的横向影像,由 CinemaScope 和早期的 Panavision 所使用,比例大约是 47:20 。横向拍摄的标准慢慢地改变,现代的横向制作实际上已经是 2.39:1[1],但因传统而仍常被称为 2.35:1 。(注意所谓的“anamorphic”指的是胶片上,限于四个齿格内的“学院区域”的影像,比起其他高度较高的影像的压缩程度。)
    2.370:1:即所谓 21:9,实际值是 64:27 (= 43:33 )。在 2009 年至 2012 年间,有部分电视曾用这种长宽比制成,并以“21:9 电影级屏幕”作招徕。然而这种长宽比仍可在高端显示器上看到,有时也被称为 UltraWide 显示器。2019/2/26 SONY 在香港举行发布会,推出两款 21:9 全新比例的智能手机 Xperia 10 和 Xperia 10 Plus 。
    2.39:1:1970 年以后的 35 毫米横向影像,比例大约是 43:18 。电影称使用 Panavision 或 Cinemascope 系统拍摄即表示此种比例。
    2.4:1:蓝光光盘加整电影为 2.40:1,即是 12:5[1];
    2.55:1:CinemaScope 系统在未加音效轨之前的原始比例,这也是 CinemaScope 55 的比例。
    2.59:1:Cinerama 系统完全高度的比例(三道以特别方式拍摄的 35 毫米视频投影成一个宽屏画面)。
    2.76:1:MGM Camera 65 ( 65 毫米胶片加上 1.25x 倍的横向压缩),只使用于 1956 年到 1964 年间的一些视频,例如 1959 年的 《宾汉》( Ben-Hur )。
    4:1:Polyvision,使用三道 35 毫米胶片并排同时放映。只使用于一部视频,Abel Gance 的 Napoléon ( 1927 年)。


    你自己维护一个长宽比的词典咯, 不然怎么办?
    jmc891205
        8
    jmc891205  
       2021-03-10 15:48:06 +08:00   1
    你自己先把常见的分辨率的长宽比存好
    然后看输入的长宽比最靠近哪个就是哪个分辨率
    tcfenix
        9
    tcfenix  
       2021-03-10 15:51:57 +08:00
    这问题跟数学没有任何关系,

    设 宽是 W 长是 L

    L/W = 长宽比
    比如我们得到一个长宽比是 1.5, 然后不告诉你 L 也不告诉你 W 是**不可能**得到答案的, 两元一次方程就这点条件, 你可以得到无数个解, 这是初中数学吧?

    所以必须用长跟宽去算比例
    TomatoYuyuko
        10
    TomatoYuyuko  
       2021-03-10 15:54:39 +08:00
    我的理解是 4:3 这种属于“标准”,根据标准来制作具体的尺寸比例,但不可能绝对吻合,多几厘米少几厘米是正常的,你记住常见的几种比例的商是多少,然后遇到具体尺寸,直接比较两者的商就知道了,取相近的值
    61162833
        11
    61162833  
    OP
       2021-03-10 15:56:27 +08:00
    @tcfenix @jmc891205 所以都要遍历吗?如果是表里没有的分辨率呢?

    比如 1920x1152,目前能做到的就是得到 1920÷115≈1.666666666666667,没法告诉我这是几比几的?
    jmc891205
        12
    jmc891205  
       2021-03-10 15:57:35 +08:00
    “然后看输入的长宽比最靠近哪个就是哪个分辨率”

    最靠近
    最靠近
    最靠近
    jmc891205
        13
    jmc891205  
       2021-03-10 15:57:47 +08:00
    imn1
        14
    imn1  
       2021-03-10 15:59:03 +08:00
    如果纯粹是视象尺寸范畴,合适的做法不是直接计算,而是分级
    例如高度分 320/480/720/1080/1280...,宽度类似
    然后找出组合就是几比几了

    扩展,竖着播放的写成 9:16,3:4 么?
    61162833
        15
    61162833  
    OP
       2021-03-10 16:00:14 +08:00
    @tcfenix 谢谢,实际我根本不在乎长宽比,我想知道怎么根据 1920x1080 得出 16:9
    61162833
        16
    61162833  
    OP
       2021-03-10 16:04:04 +08:00
    @jmc891205 这好像是一个笨方法啊,难道要做一个表格去一一遍历吗?

    比如我们都知道一个 16:9 分辨力,拿现在给一个 32x18,难道现在的数学就没办法推算出 16:9 这两个数字了吗?
    (我知道 32x18 可以用 32/2 与 18/2 得出 16:9 这个结果,这就是我想要的,可如果数字是 1920x1080 怎么算除 16:9 呢?)
    wutiantong
        17
    wutiantong  
       2021-03-10 16:11:20 +08:00   2
    ???什么鬼问题???
    61162833
        18
    61162833  
    OP
       2021-03-10 16:11:43 +08:00
    不好意思,上面错字一堆,太难

    修改错字版本:
    比如我们都知道一个 16:9 比例,那现在给一个 32x18,难道现在的数学就没办法推算出 16:9 这两个数字了吗?
    (我知道 32x18 可以用 32/2 与 18/2 得出 16:9 这个结果,这就是我想要的,可如果数字是 1920x1080 怎么算出 16:9 呢?)

    上面的回复都是说做一个表格,16/9 约等于几,然后 1920/1080 约等于几,这样去遍历对比,可我想知道的是 16 与 9 这两个数字,也就是根据 1920 与 1080 这两个值,算出 16 与 9 这两个值,而不是根据表格表格遍历
    washbrain
        19
    washbrain  
       2021-03-10 16:13:32 +08:00   2
    32:18 是很容易推出 16:9 的....
    记 a 和 b 的最大公约数为(a,b)
    32:18 = 32/(32,18) : 18/(32,18) = 32/2 : 18/2 = 16:9
    1920:1080 = 1920/(1920,1080) : 1080/(1920,1080) = 1920/120 : 1080/120 = 16:9
    washbrain
        20
    washbrain  
       2021-03-10 16:15:31 +08:00   1
    本质上你要做的就是约分,把分数变为最简分数,分子分母同时除以最大公约数....
    washbrain
        21
    washbrain  
       2021-03-10 16:17:26 +08:00   1
    另外, 982:737 并不等于 4:3,这个是近似到常见比例
    61162833
        22
    61162833  
    OP
       2021-03-10 16:20:35 +08:00
    @washbrain "分子分母同时除以最大公约数"

    大佬,你太牛鼻了!!!解决了我多年的困惑!!!谢谢啊!!!请抽华子!!!请喝阔乐!!!
    tcfenix
        23
    tcfenix  
       2021-03-10 16:23:52 +08:00   1
    @61162833
    前面数学公式我也给你推导了, 只是给一个长宽比从数学上是算不出来是哪两个数字相除才能得到它的......只能靠自己维护一个表.....
    auroraccc
        24
    auroraccc  
       2021-03-10 16:24:38 +08:00   1
    可以用辗转相除法先算出最大公约数,然后再同时除以这个公约数就好了
    ex (JS):
    var 宽 = 1920
    var 高 = 1080
    var 辗转相除法 = (m , n) => m % n === 0 ? (n) : 辗转相除法(n, m % n);
    var 最大公约数 = 辗转相除法(宽, 高)
    var 长宽比 = `${宽 / 最大公约数}:${高 / 最大公约数}`
    console.log(长宽比) // 16:9
    61162833
        25
    61162833  
    OP
       2021-03-10 16:26:42 +08:00
    @tcfenix @washbrain 谢谢!

    也就是没有最大公约数的比如 982:737,要得出 4:3 就只能靠表来推算了是吗?
    necpom
        26
    necpom  
       2021-03-10 16:28:10 +08:00
    @61162833 "根据 1920 与 1080 这两个值,算出 16 与 9 这两个值" 公约数公倍数不是小学学的吗?
    61162833
        27
    61162833  
    OP
       2021-03-10 16:30:13 +08:00
    @auroraccc 谢谢,太 6 了,这中文代码可以直接贴在 Chrome Console 里运行。惊呆
    61162833
        28
    61162833  
    OP
       2021-03-10 16:32:06 +08:00
    @necpom 小学生,向各位大佬请教
    Tumblr
        29
    Tumblr  
       2021-03-10 16:33:46 +08:00   1
    @61162833 #17 看得累 shi 了。。。这不就是个「约分」么。。。
    不过有些不是严格意义上的 4:3 或 16:9,遇到这种就除掉之后找最近的比例了。
    61162833
        30
    61162833  
    OP
       2021-03-10 16:35:31 +08:00
    我表达能力水平低,不好意思各位!!!
    Mountain
        31
    Mountain  
       2021-03-10 16:46:54 +08:00
    还是好人多,楼主加油
    crab
        32
    crab  
       2021-03-10 16:53:51 +08:00
    最大公约数
    jmc891205
        33
    jmc891205  
       2021-03-10 17:20:04 +08:00 via iPhone
    哈哈哈你不想查表
    那请问你要怎么把 982/737 约分
    flineqaq
        34
    flineqaq  
       2021-03-10 17:24:25 +08:00
    两个数分别质因数分解,去掉相同的质因数,剩下的相乘。这问题需要思考吗。。?
    otakustay
        35
    otakustay  
       2021-03-10 18:11:01 +08:00   1
    首先指定一个“到整数的允许误差”,比如 0.01 ,即 4.99-5.01 都算是整数 5
    然后拿到比例,比如前面提到的 1.666666666666667
    再把这个数组往整数倍乘,找到某个倍数的时候它和一个整数的误差在允许误差范围内
    1.666666666666667 * 1 = 1.666666666666667,与 1 的误差有 0.66 ,与 2 的误差有 0.34 ,所以它不行
    1.666666666666667 * 2 = 3.333333333,两端误差分别是 0.33 和 0.67 ,也不行
    1.666666666666667 * 3 = 5,非常标准的整数
    这个时候,参与运算的 2 个数,3 和 5,就是对应的比例了,也就是说对应 5:3

    用同样的方法,1920x1080,先算出 1920/1080=1.777777778,再把 1.777777778 往上乘,最后在乘以 9 的时候能得到 16.000000002,在误差范围内,所以是 16:9

    你可以设定一个乘数的最大值,比如一直乘到 120 都找不到一个整数,直接认为这比例没法算
    otakustay
        36
    otakustay  
       2021-03-10 18:16:36 +08:00   1
    对应到 JS 代码的版本:
    https://gist.github.com/otakustay/37d28c2003a6b8e9a4179a8d662463df

    对于计算机来说,跑 120 次应该问题不大
    kaiki
        37
    kaiki  
       2021-03-10 18:22:08 +08:00
    除了 16:10 都是公约数,因为它不写作 8:5 是为了和 16:9 作对比更方便人们理解。
    其他的比例只能按照预设的比例找最近的了
    lululau
        38
    lululau  
       2021-03-10 18:23:47 +08:00
    982 除以 737 = 4:3 ?

    如果你是 80 后,你父母可能违法了,义务教育法。。。
    wolfie
        39
    wolfie  
       2021-03-10 18:32:26 +08:00
    1L 不就是正确答案吗?
    gwy15
        40
    gwy15  
       2021-03-10 18:32:41 +08:00   1
    对于 a / b,先连分数展开到五六位,然后依次截断,选一个你觉得顺眼的就行。

    比如 982/737,连分数展开是 1, 3, 122, 2,依次截断分别是 1, 4/3, 489/367, 982/737,你觉得 4/3 顺眼就选这个

    比如 1080/608,连分数展开是 1, 1, 3, 2, 8,依次截断分别是 1, 2, 7/4, 16/9, 135/76,选个你顺眼的。
    61162833
        41
    61162833  
    OP
       2021-03-10 18:52:06 +08:00
    @otakustay 谢谢!说的非常清楚,理解了
    61162833
        42
    61162833  
    OP
       2021-03-10 18:53:32 +08:00
    @gwy15 谢谢,高级,我不知道连分数是什么,惭愧
    weyou
        43
    weyou  
       2021-03-10 18:59:47 +08:00 via Android
    一个小学 5 年级学的“约分”就能解决的问题讨论了这么多楼,v2 这是怎么了
    pikaconan
        44
    pikaconan  
       2021-03-10 19:53:55 +08:00 via iPhone
    还是吃得太饱了……
    dontmind
        45
    dontmind  
       2021-03-10 19:57:36 +08:00
    1/1 < 982/737 < 2/1
    1/1 < 982/737 < (2+1)/(1+1) = 3/2 982/737 - 3/2= -0.16757
    1/1 < 982/737 < (2+1)/(1+1) = 4/3 982/737 - 4/3 = -0.0009

    1/1 < 1080/608 < 2/1
    3/2 = (1+2)/(1+1) < 1080/608 < 2/1 1080/608 - 3/2 = 0.27631578947
    5/3 = (3+2)/(1+1) < 1080/608 <. 2/1 1080/608 -5/3=0.1096
    7/4 = (2+5)/(3+1) < 1080/608 < 2/1. 1080/608 -7/4=0.02631
    7/4 < 1080/608 < (7+2)/(4+1) =9 /5 1080/608 -9/5 =-0.02368
    7/4 < 1080/608< (7+9)/(4+5) =16 /9 1080/608 -16/9 = -0.00146
    Building
        46
    Building  
       2021-03-10 20:03:55 +08:00 via iPhone
    这不是取决于你的内容是要 content_fit 还是要 content_fill 来显示吗?
    Mutoo
        47
    Mutoo  
       2021-03-10 20:25:24 +08:00
    由于很多屏幕的像素是取整的,所以不可能完全符合整数上的 4:3
    最好的办法还是查表法,算出 ratio 然后最近似的结果,js 代码如下:

    https://gist.github.com/mutoo/0c4c388749fedd22f16375c07f8cae40
    lance6716
        48
    lance6716  
       2021-03-10 20:53:36 +08:00 via Android
    敢问楼主学历…
    FucUrFrd
        49
    FucUrFrd  
       2021-03-10 23:38:34 +08:00 via Android
    楼主是小学毕业吗

    相除小数接近 1.3333 就是 4/3

    接近 1.777 就是 16/9


    其他比例自己插队
    nekochyan
        50
    nekochyan  
       2021-03-11 15:13:56 +08:00
    我不太明白你这算这个来是干嘛的,如果是做适配,也用不到这个,如果只是单纯的算是 4:3 还是 16:9,那你只能屏幕的分辨率相除去比较,毕竟很多屏幕并不一定是 4:3 或 16:9 的
    Alexhex
        51
    Alexhex  
       2021-03-11 15:19:09 +08:00
    我觉得楼主还是挺有数学天赋的。楼上不少人可能低估了这个问题的难度,参看:

    https://zh.wikipedia.org/zh-cn/%E6%95%B4%E6%95%B0%E5%88%86%E8%A7%A3
    Alexhex
        52
    Alexhex  
       2021-03-11 15:22:36 +08:00
    感觉他想要的是一个一般性的将两个整数化为最小互质数比的算法。

    我能想到的是,对 AB 两个数进行质因数分解后,去除两个数组中相同元素后相乘。当数字很大的时候不确定有没有更好从的算法。

    当然如果只是追究屏幕分辨率,鉴于分辨率应该不会超过 10W 这个数量级,算法效率应该不太重要。维护一个质数数列除到 根号 N 然后写数组去相同元素应该够了。
    hitmanx
        53
    hitmanx  
       2021-03-11 15:34:05 +08:00
    @Alexhex 你看一下 4 楼,不是最大公约数的问题。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5559 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 01:50 PVG 09:50 LAX 17:50 JFK 20:50
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86