#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)); }