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 |


