恶心代码

来源:互联网 发布:javascript post 传值 编辑:程序博客网 时间:2024/04/28 16:49

//恶心代码 留着 以后再解决吧

Quadratic Surface

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include <iostream>#define eps 1e-8using namespace std; int sign;double e[4][4],E[4][4];int rankk(doubleArray[][4],int m,intn);   int IsZero(doublenum);double det(doubles[][4],int n){         intz,j,k;         doubler,total=0;         doubleb[4][4];         if(n>2)         {                   for(z=0;z<n;z++)                   {                            for(j=0;j<n-1;j++)                                     for(k=0;k<n-1;k++)                                               if(k>=z)                                                        b[j][k]=s[j+1][k+1];                                               else                                                        b[j][k]=s[j+1][k];                            if(z%2==0)                                     r=s[0][z]*det(b,n-1);                            else                                     r=(-1)*s[0][z]*det(b,n-1);                            total+=r;                   }         }         else if(n==2)                   total=s[0][0]*s[1][1]-s[0][1]*s[1][0];         returntotal;}void check(int pp,int p4,int sign,int k){         if(pp==1&& p4==1)                   printf("coincident planes/n");         if(pp==3&& p4==4 && sign==1 && k==1)                   printf("ellipsoid (imaginary)/n");         if(pp==3&& p4==4 && sign==-1 && k==1)                   printf("ellipsoid (real)/n");         if(pp==3&& p4==3 && k==1)                   printf("elliptic cone (imaginary)/n");         if(pp==3&& p4==3 && k==0)                   printf("elliptic cone (real)/n");         if(pp==2&& p4==3 && k==1)                   printf("elliptic cylinder (imaginary or real)/n");         if(pp==2&& p4==4 && sign==-1 && k==1)                   printf("elliptic paraboloid/n");         if(pp==2&& p4==3 && k==0)                   printf("hyperbolic cylinder/n");         if(pp==2&& p4==4 && sign==1 && k==0)                   printf("hyperbolic paraboloid/n");         if(pp==3&& p4==4 && sign==1 && k==0)                   printf("hyperboloid of one sheet/n");         if(pp==3&& p4==4 && sign==-1 && k==0)                   printf("hyperboloid of two sheets/n");         if(pp==2&& p4==2 && k==1)                   printf("intersecting planes (imaginary)/n");         if(pp==2&& p4==2 && k==0)                   printf("intersecting planes (real)/n");         if(pp==1&& p4==3)                   printf("parabolic cylinder/n");         if(pp==1&& p4==2)                   printf("parallel planes (imaginary or real)/n");}bool judge(double a,double b,double c,double g,double h,double f){         if(det(e,3)<eps)         {                   if(a*b*1.0+a*c*1.0+b*c*1.0-g*g*1.0-h*h*1.0-f*f*1.0>0)                            return 1;                   else                            return 0;         }         if(det(e,3)>eps)                   return1;         else if(det(e,3)<0)                   return0;}int t;int main(){         inti,j,pp,p4,alpha,k;         doublea,b,c,f,g,h,p,q,r,d;         scanf("%d",&t);         while(t--)         {                   sign=0;                   scanf("%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf",&a,&b,&c,&f,&g,&h,&p,&q,&r,&d);                   e[0][0]=a;e[1][0]=h;e[2][0]=g;                   e[0][1]=h;e[1][1]=b;e[2][1]=f;                   e[0][2]=g;e[1][2]=f;e[2][2]=c;                   E[0][0]=a;E[1][0]=h;E[2][0]=g;E[3][0]=p;                   E[0][1]=h;E[1][1]=b;E[2][1]=f;E[3][1]=q;                   E[0][2]=g;E[1][2]=f;E[2][2]=c;E[3][2]=r;                   E[0][3]=p;E[1][3]=q;E[2][3]=r;E[3][3]=d;                   pp=rankk(e,3,3);                   p4=rankk(E,4,4);                   if(det(E,4)>eps)                            sign=1;                   elseif(abs(det(E,4))<eps)                            sign=0;                   else                            sign=-1;                   k=judge(a,b,c,g,h,f);                   check(pp,p4,sign,k);         }         return0;}int IsZero(doublenum){    returnfabs(num)<=0.00001?1:0;}int rankk(doubleArray[][4],int m,intn){    inti,j,k,l,i1,j1,rank_of_Array,main_row,main_col;    doublemain_element,mik;    doubletemp;    for(i=0;i<m;i++)    {        main_element=Array[i][i];        main_row=i;        main_col=i;        for(j=i;j<m;j++)            for(k=i;k<n;k++)               {                if(fabs(Array[j][k])>=fabs(main_element)&&i!=j)                    {                       main_element=Array[j][k];                        main_row=j;                        main_col=k;                    }            }        for(l=0;l<n;l++)           {            temp=Array[main_row][l];            Array[main_row][l]=Array[i][l];            Array[i][l]=temp;        }        for(l=0;l<m;l++)          {            temp=Array[l][main_col];            Array[l][main_col]=Array[l][i];            Array[l][i]=temp;        }        if(IsZero(main_element)==1)            break;              for(i1=i+1;i1<m;i1++)        {            temp=Array[i1][i];            for(j1=0;j1<n;j1++)               Array[i1][j1]=Array[i1][j1]-Array[i][j1]*temp/main_element;        }    }    rank_of_Array=0;    for(i=0;i<m;i++)            {        for(j=0;j<n;j++)        {            if(IsZero(Array[i][j])==0)            {                rank_of_Array++;                break;            }            else                continue;        }    }    returnrank_of_Array;}


 

原创粉丝点击