⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2.cpp

📁 求球面上两条弧线的夹角
💻 CPP
字号:
/************************************************************************ 
* 文件名:    2.cpp 
* 文件描述:  求两条弧线在球面上相交的顺时针角度以及与与正北(通过相交点的经线)方向的夹角。
* 创建人:    郭建山, 2008年11月07日 
************************************************************************/ 
#include<iostream>
#include<math.h> 
using namespace std;
double GetAngle(double xa,double ya,double xb,double yb,double xc,double yc);//两条弧线的夹角

void main()
{
	const double PI=3.14159;
	double xa,ya,xb,yb,xc,yc;
	cout<<"输入顶点A的经度:"<<endl;
	cin>>xa;
	cout<<"输入顶点A的纬度:"<<endl;
	cin>>ya;
	cout<<"输入起始点B的经度:"<<endl;
	cin>>xb;
	cout<<"输入起始点B的纬度:"<<endl;
	cin>>yb;
	cout<<"输入终点C的经度:"<<endl;
	cin>>xc;
	cout<<"输入终点C的纬度:"<<endl;
	cin>>yc;
	

	xa=xa/57.3;//改成弧度单位
	ya=ya/57.3;
	xb=xb/57.3;
	yb=yb/57.3;
	xc=xc/57.3;
	yc=yc/57.3;

//求起始线段与正北方向的夹角
	double BAN=GetAngle(xa,ya,xa,90,xb,yb);
	if(xb<xa)
	{
	    cout<<" A,B两点组成的线段与经过A点的经线的夹角"<<360-BAN<<endl;
	    BAN=360-BAN;
	}
	else
	{
		cout<<" A,B两点组成的线段与经过A点的经线的夹角"<<BAN<<endl;
	}
	

//求终止线段与正北方向的夹角
	double CAN=GetAngle(xa,ya,xa,90,xc,yc);
	if(xc<xa)
	{
	    cout<<" A,C两点组成的线段与经过A点的经线的夹角"<<360-CAN<<endl;
	    CAN=360-CAN;
	}
	else
	{
		cout<<" A,C两点组成的线段与经过A点的经线的夹角"<<CAN<<endl;
	}
   
//求两条圆弧的顺时针夹角
    double BAC=GetAngle(xa,ya,xb,yb,xc,yc);
	if((BAN-CAN<180)&&(BAN-CAN>0))
	    cout<<"两条弧线的球面顺时针夹角为"<<360-BAC<<endl;
	else
		cout<<"两条弧线的球面顺时针夹角为"<<BAC<<endl;

}



/*================================================================ 
* 函数名:    GetAngle
* 参数:      double xa, ya   (两条弧线相交点的经度和纬度)
*             double xb, yb   (起始弧线的起始点的经度和纬度)
*             double xc, yc   (终止弧线的终点的经度和纬度)
* 功能描述:   两条弧线在球面上相交的角度
* 返回值:    double
* 作 者:     郭建山 20058年11月07日 
================================================================*/ 

double GetAngle(double xa,double ya,double xb,double yb,double xc,double yc)
{
	

	double a,b,c,d,BAC;//定义圆心角和弧线夹角
	
	a=acos(cos(yb)*cos(yc)*cos(xb-xc)+sin(yb)*sin(yc));//求圆心角(弧度表示)
	
	b=acos(cos(ya)*cos(yc)*cos(xa-xc)+sin(ya)*sin(yc));//求圆心角(弧度表示)
	
	c=acos(cos(ya)*cos(yb)*cos(xa-xb)+sin(ya)*sin(yb));//求圆心角(弧度表示)

	
	d=(cos(a)-cos(b)*cos(c))/(sin(b)*sin(c));

	BAC=57.3*acos(d);//求弧线夹角(单位度)
	return BAC;	
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -