zoukankan      html  css  js  c++  java
  • 2014微软编程之美预赛第一 焦距

    题目1 : 焦距

    时间限制:2000ms
    单点时限:1000ms
    内存限制:256MB

    描写叙述

    一般来说。我们採用针孔相机模型。也就是觉得它用到的是小孔成像原理。

    在相机坐标系下。一般来说,我们用到的单位长度。不是“米”这种国际单位,而是相邻像素的长度。而焦距在相机坐标系中的大小,是在图像处理领域的一个很重要的物理量。

    如果我们已经依据相机參数。得到镜头的物理焦距大小(focal length),和相机胶片的宽度(CCD width)。以及照片的横向分辨率(image width),则详细计算公式为:

    Focal length in pixels = (image width in pixels) * (focal length on earth) / (CCD width on earth)

    比方说对于Canon PowerShot S100, 带入公式得

    Focal length in pixels = 1600 pixels * 5.4mm / 5.27mm = 1639.49 pixels

    如今,请您写一段通用的程序,来求解焦距在相机坐标系中的大小。


    输入

    多组測试数据。首先是一个正整数T。表示測试数据的组数。

    每组測试数据占一行,分别为

    镜头的物理焦距大小(focal length on earth)

    相机胶片的宽度(CCD width on earth)

    照片的横向分辨率大小(image width in pixels),单位为px。

    之间用一个空格分隔。


    输出

    每组数据输出一行,格式为“Case X: Ypx”。

    X为測试数据的编号。从1開始。Y为焦距在相机坐标系中的大小(focallength in pixels),保留小数点后2位有效数字,四舍五入取整。


    数据范围

    对于小数据:focal length on earth和CCD width on earth单位都是毫米(mm)

    对于大数据:长度单位还可能为米(m), 分米(dm), 厘米(cm), 毫米(mm), 微米(um),纳米(nm)



    例子输入
    2
    5.4mm 5.27mm 1600px
    5400um 0.00527m 1600px
    
    例子输出
    Case 1: 1639.47px
    Case 2: 1639.47px
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<cstdio>
    #include<string>
    #include<vector>
    #include<cmath>
    using namespace std;
    double jinwei(string a)
    {
        int len=a.size();
        double h=0;
        if(a[len-2]=='c')
        {
            h=10;
        }
        else if(a[len-2]=='d')
        {
            h=100;
        }
        else if(a[len-2]=='u')
        {
            h=0.001;
        }
        else if(a[len-2]=='n')
        {
            h=0.000001;
        }
        else if(a[len-2]=='m'||a[len-2]=='p')
        {
            h=1;
        }
        else
        {
            h=1000;
        }
        return h;
    }
    double change(string a)
    {
    
        char s[1010];
        int k=0;
        double h=jinwei(a);
        for(int i=0;i<a.size();i++)
        {
            if(a[i]>='a'&&a[i]<='z')
                break;
            s[k++]=a[i];
        }
        s[k]='';
        double sum=0;
        sum=atof(s);
        sum*=h;
        return sum;
    }
    
    int main()
    {
        int t;
        while(cin>>t)
        {
            for(int k=1;k<=t;k++)
            {
                string a,b,c;
                cin>>a>>b>>c;
                double v1,v2,v3;
                v1=change(a);
                v2=change(b);
                v3=change(c);
              //  cout<<v1<<" "<<v2<<" "<<v3<<endl;
                double sum=v3*v1/v2;
                int s=sum*100+0.5;
                cout<<"Case "<<k<<": ";
                printf("%.2lfpx
    ",(double)s/100);
            }
        }
        return 0;
    }
    

    //水的问题可以很容易误事

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    CF1051F The Shortest Statement 题解
    CF819B Mister B and PR Shifts 题解
    HDU3686 Traffic Real Time Query System 题解
    HDU 5969 最大的位或 题解
    P3295 萌萌哒 题解
    BZOJ1854 连续攻击游戏 题解
    使用Python编写的对拍程序
    CF796C Bank Hacking 题解
    BZOJ2200 道路与航线 题解
    USACO07NOV Cow Relays G 题解
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4677439.html
Copyright © 2011-2022 走看看