Sh3/gktogeo.cpp
2025-07-02 07:45:34 +03:00

120 lines
2.4 KiB
C++

#include "gktogeo.h"
#include "ui_gktogeo.h"
GKtoGEO::GKtoGEO(QWidget *parent) :
QDialog(parent),
ui(new Ui::GKtoGEO)
{
ui->setupUi(this);
setAttribute(Qt::WA_DeleteOnClose);
((Widget*)parent)->changeOpenWidget(this);
}
GKtoGEO::~GKtoGEO()
{
delete ui;
}
void GKtoGEO::on_pushButton_2_clicked()
{
close();
}
void GKtoGEO::closeEvent(QCloseEvent *event)
{
((Widget*)parent())->clearOpenWidget();
event->accept();
}
void GKtoGEO::on_pushButton_clicked()
{
int nZone, b1, b2, b3, l1, l2, l3;
bool south;
int XL, YL;
double CB2=8376121.0;
double CB4=590.42;
double CB6=1.68;
double A1,A2,A3,B1,B2,B3,C1,C2,C3,D1,D2,D3,
P,PU,G,E,EU,FI,L0,TGA,TGL,U,V,TG,SFI;
nZone = ui->lineEdit->text().toInt();
south = ui->checkBox->isChecked();
XL = ui->lineEdit_8->text().toInt();
YL = ui->lineEdit_9->text().toInt();
// ðàñ÷åò
V=YL-500000.0;
U=XL/6367558.497;
V=V/6367558.497;
A1=sin(2.0*U);
B1=cos(2.0*U);
A2=2.0*A1*B1;
B2=1.0-2.0*A1*A1;
A3=A1*B2+A2*B1;
B3=B1*B2-A1*A2;
C1=sinh(2.0*V);
D1=sqrt(1.0+C1*C1);
C2=2.0*C1*D1;
D2=1.0+2.0*C1*C1;
C3=C1*D2+C2*D1;
D3=C1*C2+D1*D2;
E=U-(CB2*A1*D1+CB4*A2*D2+CB6*A3*D3)*0.0000000001;
P=V-(CB2*B1*C1+CB4*B2*C2+CB6*B3*C3)*0.0000000001;
EU=10000000000.0-(2.0*CB2*B1*D1+4.0*CB4*B2*D2+
6.0*CB6*B3*D3);
PU=(2.0*CB2*A1*C1+4.0*CB4*A2*C2+6.0*CB6*A3*C3);
SFI=sin(E)/cosh(P);
TGL=sinh(P)/cos(E);
TGA=SFI*TGL;
FI=asin(SFI);
B=(5645.0*SFI*SFI-531245.0)*SFI*SFI;
B=(B+67385254.0)*SFI*cos(FI)*0.0000000001;
B=B+FI;
TG=PU/EU;
G=atan(TGA)+atan(TG);
L=atan(TGL);
L0=double(nZone)*6.0-3.0;
L0=L0*M_PI/180.0;
L=L+L0;
if (L<0.0) L=L+(2.0*M_PI);
else if (L>(2.0*M_PI)) L=L-(2.0*M_PI);
double X=180.0/M_PI*B;
south = (X<0);
if (south) X= -X;
b1 = (int)floor(X);
X = (X-b1)*60;
b2 = (int)floor(X);
X = (X-b2)*60;
b3 = (int)floor(X);
X = 180.0/M_PI*L;
l1 = (int)floor(X);
X = (X-l1)*60;
l2 = (int)floor(X);
X = (X-l2)*60;
l3 = (int)floor(X);
ui->lineEdit_2->setText(QString::number(b1));
ui->lineEdit_3->setText(QString::number(b2));
ui->lineEdit_4->setText(QString::number(b3));
ui->lineEdit_5->setText(QString::number(l1));
ui->lineEdit_6->setText(QString::number(l2));
ui->lineEdit_7->setText(QString::number(l3));
}