主要由类orbitAnimation实现:

头文件:orbitAnimation.h

#pragma once
#include "stdafx.h"
#include "polySolver.h"

class orbitAnimation
{
public:
 orbitAnimation();
 ~orbitAnimation(void);
public:
 double kepler_E(double e,double M);
 double kepler_H(double e,double H);
 double stumpS(double z);
 double stumpC(double z);
 double kepler_U(double dt,double r0,double vr0,double alpha);//全局kepler方程

 void f_and_g(double x, double t,double ro, double a,double *f,double *g);//
 void f_and_g_dot(double x, double r, double ro,double a,double *fdot,double *gdot);//

 void rv_from_rovo(osg::Vec3d R0,osg::Vec3d V0,double t,osg::Vec3d *R,osg::Vec3d *V);//由初始的位置和速度,求出过时间t后的位置与状态
 void coe_from_sv(osg::Vec3d R,osg::Vec3d V,double *_h,double*_e,double *_RA,double* _incl,double* _w,double* _TA,double* _a);//由当前状态得到轨道根数
 void sv_from_coe(double h,double e,double RA,double incl,double w,double TA,osg::Vec3d *r,osg::Vec3d *v);//由轨道根数得到当前状态参数
 bool gibbs(osg::Vec3d R1,osg::Vec3d R2,osg::Vec3d R3,osg::Vec3d *V2);//吉伯斯问题求解,三个矢量求出轨道参数
 
 //以下三个函数为兰伯特问题求解应用
 double func_y(double z,double r1,double r2,double A);
 double func_F(double z,double t,double r1,double r2,double A);
 double func_dFdz(double z,double r1,double r2,double A);//
 bool lambert(osg::Vec3d R1,osg::Vec3d R2,double t,bool clockwise,osg::Vec3d *V1,osg::Vec3d *V2);//兰伯特问题求解:两个矢量和之间的时间,求出轨道参数
 
 double theta_from_F(double,double);//由双曲线的平近点角转换为真近点角
 double E_from_theta(double,double);//由椭圆真近点角求出偏近点角
 double E_to_theta(double e,double E);//由椭圆的偏近点角转换为真近点角

 osg::Vec3d Geocentic_to_near(osg::Vec3d rX,double omiga,double incl,double w);//由地心赤道坐标系转换为近焦点坐标系
 osg::Vec3d Geocentic_from_near(osg::Vec3d rX,double omiga,double i,double w);//由近焦点坐标系转换为地心赤道坐标系
 double omiga_dot(double,double,double);//地球扁率对轨道赤经的影响,返回赤经的变化率
 double w_dot(double,double,double);//地球扁率对轨道近地点辐角的影响,返回近地点辐角的变化率
 osg::Vec3d nearR_reprent(double e,double theta);//已知当前的真近地点角,求出R在近焦点坐标系中的表示
 osg::Vec3d nearV_reprent(double e,double theta);//已知当前的真近地点角,求出V在近焦点坐标系中的表示

 double getJulianDate( int year, int month, int date );//计算一个日期的世界0时儒略日另一种方法
 double caculateJ0(double year,double month,double day);//计算一个日期的世界0时儒略日
 double caculateJD(double year,double month,double day,double hour,double minute,double second);//计算一个日期的的儒略日
 double thetaG0(double year,double month,double day);//计算格林威治世界0时的恒星时,单位为度
 double thetaG_(double year,double month,double day,double hour,double minute,double second);
 double theta_(double year,double month,double day,double hour,double minute,double second,double lon_degree,double lon_min,double lon_sec);//计算任意世界时(UT)的格林威治恒星时
 
 //坐标系转换
 //测站坐标系:参数  纬度phi,恒星时theta,距地面高度是H,则求出位置矢量XYZ(IJK)
 osg::Vec3d phiAndTheta_to_IJK(double phi,double theta,double height);
 void IJK_to_phiAndTheta(osg::Vec3d R,double *phi,double *theta, double *height);
 //测站赤道坐标系:参数  地面上一观测点,赤经alpha,赤纬delta,距离rou
 void r_thetaG_phi_WL_to_alpha_delta(osg::Vec3d r,double thetaG,double phi,double WL,double *alpha,double* delta);
 osg::Vec3d alpha_delta_to_IJK(double alpha,double delta);//由赤经赤纬求出观测单位矢量
 //测站地平坐标系: A方位角  a高低角
 osg::Vec3d Geocentic_to_Aa(double phi,double theta,osg::Vec3d R);//地心坐标系转换为测站地平坐标系,A方位角,a 高低角
 osg::Vec3d Geocentic_from_Aa(double phi,double theta,double A,double a);//测站地平坐标系转换为地心坐标系,A方位角,a 高低角
 //由斜距,角位置及其变化率由轨道状态量
 void rv_from_observer(double rho,double rhodot,double A,double Adot,double a,double adot,double theta,double phi,double H,osg::Vec3d * R,osg::Vec3d *V);
 void gauss(osg::Vec3d Rho1,osg::Vec3d Rho2,osg::Vec3d Rho3,osg::Vec3d R1,osg::Vec3d R2,osg::Vec3d R3,double t1,double t2,double t3,osg::Vec3d *R,osg::Vec3d *V);
 //获得太阳的位置
 osg::Vec3d getSunPosition(int year, int month, int date, double hoursUTC );
 //判断当前轨道是不是活动轨道
 bool isOrbitActive(int i);
 double theta_from_t(double t);//由时间求出真近点角
 void position_caculate();
private:
 //6个轨道根数
 double e;bool b_e;//偏心率
 double h;bool b_h;//角动量
 double incl;//轨道倾角
 double omiga;//
 double w;
 double TA;//真近点角

 double a;bool b_a;//半长轴
 double alpha;bool b_alpha;//半长轴倒数
 double T;bool b_T;//周期
 int style;bool b_style;//轨道类型,0圆,1椭圆,2抛物线,3双曲线

 double Me;bool b_Me;//如果是椭圆,平近点角
 double Mh;bool b_Mh;//如果是双曲线,平近点角
 double kafi;bool b_kafi;//全局近点角
 double E;bool b_E;//如果是椭圆,偏近点角
 double F;bool b_F;//如果是双曲线圆,偏近点角
 double z;bool b_z;//alpha*kafi^2
 double rp;bool b_rp;//近地点距离
 double ra;bool b_ra;//远地点距离
 //瞬时变量
 osg::Vec3d *R;
 osg::Vec3d *V;
 double omigaDot;
 double wDot;
 osg::DoubleArray *current_time;
 //控制变量
 bool if_drawCircle;
 //求解多項式
 polySolver *solver;

 double elon;
 double elat;//星下点坐标

 bool set_ra(double);
 bool set_rp(double);

 bool set_e(double);
 bool set_a(double);
 bool set_h(double);
 bool set_omiga(double);
 bool set_w(double);
 bool set_incl(double);

 bool set_T(double);
 bool set_E(double);
 bool set_Me(double);
 bool set_style(int);
 bool set_F(double);
 bool set_Mh(double);
 bool set_alpha(double);
 bool set_TA(double);
 void set_CurrentTime(osg::DoubleArray *);
 bool set_R(osg::Vec3d* temp);
 bool set_V(osg::Vec3d* temp);

 bool set_omiga_dot(double);
 bool set_w_dot(double);
 bool set_drawCircle(bool);//例子用于运算,不涉及轨道绘制
};


源文件:

#include "stdafx.h"
#include "orbitAnimation.h"

orbitAnimation::orbitAnimation()
{
 if_drawCircle = true;
 R = new osg::Vec3d();
 V = new osg::Vec3d();
 incl = e = a = T = elon = elat = rp = ra = omiga = w = h = TA = 0.0;
 current_time = NULL;
}
orbitAnimation::~orbitAnimation(void)
{
 delete[] R;
 delete[] V;
}
bool orbitAnimation::set_ra(double p_ra)
{
 if(p_ra==0) return false;
 ra = p_ra;
 b_ra = 1;
 return 1;
}
bool orbitAnimation::set_rp(double p_rp)
{
 if(p_rp==0) return false;
 rp = p_rp;
 b_rp = 1;
 return 1;
}

bool orbitAnimation::set_e(double temp)
{
 if(temp<0) return false;
 e = temp;
 b_e = 1;
 return 1;
}
bool orbitAnimation::set_h(double temp)
{
 if(temp==0) return false;
 h = temp;
 b_h = 1;
 return 1;
}
bool orbitAnimation::set_T(double temp)
{
 if(temp==0) return false;
 T = temp;
 b_T = 1;
 return 1;
}
bool orbitAnimation::set_E(double temp)
{
 if(temp==0) return false;
 E = temp;
 b_E = 1;
 return 1;
}
bool orbitAnimation::set_Me(double temp)
{
 if(temp==0) return false;
 Me = temp;
 b_Me = 1;
 return 1;
}
bool orbitAnimation::set_style(int temp)
{
 if(temp<0) return false;
 style = temp;
 b_style = 1;
 return 1;
}
bool orbitAnimation::set_F(double temp)
{
 if(temp==0) return false;
 F = temp;
 b_F = 1;
 return 1;
}
bool orbitAnimation::set_Mh(double temp)
{
 if(temp==0) return false;
 Mh = temp;
 b_Mh = 1;
 return 1;
}
bool orbitAnimation::set_alpha(double temp)
{
 if(temp==0) return false;
 alpha = temp;
 b_alpha = 1;
 return 1;
}
bool orbitAnimation::set_omiga(double temp)//升交点赤经
{
 omiga = temp;
 return 1;
}
bool orbitAnimation::set_w(double temp)
{
 w = temp;
 return 1;
}
bool orbitAnimation::set_incl(double temp)
{
 incl = temp;
 return 1;
}
bool orbitAnimation::set_TA(double temp)
{
 TA = temp;
 return 1;
}
bool orbitAnimation::set_drawCircle(bool temp)
{
 if_drawCircle = temp;
 return 1;
}
//已知某一个位置,真近点角已知,由距离,速度的大小,求偏心率
double orbitAnimation::theta_from_F(double F,double e)
{
 return 2* atan(sqrt((e+1)/(e-1))*tanh(0.5*F));
}
bool orbitAnimation::set_R(osg::Vec3d *temp)
{
 R = temp;
 return 1;
}
bool orbitAnimation::set_V(osg::Vec3d *temp)
{
 V = temp;
 return 1;
}
bool orbitAnimation::set_a(double temp)
{
 a = temp;
 return 1;
}
bool orbitAnimation::set_omiga_dot(double temp)
{
 omigaDot = temp;
 return 1;
}
bool orbitAnimation::set_w_dot(double temp)
{
 wDot = temp;
 return 1;
}
/**椭圆轨道的开普勒方程: Me=E-e*sinE
Me是平近点角;E是偏近点角
由位置求时刻的方法:先由真近近点角theta,求出偏近点角E,由E求出平近点角Me,由Me求出t.
由时刻求位置的方法:由t求出Me,由Me应用计算机求出E,由E求出theta.*/
double orbitAnimation::kepler_E(double e,double M)
{
 double E;
 if( M<osg::PI )
  E = M + e/2;
 else
  E = M - e/2;
 double ratio = 1.0;
 while( abs(ratio) >error)
 {
  ratio = (E-e*sin(E)-M)/(1-e*cos(E));
  E = E-ratio;
 }
 return E;
}
//双曲线开普勒方程
double orbitAnimation::kepler_H(double e,double H)
{
 double F;
 F = H;
 double ratio = 1.0;
 while( abs(ratio) >error)
 {
  ratio = (e*sinh(F)-F-H)/(e*cosh(F)-1);
  F = F-ratio;
 }
 return F;
}
//斯达姆夫函数S(z)
double orbitAnimation::stumpS(double z)
{
 double S = 0.0;
 if(z>0)
  S = (sqrt(z) - sin( sqrt(z))) / pow( (sqrt(z)), 3);
 else if( z<0 )
  S = (sinh( sqrt(-z)) - sqrt(-z)) / pow( sqrt(-z), 3);
 else
  S = 1/6;
 return S;
}
//斯达姆夫函数C(z)
double orbitAnimation::stumpC(double z)
{
 double C = 0.0;
 if(z>0)
  C = ( 1 - cos( sqrt(z))) / z;
 else if( z<0 )
  C = (cosh( sqrt(-z)) - 1 ) / (-z);
 else
  C = 1/2;
 return C;
}
/**用牛顿法角全局开普勒方程
//参数:dt是时间的增量,r0是t=t0时刻的向径,vr0是t=t0时的径向速度,alpha是长半轴的倒数*/
double orbitAnimation::kepler_U(double dt,double r0,double vr0,double a)
{
 int nMax = 1000;//选代最大次数
 int n = 0;//当前的选代次数
 double ratio = 1.0;//初始比率
 double C;//斯达姆夫函数C(z)的当前值
 double S;//斯达姆夫函数S(z)的当前值
 double F;//构造的全局变量函数f(x)值
 double dFdx;//f(x)导数的当前值
 double x = sqrt(mu) * abs(a) * dt;//全局近点角
 while( (abs(ratio)>error) && (n<=nMax) )
 {
  n++;
  C = stumpC(a*x*x);
  S = stumpS(a*x*x);
  F = r0*vr0/sqrt(mu) * x*x*C + (1-a*r0)*x*x*x*S + r0*x-sqrt(mu)*dt;
  dFdx = ( r0*vr0/sqrt(mu)  )*x*(1-a*x*x*S) + (1-a*r0)*x*x*C + r0;
  ratio = F/dFdx;
  x = x-ratio;
 }
 if(n>nMax)
  return 0;
 else
  return x;
}
//基于全局变量的拉格朗日系数f g的求解
void orbitAnimation::f_and_g(double x, double t,double ro, double a,double *f,double *g)
{
 double z=a*x*x;
 *f = 1-x*x*stumpC(z)/ro;
 *g = t-x*x*x*stumpS(z)/sqrt(mu);
}
//基于全局变量的拉格朗日系数fdot,gdot的求解
void orbitAnimation::f_and_g_dot(double x, double r, double ro,double a,double *fdot,double *gdot)
{
 double z=a*x*x;
 *fdot = sqrt(mu)*x*(z*stumpS(z)-1)/(r*ro);
 *gdot=1-x*x*stumpC(z)/r;
}
//R0,V0为初始时刻的卫星状态向量,R,V是t 时刻后的状态向量
void orbitAnimation::rv_from_rovo(osg::Vec3d R0,osg::Vec3d V0,double t,osg::Vec3d *R,osg::Vec3d *V)
{
 double r0 = R0.length();//模
 double v0 = V0.length();//模
 h = r0*v0;
 double vr0 = R0*V0 / r0;
 alpha = 2/r0 - v0*v0/mu;
 a = 1.0/alpha;
 kafi = kepler_U(t,r0,vr0,alpha);

 double *f,*g;
 double *fdot,*gdot;
 f= new double [1]; g = new double [1];
 fdot = new double [1]; gdot = new double [1];
 f_and_g(kafi,t,r0,alpha,f,g);
 (*R) = R0*(*f) + V0*(*g);
 double r = (*R).length();
 f_and_g_dot(kafi,r,r0,alpha,fdot,gdot);
 (*V) = R0*(*fdot) + V0*(*gdot);
}
//由状态向量计算轨道根数
void orbitAnimation::coe_from_sv(osg::Vec3d R,osg::Vec3d V,double *_h,double*_e,double *_RA,double* _incl,double* _w,double* _TA,double* _a)
{
 //RA升交点赤经 incl轨道倾角; w近地点辐角
 double r = R.length();
 double v = V.length();
 double vr = R*V/r;
 osg::Vec3d H = R^V;
 double h = H.length();
 (*_h) = h;
 double incl = acos(H.z()/h);//轨道倾角
 (*_incl) = incl;
 osg::Vec3d N = osg::Vec3d(0.0,0.0,1.0) ^ H;
 double n = N.length();
 //RA升角点赤经
 double RA = 0;
 if(abs(n)>eps) RA = acos(N.x()/n);
 if(N.y()<0) RA = 2*osg::PI-RA;
 (*_RA) = RA;
 osg::Vec3d E = ( R* (v*v-mu/r) - V *(r*vr))*(1/mu) ;
 double e = E.length();
 (*_e) = e;
 double w;
 if(abs(n)>eps)
 {
  if(e>eps)
  {
   w = acos( (N*E)/(n*e) );
   if( E.z()<0)
    w = 2*osg::PI-w;
  }
  else w = 0;
 }
 else
 {
  w = 0;
 }
 (*_w) = w;
 double TA;
 if( e>eps)
 {
  TA = acos( (E*R)/(e*r) );
  if( vr<0 ) TA = 2*osg::PI -TA;
 }
 else
 {
  osg::Vec3d cp = N^R;
  if(cp.z()>=0) TA = acos( (N*R)/(n*r) );
  else
   TA = 2*osg::PI - acos( (N*R)/(n*r) );
 }
 (*_TA) = TA;
 double a = (h*h)/( mu*(1-e*e) );
 (*_a) = a;
}
//由轨道概数计算状态向量
void orbitAnimation::sv_from_coe(double h,double e,double RA,double incl,double w,double TA,osg::Vec3d *r,osg::Vec3d *v)
{
 osg::Vec3d rp = ( (osg::Vec3d(1.0,0.0,0.0) * cos(TA) ) + osg::Vec3d(0.0,1.0,0.0) * sin(TA) ) * (h*h/mu) * (1/(1+e*cos(TA) ) );//4.37式
 osg::Vec3d vp = ( ( osg::Vec3d(1.0,0.0,0.0) * -sin(TA) ) + ( osg::Vec3d(0.0,1.0,0.0) * ( e+cos(TA) ) )) * (mu/h) ;
 //下面这种是分解方式
 /*osg::Matrixd R3_W(  cos(RA),sin(RA),0,0,
 -sin(RA),cos(RA),0,0,
 0  ,     0      ,1,0,
 0,0,0,0);

 osg::Matrixd R1_i( 1   ,0         ,0,0,
 0    ,cos(incl),sin(incl),0,
 0    ,-sin(incl),cos(incl),0,
 0,0,0,0);

 osg::Matrixd R3_w(  cos(w),sin(w),0,0,
 -sin(w),cos(w),0,0,
 0 ,     0 ,    1,0,
 0,0,0,0);
 osg::Matrixd temp1,temp2,temp3,hellp;;
 osg::Matrixd Q_Xx = R3_w*R1_i* R3_W;
 osg::Matrixd Q_xX;
 for(int i=0;i<4;i++)
 {
 for(int j=0;j<4;j++)
 {
 Q_xX(i,j)=Q_Xx(j,i);
 }

 }
 (*r) = Q_xX.transform3x3(Q_xX,rp);
 (*v) = Q_xX.transform3x3(Q_xX,vp);*/
 //下面是合成矩阵方式
 (*r) = Geocentic_from_near(rp,RA,incl,w);
 (*v) = Geocentic_from_near(vp,RA,incl,w);
}
bool orbitAnimation::gibbs(osg::Vec3d R1,osg::Vec3d R2,osg::Vec3d R3,osg::Vec3d *V2)
{
 double r1,r2,r3;
 double n ;
 double d ;

 r1 = R1.length();
 r2 = R2.length();
 r3 = R3.length();

 osg::Vec3d C12 = R1^R2;
 osg::Vec3d C23 = R2^R3;
 osg::Vec3d C31 = R3^R1;

 osg::Vec3d C23Plus = C23;
 C23Plus.normalize();
 osg::Vec3d UR1Plus = R1;
 UR1Plus.normalize();

 if( (C23Plus*UR1Plus) > 1e-4 ) return false;

 osg::Vec3d N = C23*r1 + C31*r2 + C12*r3; n=N.length();
 osg::Vec3d D = C12+C23+C31; d = D.length();

 osg::Vec3d S = R1*(r2-r3) + R2*(r3-r1) + R3*(r1-r2);
 (*V2) = ((D^R2)/r2+S)*sqrt(mu/(n*d));

 return true;
}

double orbitAnimation::func_y(double z,double r1,double r2,double A)
{
 return r1 + r2 + A*(z*stumpS(z)-1)/sqrt(stumpC(z));
}
double orbitAnimation::func_F(double z,double t,double r1,double r2,double A)
{
 double yz = func_y(z,r1,r2,A);
 double cz = stumpC(z);
 double first = yz/cz;
 double sz = stumpS(z);
 double second = pow(first,1.5);
 second = second*sz;
 return second + A*sqrt(yz) - sqrt(mu)*t;
}
double orbitAnimation::func_dFdz(double z,double r1,double r2,double A)
{
 double yz = func_y(z,r1,r2,A);
 if(z == 0)
 {
  return (sqrt(2.0) * pow(yz,1.5) / 40.0 )+ ( A/8.0*( sqrt(yz)+A*sqrt(0.5/yz)));
 }
 else
 {
  return pow(yz/stumpC(z),1.5)*((0.5/z)*(stumpC(z)-1.5*stumpS(z)/stumpC(z))+0.75*stumpS(z)*stumpS(z)/stumpC(z))+
   0.125*A*((3*stumpS(z)*sqrt(yz)/stumpC(z)) + (A*sqrt(stumpC(z)/yz)));
 }
}
bool orbitAnimation::lambert(osg::Vec3d R1,osg::Vec3d R2,double t,bool clockwise,osg::Vec3d *V1,osg::Vec3d *V2)
{
 double r1,r2;
 double delta_theta;
 r1 = R1.length();
 r2 = R2.length();

 double judge = (R1^R2).z();
 double theta = acos( (R1*R2) / (r1*r2) ); delta_theta = theta;
 if(judge>=0)
 {
  if(!clockwise) delta_theta = 2*osg::PI - theta;
 }
 else
 {
  if(clockwise) delta_theta = 2*osg::PI - theta;
 }

 double A = sin(delta_theta)*sqrt( (r1*r2) / (1-cos(delta_theta) ) );
 double z = -100;

 /**解出初始的z*/
 double Fz = func_F(z,t,r1,r2,A);

 while( (Fz< 0) || (osg::isNaN(Fz)) )
 {
  Fz = func_F(z,t,r1,r2,A);
  z+=0.1;
 }
 double ratio = 1.0;
 int n = 0;
 while( ( abs(ratio)>eps) && (n<=nmax) )
 {
  n = n+1;
  ratio = func_F(z,t,r1,r2,A)/func_dFdz(z,r1,r2,A);
  z = z-ratio;
 }
 if(n>=nmax) return false;
 double yz = func_y(z,r1,r2,A);
 double f = 1-yz/r1;
 double g = A*sqrt(yz/mu);
 double gdot = 1-yz/r2;
 *V1 = (R2-R1*f)*(1/g);
 *V2 = (R2*gdot-R1)*(1/g);

 return 1;
}
osg::Vec3d orbitAnimation::Geocentic_to_near(osg::Vec3d rX,double omiga,double i,double w)
{
 osg::Vec3d temp; osg::Matrixd mt;
 double cos_omiga = cos(omiga); double cos_w = cos(w);
 double sin_omiga = sin(omiga); double sin_w = sin(w);
 double cos_i = cos(i);  double sin_i = sin(i);
 mt.set( cos_omiga*cos_w-sin_omiga*sin_w*cos_i,    sin_omiga*cos_w+cos_omiga*cos_i*sin_w,     sin_i*sin_w,  0,
  -cos_omiga*sin_w-sin_omiga*cos_w*cos_i,   -sin_omiga*sin_w+cos_omiga*cos_i*cos_w,     sin_i*cos_w,  0,
  sin_i*sin_omiga,                         -cos_omiga*sin_i,                           cos_i,        0,
  0,0,0,1);

 temp = mt*rX;
 return temp;
}
osg::Vec3d orbitAnimation::Geocentic_from_near(osg::Vec3d rX,double omiga,double i,double w)
{
 osg::Vec3d temp; osg::Matrixd mt;
 double cos_omiga = cos(omiga); double cos_w = cos(w);
 double sin_omiga = sin(omiga); double sin_w = sin(w);
 double cos_i = cos(i);  double sin_i = sin(i);
 mt.set( cos_omiga*cos_w-sin_omiga*sin_w*cos_i,    sin_omiga*cos_w+cos_omiga*cos_i*sin_w,     sin_i*sin_w,  0,
  -cos_omiga*sin_w-sin_omiga*cos_w*cos_i,   -sin_omiga*sin_w+cos_omiga*cos_i*cos_w,     sin_i*cos_w,  0,
  sin_i*sin_omiga,                         -cos_omiga*sin_i,                           cos_i,        0,
  0,0,0,1);

 mt.invert(mt);
 temp = mt*rX;
 return temp;
}
double orbitAnimation::omiga_dot(double e,double a,double i)
{
 return -(1.5*(sqrt(mu)*J2*re*re)/((pow(1-e*e,2.0))*pow(a,3.5)))*cos(i);
}
double orbitAnimation::w_dot(double e,double a,double i)
{
 double k_para;
 k_para = -(1.5*(sqrt(mu)*J2*re*re)/((pow(1-e*e,2))*pow(a,3.5)));
 return k_para*(2.5*sin(i)*sin(i)-2);
}
double orbitAnimation::E_from_theta(double theta,double e)
{
 return 2* atan(sqrt((1-e)/(e+1))*tan(0.5*theta));
}
double orbitAnimation::E_to_theta(double e,double E)
{
 return 2* atan(sqrt((1+e)/(1-e))*tan(0.5*E));
}
osg::Vec3d orbitAnimation::nearR_reprent(double e,double TA)
{
 return ( (osg::Vec3d(1.0,0.0,0.0) * cos(TA) ) + osg::Vec3d(0.0,1.0,0.0) * sin(TA) ) * (h*h/mu) * (1/(1+e*cos(TA) ) );
}
osg::Vec3d orbitAnimation::nearV_reprent(double e,double TA)
{
 return ( ( osg::Vec3d(1.0,0.0,0.0) * -sin(TA) ) + ( osg::Vec3d(0.0,1.0,0.0) * ( e+cos(TA) ) )) * (mu/h) ;
}
double orbitAnimation::caculateJ0(double year,double month,double day)
{
 double j0 = 367*year-int(7*(year+int((month+9)/12))/4) + int(275*month/9) + day +1721013.5;
 return j0;
}
double orbitAnimation::caculateJD(double year,double month,double day,double hour,double minute,double second)
{
 double J0 = caculateJ0(year,month,day);
 double UT = hour + minute/60 + second/3600;
 double JD = J0 + UT/24;
 return JD;
}
double orbitAnimation::thetaG0(double year,double month,double day)
{
 double J0 = caculateJ0(year,month,day);//计算世界0时刻的儒略日
 double T0 = (J0-2451545)/36525;//计算J0与J2000之间的儒略世纪
 double theta_g0 = 100.4606184+36000.77004*T0+0.000387933*T0*T0-2.583e-8*T0*T0*T0;
 if(theta_g0>=360) theta_g0 = theta_g0-int(theta_g0/360) * 360;
 else if(theta_g0<0) theta_g0 = theta_g0 - (int(theta_g0/360)-1) * 360;

 return theta_g0;
}
double orbitAnimation::theta_(double year,double month,double day,double hour,double minute,
 double second,double lon_degree,double lon_min,double lon_sec)
{
 //首先对经度进行换算和限制
 if(lon_degree<0) lon_degree-=360;
 double EL = lon_degree + lon_min/60 + lon_sec/3600;

 double G0 = thetaG0(year,month,day);
 double UT = hour + minute/60 + second/3600;
 double G  = G0 + (360.98564724*UT)/24;

 double theta = G + EL;

 if(theta>=360) theta = theta-int(theta/360) * 360;
 else if(theta<0) theta = theta - (int(theta/360)-1) * 360;

 return theta;
}

osg::Vec3d orbitAnimation::phiAndTheta_to_IJK(double phi,double theta,double height)
{
 //
 osg::Vec3d R;
 double X; double Y;double Z;
 double sin_latitude = sin(phi);
 double cos_latitude = cos(phi);
 double _eccentricitySquared = 2*f-f*f;
 double N = re / sqrt( 1.0 - _eccentricitySquared*sin_latitude*sin_latitude);
 X = (N+height)*cos_latitude*cos(theta);
 Y = (N+height)*cos_latitude*sin(theta);
 Z = (N*(1-_eccentricitySquared)+height)*sin_latitude;
 R.set(X,Y,Z);
 return R;
}
void orbitAnimation::IJK_to_phiAndTheta(osg::Vec3d R,double *phi1,double *theta1, double *height1)
{
 double X = R.x();  double Y = R.y();  double Z = R.z();
 double p = sqrt(X*X + Y*Y);
 double theta = atan2(Z*re , p*re_p);
 double eDashSquared = (re*re - re_p*re_p)/(re_p*re_p);
 double _eccentricitySquared = 2*f-f*f;
 double sin_theta = sin(theta);
 double cos_theta = cos(theta);

 (*phi1) = atan( (Z + eDashSquared*re_p*sin_theta*sin_theta*sin_theta) /
  (p - _eccentricitySquared*re*cos_theta*cos_theta*cos_theta) );
 (*theta1) = atan2(Y,X);

 double sin_latitude = sin(*phi1);
 double N = re / sqrt( 1.0 - _eccentricitySquared*sin_latitude*sin_latitude);

 (*height1) = p/cos(*phi1) - N;
}
void orbitAnimation::r_thetaG_phi_WL_to_alpha_delta(osg::Vec3d r,double thetaGs,double phi,double WL,double *alpha,double* delta)
{
 double theta = thetaGs + WL;//当地恒星时
 osg::Vec3d Ro = phiAndTheta_to_IJK(phi,theta,0);//地面观测站的矢量
 osg::Vec3d rou = r - Ro;
 rou.normalize();

 (*delta) = asin(rou.z());
 double alpha1 = asin(rou.y()/cos(*delta));
 double alpha2 = acos(rou.x()/cos(*delta));
 (*alpha) = alpha2;
}
osg::Vec3d orbitAnimation::Geocentic_to_Aa(double phi,double theta,osg::Vec3d R)
{
 osg::Matrixd mat;
 osg::Vec3d Rs;
 double cosTheta;
 double sinTheta;
 double cosPhi;
 double sinPhi;
 cosTheta  = cos(theta); sinTheta = sin(theta);
 cosPhi = cos(phi); sinPhi = sin(phi);
 mat.set(-sinTheta,        cosTheta,       0,       0,
  -sinPhi*cosTheta,-sinPhi*sinTheta,cosPhi,  0,
  cosPhi*cosTheta,cosPhi*sinTheta, sinPhi,0,
  0,              0,               0,       1);
 Rs = mat*R;
 return Rs;
}
osg::Vec3d orbitAnimation::Geocentic_from_Aa(double phi,double theta,double A,double a)
{
 osg::Matrixd mat;
 double cosTheta;
 double sinTheta;
 double cosPhi;
 double sinPhi;
 cosTheta  = cos(theta); sinTheta = sin(theta);
 cosPhi = cos(phi); sinPhi = sin(phi);
 mat.set(-sinTheta,        cosTheta,       0,       0,
  -sinPhi*cosTheta,-sinPhi*sinTheta,cosPhi,  0,
  cosPhi*cosTheta,cosPhi*sinTheta, sinPhi,0,
  0,              0,               0,       1);
 mat.invert(mat);//地平到地心变换矩阵
 double rou_x = cos(a)*sin(A);
 double rou_y = cos(a)*cos(A);
 double rou_z = sin(a);
 osg::Vec3d rou_unit;
 rou_unit.set(rou_x,rou_y,rou_z);

 osg::Vec3d Rs = mat*rou_unit;//地平在地心的表达式:xI  + yJ  +zK
 return Rs;
}

void orbitAnimation::rv_from_observer(double rho,double rhodot,double A,double Adot,double a,
 double adot,double theta,double phi,double H,osg::Vec3d * R,osg::Vec3d *V)
{
 double height = 0.0;
 osg::Vec3d omega(0,0,omegaEarth);
 osg::Vec3d Ro = phiAndTheta_to_IJK(phi,theta,height);
 osg::Vec3d Rdot = omega^Ro;
 double dec = asin(cos(phi)*cos(A)*cos(a) + sin(phi)*sin(a));
 osg::notify(osg::NOTICE)<<"delta为:"<<osg::RadiansToDegrees(dec)<<std::endl;
 double h = acos( (cos(phi)*sin(a) -sin(phi)*cos(A)*cos(a) )/cos(dec));
 if ( (A>0) && (A<osg::PI) )
 {
  h = 2*osg::PI - h;
 }
 osg::notify(osg::NOTICE)<<"h为:"<<osg::RadiansToDegrees(h)<<std::endl;
 double RA = theta - h;
 osg::notify(osg::NOTICE)<<"RA为:"<<osg::RadiansToDegrees(RA)<<std::endl;
 osg::Vec3d Rho(cos(RA)*cos(dec),sin(RA)*cos(dec),sin(dec));
 osg::Vec3d r = Ro + Rho*rho;
 //
 (*R) = r;
 double decdot = (-Adot*cos(phi)*sin(A)*cos(a)+adot*(sin(phi)*cos(a)-cos(phi)*cos(A)*sin(a))) / cos(dec);
 double RAdot = earth_omiga + (Adot*cos(A)*cos(a)-adot*sin(A)*sin(a)+decdot*sin(A)*cos(a)*tan(dec))/(cos(phi)*sin(a)-sin(phi)*cos(A)*cos(a));
 osg::Vec3d Rhodot (-RAdot*sin(RA)*cos(dec) - decdot*cos(RA)*sin(dec),RAdot*cos(RA)*cos(dec) - decdot*sin(RA)*sin(dec),decdot*cos(dec));
 osg::Vec3d v = Rdot + Rho*rhodot + Rhodot*rho;

 (*V) = v;
}
void orbitAnimation::gauss(osg::Vec3d Rho1,osg::Vec3d Rho2,osg::Vec3d Rho3,osg::Vec3d R1,osg::Vec3d R2,osg::Vec3d R3,double t1,double t2,double t3,osg::Vec3d *R,osg::Vec3d *V)
{
 double  tau1 = t1 -t2;
 double  tau3 = t3 -t2;
 double  tau  = t3 -t1;

 osg::Vec3d p1 = Rho2^Rho3;
 osg::Vec3d p2 = Rho1^Rho3;
 osg::Vec3d p3 = Rho1^Rho2;

 double D0 = Rho1*p1;
 osg::Matrixd D;
 D.set(R1*p1,R1*p2,R1*p3,0,
  R2*p1,R2*p2,R2*p3,0,
  R3*p1,R3*p2,R3*p3,0,
  0,0,0,1);
 double E = R2*Rho2;
 double A = 1.0/D0 *( -D(0,1)*(tau3/tau) + D(1,1) + D(2,1)*(tau1/tau));
 double B = (1.0/(6*D0))*(D(0,1)*(tau3*tau3-tau*tau)*(tau3/tau) + D(2,1)*(tau*tau-tau1*tau1)*(tau1/tau));
 double a = -(A*A + 2*A*E +R2.length2());
 double b = -2*mu*B*(A+E);
 double c = -(mu*B)*(mu*B);
 //求一个8次多项式的根:x^8+aX^6+bx^3+c = 0
 double coeff[]={1,0,a,0,0,b,0,0,c};
 int n = sizeof(coeff)/sizeof(double)-1;
 solver = new polySolver(coeff,n);
 solver->Bairstow();

 double *RootsReal, *RootsImag;
 RootsReal=new double[n];
 RootsImag=new double[n];
 RootsReal=solver->getRootsr();
 RootsImag=solver->getRootsi();
 double x = 0;//根变量,|R2| =r2=x
 for(int i=0; i<n; i++)
 {
  if(( RootsImag[i]== 0) && (RootsReal[i]>0) )
  {
   x = RootsReal[i];
   break;
  }
 }
 double f1 = 1-0.5*mu*tau1*tau1/(x*x*x);
 double f3 = 1-0.5*mu*tau3*tau3/(x*x*x);
 double g1 = tau1- 1.0*mu*tau1*tau1*tau1/(6.0*x*x*x);
 double g3 = tau3- 1.0*mu*tau3*tau3*tau3/(6.0*x*x*x);

 double rho2 = A + mu * B/(x*x*x);
 double rho1 = (1/D0) *((6*(D(2,0)*tau1/tau3 + D(1,0)*tau/tau3)*x*x*x +
  mu*D(2,0)*(tau*tau-tau1*tau1)*tau1/tau3)/(6*x*x*x + mu*(tau*tau-tau3*tau3))-D(0,0));
 double rho3 = (1/D0) *((6*(D(0,2)*tau3/tau1 - D(1,2)*tau/tau1)*x*x*x +
  mu*D(0,2)*(tau*tau-tau3*tau3)*tau3/tau1)/(6*x*x*x + mu*(tau*tau-tau1*tau1))-D(2,2));

 osg::Vec3d r1 = R1 + Rho1*rho1;
 osg::Vec3d r2 = R2 + Rho2*rho2;
 osg::Vec3d r3 = R3 + Rho3*rho3;
 osg::Vec3d v2 = (-r1*f3 + r3*f1)/(f1*g3 -f3*g1);
 //下面开始近似求解
 osg::Vec3d r_old = r2;
 osg::Vec3d v_old = v2;

 double rho1_old = rho1;
 double rho2_old = rho2;
 double rho3_old = rho3;

 double diff1; double diff2; double diff3;
 diff1 = diff2 = diff3 = 1.0;
 n = 0;
 double ro; //r2的模
 double vo;//v2的模
 double vro;//矢量2的径向速度大小
 double alpha;//半长轴的倒数
 double x1;//以矢量2为初始,经过t1到达1位置的全局近点角
 double x3;//以矢量2为初始,经过t3到达3位置的全局近点角
 double *ff1 = new double [1];
 double *ff3 = new double [1];
 double *gg1 = new double [1];
 double *gg3 = new double [1];//基于全局近点角的拉格系数

 double c1;
 double c3;//组合系数
 while( (diff1>error) && (diff2>error) && (diff3>error) && (n<nmax))
 {
  n = n+1;

  ro = r2.length();
  vo = v2.length();
  vro = (v2*r2)/ro;
  alpha = 2/ro - vo*vo/mu;
  x1 = kepler_U(tau1,ro,vro,alpha);
  x3 = kepler_U(tau3,ro,vro,alpha);
  //计算1,3位置的拉格系数
  f_and_g(x1,tau1,ro,alpha,ff1,gg1);
  f_and_g(x3,tau3,ro,alpha,ff3,gg3);

  f1 = (f1+(*ff1))/2; f3 = (f3+(*ff3))/2;
  g1 = (g1+(*gg1))/2; g3 = (g3+(*gg3))/2;

  c1 =  g3/(f1*g3 - f3*g1);
  c3 = -g1/(f1*g3 - f3*g1);

  rho1 = (1/D0)*(-D(0,0) + (1/c1)*D(1,0) -c3*D(2,0)/c1 );
  rho2 = (1/D0)*(-c1*D(0,1) + D(1,1) -c3*D(2,1));
  rho3 = (1/D0)*(-c1*D(0,2)/c3 + (1/c3)*D(1,2) -D(2,2));

  r1 = R1 + Rho1*rho1;
  r2 = R2 + Rho2*rho2;
  r3 = R3 + Rho3*rho3;

  v2 = (r1*(-f3) + r3*f1)/(g3*f1 - g1*f3);
  diff1 = abs(rho1-rho1_old);
  diff2 = abs(rho2-rho2_old);
  diff3 = abs(rho3-rho3_old);

  rho1_old = rho1;
  rho2_old = rho2;
  rho3_old = rho3;
 }
 (*R) = r2;
 (*V) = v2;
}

osg::Vec3d orbitAnimation::alpha_delta_to_IJK(double alpha,double delta)
{
 osg::Vec3d rho;
 double cosd = cos(delta);
 double cosa = cos(alpha);
 double sina = sin(alpha);
 double sind = sin(delta);

 rho.set(cosd*cosa,cosd*sina,sind);
 return rho;
}

double orbitAnimation::theta_from_t(double t)
{
 Me = t*2*osg::PI/(T);
 E = kepler_E((e),(Me));
 return 2*atan( sqrt( (1+(e))/(1-(e)) ) * tan((E)/2.0) );
}

void orbitAnimation::set_CurrentTime(osg::DoubleArray *t)
{
 current_time = t;
}
————————————————
版权声明:本文为CSDN博主「shirro123」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/shirro123/article/details/47134329

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. java基础回顾1

    java基础回顾1回顾1回顾2类体{实例变量;实例方法;静态变量;静态方法;构造方法;静态代码块;实例语句块;方法(){局部变量;} }回顾1 /*1.类加载机制&#xff1a;在程序执行之前&#xff0c;把需要加载的类全部加载到jvm中。2.先完成加载才会执行main方法 */ public class Review{…...

    2024/4/14 5:53:44
  2. springboot 通过参数指定加载 profile 不生效

    今天在部署项目时, 发现自己在命令上明明指定了 profile, 但是仍然加载了 default 的 profile, 百思不得其解. 后来发现是参数的顺序写法了. 错误写法 java -jar ups_server.jar -Dspring.profiles.activestaging注意, 如果是 -D 的参数应该在 -jar 前面, 如果是 – 的参数应…...

    2024/4/14 5:53:44
  3. 三元运算符?:

    寒假在家开始复习c语言&#xff0c;看到三元运算符的时候有感而发&#xff0c;毕竟当时自学的时候这一块有点模糊&#xff0c;所以我特意写个博文来总结一下 三元运算符&#xff0c;意味着有3个量要处理&#xff0c;对于&#xff1f;&#xff1a;有这样的一个格式&#xff1a;…...

    2024/4/7 16:44:28
  4. 个人搭建网站(个人搭建网站服务器)

    如果你是学生&#xff0c;拥有学生邮箱&#xff0c;可以在GITHUB教育版申请学生优惠。有免费的亚马逊AWS 150刀优惠卡&#xff0c;以及namecheap免费.me域名和ssl证书一年。还有其他很多优惠。 注意&#xff1a;请不要滥用申请机会&#xff0c;不要以薅羊毛的精神对待GITHUB的…...

    2024/4/16 21:58:13
  5. 类人猿安卓手游封包技术教程

    声明&#xff1a;本教程只做计算机协议安全技术研究&#xff0c;禁止非法用途&#xff0c;后果自负。 技术原理是目前唯一的一套针对X64游戏程序和安卓模拟器。无需代理软件、无需驱动、测试和编写方便。教程提供半源码&#xff0c;但是全部核心源码都会在课程里面展示给大家&a…...

    2024/4/18 8:39:55
  6. 【汇编】MIPS32指令集实现图的算法之拓扑排序

    【汇编】MIPS32指令集实现图的算法之拓扑排序计算机系统设计课设作业&#xff0c;要求用MIPS32指令集实现树或者图中的一个算法。使用的芯片是龙芯1b&#xff08;ls1b&#xff09; 算法原理 由某个集合上的一个偏序得到该集合上的一个全序&#xff0c;这个操作被称为拓扑排序。…...

    2024/4/7 16:44:25
  7. 如何在LInux上下载ZooKeeper

    &#xff08;1&#xff09;通过Xftp&#xff0c;将ZooKeeper传到/user/local/tmp目录中 &#xff08;2&#xff09;通过Xshell进行如下操作 vim中的操作如下...

    2024/4/14 5:53:19
  8. K8S学习之storageclass

    storageclass storageclass是一个存储类&#xff0c;通过创建storageclass可以动态生成一个存储卷供k8s用户使用。 [rootmaster ~]# kubectl explain storageclass KIND: StorageClass VERSION: storage.k8s.io/v1DESCRIPTION:StorageClass describes the parameters f…...

    2024/4/14 5:53:39
  9. vue3父子传参控制弹出框

    父组件 传参要用v-model <template><div class"muban"><el-buttontype"primary"size"small"click.prevent"tipShow">tip</el-button><MinDialog v-model:dialogVisible"dialogVisible" close&q…...

    2024/4/20 14:21:51
  10. 2022/1/24

    函数也是对象&#xff0c;内存底层分析 # 定义函数def test01(): print("sxtsxt") test01() c test01 c() 变量的作用域&#xff08;全局变量和局部变量&#xff09; 变量起作用的范围称为变量的作用域。不同作用域内同名变量之间互不影响。变量分为&#xf…...

    2024/4/14 5:53:29
  11. Mybatis快速入门步骤

    导入坐标&#xff0c;Mysql驱动与Mybatis的坐标&#xff08;junit和log4j&#xff09;创建相应的表以及与表对应的pojo&#xff0c;其中pojo的属性要与表中的表头相同。生成get和set方法已经tostring方法编写映射文件UserMapper.xml。如&#xff1a; <?xml version"1.…...

    2024/4/19 9:17:43
  12. STM32HAL库踩坑

    STM32HAL库踩坑 1.在使用M0内核的板子时&#xff0c;有时会出现keil的debug读取不到正常信息的现象&#xff08;原因未知&#xff09;&#xff0c;在HAL_Init()前加一定时间的延时&#xff0c;可以解决此问题&#xff08;有时也不需要&#xff09; 2.如果要使用HAL的SPI的API…...

    2024/4/14 5:53:14
  13. 一张图看懂ASIC Port和Pin;一张图理解reference和cell

    理解port和pin&#xff0c;可以认为port是整个设计的输入输出端&#xff0c;即连接金线的实际物理端口 pin是设计中例化模块的端口 理解design reference 和 cell...

    2024/4/14 5:53:44
  14. 2022新年烟花代码(有源码)

    预览地址: &#x1f31f;万事胜意版本&#x1f31f; &#x1f31f;3D版本&#x1f31f; &#x1f31f;表白版本&#x1f31f; 预览截图 万事胜意: 3D版本: 表白版本: 获取方式:...

    2024/4/15 17:52:20
  15. Unity值得一读的入门文章索引[持续更新]

    如果要做一个NPC&#xff0c;并且NPC能寻路&#xff0c;能攻击&#xff0c;应该怎么做&#xff1a; https://blog.csdn.net/qq_37601496/article/details/78731165 &#xff08;文章列举了几种方法 个人觉得比较靠谱&#xff09;...

    2024/4/7 16:44:20
  16. 如何用Java输出乘法口诀表

    public class TestDemo3 {public static void main(String[] args) {for (int i 1; i < 9; i) {for (int j 1; j < i; j) {System.out.print(i"*"j""i*j" ");}System.out.println();}}...

    2024/4/7 16:44:19
  17. Vue——render函数

    引入&#xff1a;在创建Vue实例对象引入组件时&#xff0c;为什么使用render函数而不是template配置项 1.vue.js 与vue.runtime.xxx.js的区别&#xff1a; (1)vue.js是完整版的Vue&#xff0c;包含核心功能模板解析器。 (2)vue.runtime.xxx,js是运行版的Vue&#xff0c;只包含…...

    2024/4/19 15:50:57
  18. P5076 【深基16.例7】普通二叉树(简化版)

    题目描述 您需要写一种数据结构&#xff0c;来维护一些数&#xff08; 都是 10^9109 以内的数字&#xff09;的集合&#xff0c;最开始时集合是空的。其中需要提供以下操作&#xff0c;操作次数 qq 不超过 10^4104&#xff1a; 查询 xx 数的排名&#xff08;排名定义为比当前…...

    2024/4/7 16:44:17
  19. ESP32 CameraWebServer例程浏览器无图像解决方法

    遇到的问题&#xff1a;在成功使用ARDUINO ide下载完ESP32的例程后&#xff0c;摄像头显示初始化完成&#xff0c;同时串口输出相应的IP地址&#xff0c;在360极速浏览器中输入相应的IP成功打开页面但点击开始按钮无图像输出&#xff0c;更换为edge浏览器解决该问题。查找网友所…...

    2024/4/14 5:54:05
  20. hMailServer连接数据库报错Authentication plugin ‘caching_sha2_password‘ cannot be loaded解决方案

    一、问题分析 在使用hMailServer搭建自己的邮箱服务器时&#xff0c;在连接数据库时报错&#xff1a;Authentication plugin caching_sha2_password cannot be loaded&#xff1a;... 通过百度发现出现这个原因是mysql8 之前的版本中加密规则是mysql_native_password,而在mysq…...

    2024/4/14 5:54:35

最新文章

  1. 图神经网络 | 混合神经网络模型GCTN地铁客流预测

    随着城市人口的不断增加,城市交通也在迅速扩张,这对城市的可持续发展提出了新的挑战。与私家车相比,城市轨道交通可以减少与交通相关的能源消耗、出行成本、交通拥堵和环境污染。同时,研究表明,在城市轨道交通强度较高的城市,汽车保有量的增长相对较慢。因此,地铁、公交…...

    2024/4/26 16:25:00
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. ChatGPT 初学者指南

    原文&#xff1a;ChatGPT for Beginners 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 介绍 如果您一直关注新闻和趋势&#xff0c;您可能已经在某个地方读到或听到过&#xff0c;Sam Altman 的生成式人工智能平台 ChatGPT 已经将人工智能推向了一个新的高度 - 许多…...

    2024/4/23 6:13:11
  4. 医院内外网安全通讯:实现安全与便捷的跨网即时通讯

    医院作为医疗信息化程度较高的机构之一&#xff0c;内部数据传输频繁&#xff0c;网络安全问题备受关注。医院内外网隔离是确保医院网络安全性和保密性的关键措施。然而&#xff0c;医院在业务开展中经常需要进行内外网数据交换&#xff0c;比如患者数据传输至内网&#xff0c;…...

    2024/4/22 1:25:59
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/25 11:51:20
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/25 18:39:24
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/25 18:38:39
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/25 18:39:23
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/25 18:39:22
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/25 18:39:22
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/25 18:39:20
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/25 16:48:44
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/26 16:00:35
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/25 18:39:16
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/25 0:00:17
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/25 4:19:21
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/25 18:39:12
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/25 2:10:52
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/25 18:39:00
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/25 13:19:01
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/25 18:38:58
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/25 18:38:57
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57