zoukankan      html  css  js  c++  java
  • hdu 6465 线性变换高斯消元

    http://acm.hdu.edu.cn/showproblem.php?pid=6465

    题意

    给你三个点,再给你经过线性变换后的三个点,然后q次询问,给你一个点,需要你输出线性变换后的点

    题解

    • 线性变换:
      • (a_1x+b_1y+c_1=X)
      • (a_2x+b_2y+c_2=Y)
    • 构造高斯消元矩阵,Y同理

    [ left[ egin{matrix} 1 & x_1 & y_1 \ 1 & x_2 & y_2 \ 1 & x_3 & y_3 end{matrix} ight] left[ egin{matrix} a_1 \ b_1 \ c_1 end{matrix} ight]=left[ egin{matrix} X_1 \ X_2 \ X_3 end{matrix} ight] ]

    代码

    #include<bits/stdc++.h>
    
    using namespace std;
    
    void gao(double c[5][5]){
        for(int i=1;i<=3;i++){
            for(int j=i+1;j<=3;j++){
                double rate=c[j][i]*1.0/c[i][i];
                for(int k=i;k<=4;k++){
                    c[j][k]-=c[i][k]*rate;
                }
            }
        }
        for(int i=3;i>=1;i--){
            for(int j=i-1;j>=1;j--){
                double rate=c[j][i]*1.0/c[i][i];
                c[j][4]-=c[i][4]*rate;
            }
            c[i][i]=c[i][4]/c[i][i];
        }
    }
    double a[5][5],b[5][5];
    int q,T;
    double x,y,X,Y;
    int main(){
        cin>>T;
        while(T--){
            scanf("%lf%lf%lf%lf%lf%lf",&a[1][2],&a[1][3],&a[2][2],&a[2][3],&a[3][2],&a[3][3]);
            a[1][1]=a[2][1]=a[3][1]=1;
            for(int i=1;i<=3;i++)for(int j=1;j<=3;j++)b[i][j]=a[i][j];
            scanf("%lf%lf%lf%lf%lf%lf",&a[1][4],&b[1][4],&a[2][4],&b[2][4],&a[3][4],&b[3][4]);
            gao(a);gao(b);
            scanf("%d",&q);
            while(q--){
                scanf("%lf%lf",&x,&y);
                X=1*a[1][1]+x*a[2][2]+y*a[3][3];
                Y=1*b[1][1]+x*b[2][2]+y*b[3][3];
                printf("%.2f %.2f
    ",X,Y);
            }
        }
    }
    
  • 相关阅读:
    Memcached简介
    TP5 volist
    Getting command line access to PHP and MySQL running MAMP on OSX
    PHP use
    PHP 命名空间(namespace)
    mac 使用 pf 做端口转发
    微信测试帐号如何设置URL和Token,以及相关验证的原理
    ionic开发笔记
    Eclipse下配置Maven
    css引用第三方字体库
  • 原文地址:https://www.cnblogs.com/VIrtu0s0/p/10816390.html
Copyright © 2011-2022 走看看