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

📄 zbzhform.cpp

📁 大地左边与高斯平面坐标转换程序
💻 CPP
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#include <math.h>
#pragma hdrstop

#include "zbzhform.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//void  jdhs(int);
double jdhs_0(int,int,double);
dpbh(int kz,double a,double f,double be[],double xyg[]);
double f;
double a=6.37814e6;

//------坐标转换---------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
RadioGroup1->ItemIndex==0;
RadioGroup1->ItemIndex==1;
f=298.257;
}
//---------------------------------------------------------------------------

//==============================
void __fastcall TForm1::RadioGroup1Click(TObject *Sender)
{
if( RadioGroup1->ItemIndex==0)
{
 GroupBox1->Top=96;
 GroupBox1->Visible=true;
 GroupBox2->Visible=false;
 BitBtn1->Visible=true;
 BitBtn2->Visible=false;
}
if( RadioGroup1->ItemIndex==1)
{
 GroupBox2->Top=96;
 GroupBox2->Visible=true;
 GroupBox1->Visible=false;
 BitBtn2->Visible=true;
 BitBtn1->Visible=false;
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
double PI=4.0*atan(1.0);
double sec=0,d=0;
int ideg=0,min=0;
double xyg[3]={0,0,0}; //x,y,gama
double be[2]={0,0};  //b,e
//======================
try
{
ideg=StrToInt(Edit1->Text) ;
min=StrToInt(Edit2->Text) ;
sec=StrToFloat(Edit3->Text);
be[0]=jdhs_0(ideg,min,sec);
ideg=StrToInt(Edit4->Text);
min=StrToInt(Edit5->Text) ;
sec=StrToFloat(Edit6->Text);
be[1]=jdhs_0(ideg,min,sec);
dpbh(0,a,f,be,xyg);
Edit7->Text=FloatToStr(xyg[0]);
Edit8->Text=FloatToStr(xyg[1]);
//==================
d=xyg[2]*180/PI;
ideg=int(d);
d=(d-ideg)*60.0;
min=int (d);
sec=(d-min)*60;
///================
Edit9->Text=IntToStr(ideg);
Edit10->Text=IntToStr(min);
Edit11->Text=FloatToStr(sec);
 GroupBox2->Top=288;
 GroupBox1->Top=96;
 GroupBox2->Visible=true;
 GroupBox1->Visible=true;
 }
 catch(...)
 {
 ShowMessage("有错误发生!");
 }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
double PI=4.0*atan(1.0);
double sec=0,d=0;
double xyg[3]={0,0,0};
double be[2]={0,0};
int ideg=0,min=0;
try{
xyg[0]=StrToFloat(Edit7->Text);
xyg[1]=StrToFloat(Edit8->Text);
dpbh(1,a,f,be,xyg);
//======
d=be[0]*180/PI;
ideg=int(d);
d=(d-ideg)*60.0;
min=int (d);
sec=(d-min)*60;
//=====
Edit1->Text=IntToStr(ideg);
Edit2->Text=IntToStr(min);
Edit3->Text=FloatToStr(sec);
//======
d=be[1]*180/PI;
ideg=int(d);
d=(d-ideg)*60.0;
min=int (d);
sec=(d-min)*60;
//=====
Edit4->Text=IntToStr(ideg);
Edit5->Text=IntToStr(min);
Edit6->Text=FloatToStr(sec);
//==========================
//======
d=xyg[2]*180/PI;
ideg=int(d);
d=(d-ideg)*60.0;
min=int (d);
sec=(d-min)*60;
//=====
Edit12->Text=IntToStr(ideg);
Edit13->Text=IntToStr(min);
Edit14->Text=FloatToStr(sec);
 GroupBox1->Top=288;
 GroupBox2->Top=96;
 GroupBox1->Visible=true;
 GroupBox2->Visible=true;
 }
 catch(...)
 {
 ShowMessage("有错误发生!");
 }
}
//---------------------------------------------------------------------------
dpbh(int kz,double a,double f,double be[],double xyg[])
{
double PI=4.0*atan(1.0);
double bb=a*(1.0-1.0/f);
double e1=(a+bb)/bb*(a-bb)/bb;
double e2=(a+bb)/a*(a-bb)/a;
double a0=1.0+0.75 *e2+45.0*e2*e2/64.0+175.0*pow(e2,3)/256.0;
double b0=    0.75 *e2+15.0*e2*e2/16.0+525.0*pow(e2,3)/512.0;
double c0=15.0*e2*e2/64.0+105.0*pow(e2,3)/256.0;
double d0=35.0*pow(e2,3)/512.0;
int n0;
double e0,cb,sb,t,ad2,d,x1,de,a1,a2,dx,b1,b2,dy,c1,c2,dr;
double y0,dm,yd,ym,dl,db;
//=====================
if (kz==0)
{
 n0=int(be[1]*180.0/(6.0*PI))+1;
 e0=(6.0*(n0-1)+3)*PI/180.0;
 cb=cos(be[0]);
 sb=sin(be[0]);
 t=tan(be[0]);
 ad2=e1*cb*cb;
 d=a/sqrt(1.0-e2*sb*sb);
 x1=a0*be[0]-b0*sin(2.0*be[0])/2.0+c0*sin(4.0*be[0])/4.0;
 x1=a*(1.0-e2)*(x1-d0*sin(6.0*be[0])/6.0);
 de=be[1]-e0;
 a1=d*sb*cb/2.0;
 a2=d*sb*pow(cb,3)*(5.0-t*t+9.0*ad2+4.0*ad2)/24.0;
 dx=d*sb*pow(cb,5)*pow(de,6)*(61.0-58.0*t*t+pow(t,4))/720.0;
 xyg[0]=x1+de*de*(a1+a2*de*de)+dx;
 b1=d*cb;
 b2=d*pow(cb,3)*(1.0-t*t+ad2)/6.0;
 dy=d*pow(cb,5)*(5.0-18.0*t*t+pow(t,4)+14.0*ad2-58.0*ad2*t*t)*pow(de,5)/120.0;
xyg[1]=de*(b1+b2*de*de)+dy;
xyg[1]=(n0+0.5)*1e6+xyg[1];
}
//========================
if(kz==1)
{
 n0=int(xyg[1]*1e-6);
 e0=(6*(n0-1)+3)*PI/180.0;
 y0=xyg[1]-(n0+0.5)*1e6;
 dx=1.0;
 be[0]=xyg[0]/(a0*a*(1.0-e2));
do
 {
 x1=a0*be[0]-b0*sin(2.0*be[0])/2.0+c0*sin(4.0*be[0])/4.0;
 x1=a*(1.0-e2)*(x1-d0*sin(6.0*be[0])/6.0);
 dx=xyg[0]-x1;
 db=dx/(a0*a*(1-e2));
 be[0]=be[0]+db;
 }while (abs(dx>0.0001)) ;

 cb=cos(be[0]);
 sb=sin(be[0]);
 t=tan(be[0]);
 ad2=e1*cb*cb;
 d=a/sqrt(1-e2*sb*sb);
 dm=d/(1.0+ad2);
 yd=y0/d;
 ym=y0/dm;
 a1=t/2.0;
 a2=t*(5.0+3.0*t*t+ad2-9.0*t*t*ad2)/24.0;
 db=t*(61.0+90.0*t*t+45*pow(t,4))*pow(yd,4)/720.0;
 be[0]=be[0]-yd*ym*(a1-a2*yd*yd+db);
 b1=cb;
 b2=(1.0+2.0*t*t+ad2)*cb/6.0;
 dl=(5.0+44.0*t*t+32.0*pow(t,4)-2.0*ad2-16.0*t*t*ad2)*pow(yd,5)/(cb*360.0);
 de=yd/(b1+b2*yd*yd)+dl;
 be[1]=e0+de ;
}
//================================================
 cb=cos(be[0]);
 sb=sin(be[0]);
 t=tan(be[0]);
 ad2=e1*cb*cb;
 c1=sb;
 c2=sb*cb*cb*(1.0+3.0*ad2+2.0*ad2*ad2)/3.0;
 dr=sb*pow(cb,4)*(2.0-t*t)*pow(de,5)/15.0;
 xyg[2]=de*(c1+c2*de*de)+dr;
 return 0;
 }


//======================
double jdhs_0(int ideg,int min,double sec)
{
double rad;
double PI=4.0*atan(1.0);
rad=sec/60.0;
rad=(rad+min)/60.0;
rad=rad+ideg;
rad=rad*PI/180.0;
return rad;
}
//=======================

void __fastcall TForm1::RadioGroup2Click(TObject *Sender)
{
if( RadioGroup2->ItemIndex==0)
{
 f=298.3;
 }
if( RadioGroup2->ItemIndex==1)
{
f=298.257;
}
}
//---------------------------------------------------------------------------

#include <registry.hpp>
#include "cpuid.h"
void __fastcall TForm1::FormCreate(TObject *Sender)
{
AnsiString serials;
unsigned __int64 n;
int* CPUID;
char* S;
int I;
bool ff;
 AnsiString r1,r2,r3,r4;
 CPUID = new int[4];

//以下取得软件序列号
 S = new char[13];
 S[13]='\0';
 for ( I = 0; I < 4; I ++ ) CPUID[I] = -1;
if ( IsCPUID_Available() )//如果可以区的序列号
{
GetCPUID( CPUID);
r1=IntToHex(CPUID[0],8);
r2=IntToHex(CPUID[1],8);
r3=IntToHex(CPUID[2],8);
r4=IntToHex(CPUID[3],8);
serials=r1+r2+r3+r4;
}
else
{
Application->Terminate();
}
TRegistry *Reg = new TRegistry;
Reg->RootKey = HKEY_USERS;
serials=".DEFAULT\\Software\\Microsoft\\Windows\\CurrentVersion\\"+AnsiString(serials);
ff=Reg->KeyExists(AnsiString(serials));
if(!ff)
{
 Application->Terminate();
}
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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