zoukankan      html  css  js  c++  java
  • 投影面积(公式在高数中有)

    http://222.200.98.145:8000/JudgeOnline/showproblem?problem_id=1084
    求投影面积,主要是
    面积*COS a(a为两个面的夹角)
    面积由海伦公式得S=SQRT(P(P-A)(P-B)(P-C)) (P==(A+B+C)/2);
    COS A可以由单位向量的夹角得,其中单位向量为(A,B,C)(A0,B0,C0)
    COS A=ABS(AA0+BB0+CC0)/(sqrt(A^2+B^2+C^2)*sqrt(A0^2+B0^2+C0^2));
    单位向量又可以有平面内的任两个向量得到
    N=AB*AC= | I,  J,  K |==(B*C0-C*B0)I+(C*A0+A*C0)J+(A*B0-B*A0)K;
          |  A,  B,  C|
          |A0,  B0,C0|
    OK 代码如下
    顺便说下我的SB ,我居然把某些变量定义为INT,,囧,,这个可是致命伤哦,,马虎的我,,要慢慢培养细心,谨慎的学习态度
    #include<iostream>
    #include<cmath>
    #define Nmax 5
    using namespace std; 
    double tra[4][4],plane[4][4],col[Nmax][Nmax],num[Nmax],col_a[Nmax][Nmax],num_a[Nmax];
    double  ABS(double a)
    {
    	if(a<0)return a*-1;
    	return a;
    }
    double dis(int a,int b)
    {
    	double x=tra[a][0];
    	double y=tra[a][1];
    	double z=tra[a][2];
    	double x0=tra[b][0];
    	double y0=tra[b][1];;
    	double z0=tra[b][2];
    	return sqrt( (x-x0)*(x-x0) + (y-y0)*(y-y0)+ (z-z0)*(z-z0) );
    }
    double Get_are()
    {
    	double a=dis(0,1);
    	double b=dis(1,2);
    	double c=dis(2,0);
    //	printf("%lf %lf %lf\n",a,b,c);
    	double p=(a+b+c)/2;
    	return sqrt(p*(p-a)*(p-b)*(p-c));
    }
    void Solve()
    {
    	int i;
    	for( i=0;i<3;i++)
    	{
    		col[1][i]=tra[1][i]-tra[0][i];
    		col[2][i]=tra[2][i]-tra[0][i];
    	}
    	num[0]=col[1][1]*col[2][2]-col[1][2]*col[2][1];
    	num[1]=col[1][2]*col[2][0]-col[1][0]*col[2][2];
    	num[2]=col[1][0]*col[2][1]-col[1][1]*col[2][0];
    	
    	for( i=0;i<3;i++)
    	{
    		col_a[1][i]=plane[1][i]-plane[0][i];
    		col_a[2][i]=plane[2][i]-plane[0][i];
    	}
    	num_a[0]=col_a[1][1]*col_a[2][2]-col_a[1][2]*col_a[2][1];
    	num_a[1]=col_a[1][2]*col_a[2][0]-col_a[1][0]*col_a[2][2];
    	num_a[2]=col_a[1][0]*col_a[2][1]-col_a[1][1]*col_a[2][0];
    
    	double a=0;
    	double ans1=0;
    	double ans2=0;
    	for(i=0;i<3;i++)
    	{
    		 a+=num[i]*num_a[i];
    		 ans1+=num[i]*num[i];
    		 ans2+=num_a[i]*num_a[i];
    	}
    	double are=Get_are();
    	double ans=ABS( (ABS(a)*are)/( sqrt(ans1)*sqrt(ans2) ) );
    
    	
    //	printf("%.2lf\n",are);
    	
    //	printf("%.2lf\n",angle);
    
    	printf("%.2lf\n",ans);
    	//getchar();
    }
    int main()
    {
    	int cas;
    	cin>>cas;
    	while(cas--)
    	{
    		int i,j;
    		for(i=0;i<3;i++)
    		{
    			for(j=0;j<3;j++)
    			scanf("%lf",&tra[i][j]);
    		}
    		for(i=0;i<3;i++)
    		{
    			for(j=0;j<3;j++)
    			scanf("%lf",&plane[i][j]);
    		}
    		Solve();
    	}
    	return 0;
    }
    
  • 相关阅读:
    poj 2728 Desert King
    uva 439 Knight Moves
    hdu 1875 畅通工程再续
    scau实验题 8600 骑士周游问题(有障碍物)
    scau实验题 8596 Longest Ordered Subsequence
    poj 1679 The Unique MST
    uva 527 Oil Deposits
    poj 2533 Longest Ordered Subsequence
    .net 程序员 java 开发入门
    Collation conflict occur at operation on User define funtion & table's column
  • 原文地址:https://www.cnblogs.com/gdutbean/p/1701748.html
Copyright © 2011-2022 走看看