friend double convect_to_minute(const My_Time& t);

  const double operator*(double x) const;

};

double convect_to_minute(const My_Time& t);

#endif

#include "time1.h"

//---------Клас для более удобной работы со временем-----//

My_Time::My_Time() {

  hour = 0;

  min = 0;

}

My_Time::My_Time(int x, double y) {

  hour = x;

  if (y<60.0 && y >= 0.0) {

  min = y;

  }

  else if (y>60.0) {

  int c = y / 60;

  hour += c;

  min = y - 60 * c;

  }

  else {

  double buf_min = x * 60 + y;

  hour = buf_min / 60;

  min = buf_min - hour * 60;

  }

}

const My_Time My_Time::operator+(const My_Time& t) const {

  My_Time res(hour + t. hour, min + t. min);

  return res;

}

const My_Time My_Time::operator-(const My_Time& t) const {

  My_Time res(hour - t. hour, min - t. min);

  return res;

}

const double My_Time::operator*(double x) const {

  return x*hour + (x / 60.0)*min;

}

double convect_to_minute(const My_Time& t) {

  return 60 * t. hour + t. min;

}

Подпрограмма solar:

#include "solar. h"

#include "integral. h"

#include <cmath>

using namespace std;

double rad(double x) {//перевод в радианы

  return x*PI / 180.0;

}

My_Time E(double n1) {

  double B = (360.0 / 365.0)*(n1 - 81.0);

  B = rad(B);

  My_Time res(0, 7.53*cos(B) + 1.5*sin(B) - 9.87*sin(2.0 * B));//E

  return res;

НЕ нашли? Не то? Что вы ищете?

}

double hour_angle(Coordinats coor) {//

  double longitude_timezone = 15.0*coor. timezone;

  My_Time noonday(12, 0);

  My_Time correct(0, 4.0 * (coor. longitude_A - longitude_timezone));

  My_Time real_noonday = (noonday - correct + E(coor. n));

  return (coor. new_time - real_noonday) * 15.0;

}

double angle_declination(double n) {

  double B = (360.0 / 365.0)*(284.0 + n);

  B = rad(B);

  return 23.45*sin(B);

}

double zenith_angle(Coordinats coor) {

  double cos_zen = sin(rad(coor. latitude))*sin(rad(angle_declination(coor. n))) +

  cos(rad(coor. latitude))*cos(rad(angle_declination(coor. n)))*cos(rad(hour_angle(coor)));

  return acos(cos_zen);

}

double alfa(Coordinats coor) { //высота солнца

  double a = (PI / 2.0) - zenith_angle(coor);

  if (a > 0.0) return a;

  else return 0.0;

}

double azimut(Coordinats coor) {

  double tg_A = cos(rad(angle_declination(coor. n)))*sin(rad(hour_angle(coor)))

  / (cos(rad(angle_declination(coor. n)))*sin(rad(coor. latitude))*cos(rad(hour_angle(coor)))

  - sin(rad(angle_declination(coor. n)))*cos(rad(coor. latitude)));

  return atan(tg_A);

}

double cos_angle_Z(Coordinats coor, Ploshadka pl) {//угол падения СИ на пластину

  return cos(rad(pl. beta))*sin(alfa(coor)) + sin(rad(pl. beta))*cos(alfa(coor))*cos(azimut(coor) - rad(pl. gamma));

}

double H(double z) { //высота однородной атм.

  if (z == 0.0)  return 8.0;

  else return (p(z) / (1.276*g(z)))/1000.0;

}

double Rm(Coordinats coor, double z) {

  //----Вход из формы

  double c = coor. c;//0.43;//коэффициент прозрачности

  //-----------------

  double d = 6367.0 + z;

  double sin_h = sin(alfa(coor));

  if (sin_h>0){

  //double m = H(z) / (H(0.0)*sin(alfa(coor)));

  double m = (pow((pow(d*sin_h, 2.0)+2.0*d*H(z)+pow(H(z), 2.0)) , 0.5)-d*sin_h) / H(0.0);

  return (solar_const(coor. n)) / (1.0 + c*m);

  }

  else return 0.0;

}

double R_horiz(Coordinats coor, double z) {

  return Rm(coor, z)*sin(alfa(coor));

}

double R_t(Coordinats coor, Ploshadka pl) {

  double R=Rm(coor, pl. z)*cos_angle_Z(coor, pl);

  if (R>0) return R;

  else return 0.0;

}

//рассеяние вверху

double D_horiz(Coordinats coor, double z) {

  return (1.0 / 3.0)*(solar_const(coor. n) - Rm(coor, z))*sin(alfa(coor));

}

double D_t(Coordinats coor, Ploshadka pl) {

  return  D_horiz(coor, pl. z)*((1.0 + cos(rad(pl. beta))) / 2.0);

}

//отражение

//для Земли

double R_ref_groud(Coordinats coor, Ploshadka pl, Str_Ref ref) {

  double f_n=f_oblch(coor. latitude, ref. n_all_cloud);

  double Q = (R_horiz(coor, 0.0) + D_horiz(coor, 0.0))*f_n;

  double VF=((1.0 - cos(rad(pl. beta))) / 2.0)*pow((6371.0/(6371.0+pl. z)), 2.0);

  return ref. A_ground*Q*VF*(1.0-ref. n_ni_cloud);

  //return ref. A_ground*Q*((1.0 - cos(asin(6371/(6371+pl. z)))) / 2.0);

}

double R_ref_cloud(Coordinats coor, Ploshadka pl, Str_Ref ref) {

  if(pl. z > ref. h_cloud){

  double VF=((1.0 - cos(rad(pl. beta))) / 2.0)*pow(6371.0/(6371.0+pl. z-ref. h_cloud), 2.0);

  double Q = (R_horiz(coor, ref. h_cloud) + D_horiz(coor, ref. h_cloud));//*f_oblch(latitude, 0.1);

  return ref. A_cloud*Q*VF*(ref. n_ni_cloud);

  }

  else return 0.0;

}

//рассеяная нижними слоями вверх

double D_verh(Coordinats coor, Ploshadka pl, Str_Ref ref) {

  double horiz = (1.0 / 3.0)*(Rm(coor, pl. z) - Rm(coor, 0.0))*sin(alfa(coor));

  return horiz*((1.0 - cos(rad(pl. beta))) / 2.0)*f_oblch(coor. latitude, ref. n_ni_cloud);

}

//Итоговые формулы

double QsumSolar(Coordinats coor, Ploshadka pl, Str_Ref ref, Str_Plos_pogl pogl){

  //double f_c_sv=f_oblch(coor. latitude, ref. n_sv_cloud);//функция облочности над z

  return ((R_t(coor, pl)+D_t(coor, pl))*f_oblch(coor. latitude, ref. n_sv_cloud)+

  R_ref_groud(coor, pl, ref)+

  R_ref_cloud(coor, pl, ref)+

  D_verh(coor, pl, ref))*pogl. k_pogl*pogl. S;

}

/**************************IR********************************************/

double IK_groud(Ploshadka pl, Str_Ik ik){

  double horiz = (1-ik. A_ik_ground)*5.67*pow(ik. T_ground/100.0, 4.0);

  double m=p(pl. z)/100000.0;

  double tau=1.716-0.5*(exp(-0.65*m)+exp(-0.95*m));

  return (horiz*tau-IK_atm(pl, ik))*((1.0 - cos(rad(pl. beta))) / 2.0)*(6371.0/(6371.0+pl. z));

}

double IK_atm(Ploshadka pl, Str_Ik ik){

  double a=0.82-0.25*pow(10.0, (-0.95*ik. e_1));

  return a*5.67*pow(T(pl. z)/100.0, 4.0);

}

double QsumIr(Ploshadka pl, Str_Ik ik, Str_Plos_pogl pogl){

  return (IK_groud(pl, ik)+IK_atm(pl, ik))*pogl. k_ikpogl*pogl. S;

}

double QsumIr_balans(Ploshadka pl, Str_Ik ik, Str_Plos_pogl pogl){

  return (IK_groud(pl, ik)+IK_atm(pl, ik)-5.67*pow(pogl. T/100.0, 4.0))*pogl. k_ikpogl*pogl. S;

}

/************************************************************************/

//облачность

double f_oblch(double latitude, double n_oblch) {//вызов в суммаром подсчете

  double a = 0.0;

  if (latitude < 10) a = 0.38;

  else if (latitude < 20) a = 0.40;

  else if (latitude < 30) a = 0.36;

  else if (latitude < 40) a = 0.38;

  else if (latitude < 50) a = 0.40;

  else if (latitude < 60) a = 0.36;

  else if (latitude < 70) a = 0.18;

  else if (latitude < 75) a = 0.16;

  else if (latitude < 80) a = 0.15;

  else if (latitude < 85) a = 0.14;

  return 1.0 - ((a + 0.38*n_oblch)*n_oblch);

}

Подпрограмма widget:

#include "widget. h"

#include "ui_widget. h"

#include <QGraphicsTextItem>

#include <QDate>

#include <iomanip>

#include <stdlib. h>

#include <iostream>

#include <fstream>

#include <string>

Widget::Widget(QWidget *parent) :

  QWidget(parent),

  ui(new Ui::Widget)

{

  ui->setupUi(this);

  connect(ui->pushButton, SIGNAL(clicked()),this, SLOT(on_pushButton_clicked()));

  connect(ui->Box_z, SIGNAL(valueChanged(double)),this, SLOT(on_pushButton_clicked()));

  connect(ui->Box_S, SIGNAL(valueChanged(double)),this, SLOT(on_pushButton_clicked()));

  connect(ui->Box_koof_plosh, SIGNAL(valueChanged(double)),this, SLOT(on_pushButton_clicked()));

  connect(ui->Box_k_losh_IK, SIGNAL(valueChanged(double)),this, SLOT(on_pushButton_clicked()));

  connect(ui->T_pl, SIGNAL(valueChanged(int)),this, SLOT(on_pushButton_clicked()));

  connect(ui->Box_betta, SIGNAL(valueChanged(double)),this, SLOT(on_pushButton_clicked()));

  connect(ui->Box_gamma, SIGNAL(valueChanged(double)),this, SLOT(on_pushButton_clicked()));

  connect(ui->ball_obl_nize, SIGNAL(valueChanged(int)),this, SLOT(on_pushButton_clicked()));

  connect(ui->bal_obl, SIGNAL(valueChanged(int)),this, SLOT(on_pushButton_clicked()));

  connect(ui->bal_obl_vverh, SIGNAL(valueChanged(int)),this, SLOT(on_pushButton_clicked()));

  connect(ui->Gr_obl_Verhn, SIGNAL(valueChanged(double)),this, SLOT(on_pushButton_clicked()));

  connect(ui->Albedo_co, SIGNAL(valueChanged(double)),this, SLOT(on_pushButton_clicked()));

  connect(ui->Box_e1,SIGNAL(valueChanged(double)),this, SLOT(on_pushButton_clicked()));

  connect(ui->comboBox, SIGNAL(activated(int)),this, SLOT(on_pushButton_clicked()));

  connect(ui->Albedo_zem, SIGNAL(valueChanged(double)),this, SLOT(on_pushButton_clicked()));

  connect(ui->Albedo_zem_IK, SIGNAL(valueChanged(double)),this, SLOT(on_pushButton_clicked()));

  connect(ui->Box_dogota, SIGNAL(valueChanged(double)),this, SLOT(on_pushButton_clicked()));

  connect(ui->Box_shirota, SIGNAL(valueChanged(double)),this, SLOT(on_pushButton_clicked()));

  connect(ui->Box_utc, SIGNAL(valueChanged(int)),this, SLOT(on_pushButton_clicked()));

  connect(ui->hourBox_2,SIGNAL(valueChanged(int)),this, SLOT(on_pushButton_clicked()));

  connect(ui->minBox, SIGNAL(valueChanged(int)),this, SLOT(on_pushButton_clicked()));

  connect(ui->UdateEdit, SIGNAL(dateTimeChanged(QDateTime)),this, SLOT(on_pushButton_clicked()));

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7