月平均余弦效率求解(新)及阴影遮挡效率的计算(部分)

import pandas as pd
from math import sin, cos, tan, asin, acos, atan, pi, sqrt
import math
import numpy as np
import csv

#D为给定日期从春分算起的天数
D = [306, 337, 0, 31, 61, 92, 122, 153, 184, 214, 245, 275]
#ST为当地时间
ST = [9, 10.5, 12, 13.5, 15]
#z为集热器中心距离任意一个定日镜的竖直距离,为定值
z = 76
#latitude为当地纬度
latitude = math.radians(39.4)

delta = [(asin(sin(2*pi*d/365) * sin(2*pi*23.45/360))) for d in D]

W = [pi/12*(st-12) for st in ST]

Alpha = [asin(cos(delta[i]) * cos(latitude) * cos(W[j]) + sin(delta[i]) * sin(latitude))
         for i in range(len(delta)) for j in range(len(W))]
Gamma = [acos((sin(delta[i])-sin(Alpha[i * len(W) + j]) * sin(latitude)) / (cos(Alpha[i * len(W) + j]) * cos(latitude)) + 1e-6)
         for i in range(len(delta)) for j in range(len(W))]

#入射光线的单位方向向量
e_in = [np.array([-cos(Alpha[k])*sin(Gamma[k]), -cos(Alpha[k])*cos(Gamma[k]), -sin(Alpha[k])]) for k in range(12 * 5)]

excel = pd.read_excel("C:\\Users\\ChenCong\\Desktop\\test.xlsx")
X = list(excel['x'])
Y = list(excel['y'])
#反射光线的单位方向向量
e_out = [np.array([-X[m], -Y[m], z]) / sqrt((X[m])**2 + (Y[m])**2 + z**2) for m in range(len(excel))]

#初始化余弦效率矩阵,大小为60*1745
single_cos_efficiency = np.zeros((60, 1745))
for i in range(60):
    for j in range(1745):
        single_cos_efficiency[i][j] += (1 - (e_in[i] * e_out[j]).sum()) / sqrt(((e_in[i] - e_out[j])*(e_in[i] - e_out[j])).sum())
print(single_cos_efficiency)

monthly_average_cos_efficiency = [single_cos_efficiency[5*i : 5*i+5].mean() for i in range(12)]
print('十二个月的月平均效率为:', monthly_average_cos_efficiency)

f = open('table_1.csv', 'a', newline='', encoding='utf-8-sig')
global writer
writer = csv.writer(f)
writer.writerow(['时间', '月平均效率'])
for i in range(12):
    writer.writerow([f'{i+1}月21日', monthly_average_cos_efficiency[i]])

-------------------------------------------------------------------------------------------------------------

import pandas as pd 
from math import sin, cos, tan, asin, acos, atan, pi, sqrt 
import math 
import numpy as np 
import random 
import csv

def Cal_area_2poly(data1, data2):
    """
    任意两个图形的相交面积的计算
    :param data1: 当前物体
    :param data2: 待比较的物体
    :return: 当前物体与待比较的物体的面积交集
    """

    poly1 = Polygon(data1).convex_hull  # Polygon:多边形对象
    poly2 = Polygon(data2).convex_hull

    if not poly1.intersects(poly2):
        inter_area = 0  # 如果两四边形不相交
    else:
        inter_area = poly1.intersection(poly2).area  # 相交面积
    return inter_area
#D为给定日期从春分算起的天数
D = [306, 337, 0, 31, 61, 92, 122, 153, 184, 214, 245, 275]
#ST为当地时间
ST = [9, 10.5, 12, 13.5, 15]
#z为集热器中心距离任意一个定日镜的竖直距离,为定值
z = 76
#latitude为当地纬度
latitude = math.radians(39.4)

delta = [(asin(sin(2*pi*d/365) * sin(2*pi*23.45/360))) for d in D]

W = [pi/12*(st-12) for st in ST]

Alpha_s = [asin(cos(delta[i]) * cos(latitude) * cos(W[j]) + sin(delta[i]) * sin(latitude))
         for i in range(len(delta)) for j in range(len(W))]
Gamma_s = [acos((sin(delta[i])-sin(Alpha_s[i * len(W) + j]) * sin(latitude)) / (cos(Alpha_s[i * len(W) + j]) * cos(latitude)) + 1e-6)
         for i in range(len(delta)) for j in range(len(W))]

#入射光线的单位方向向量
e_in = [np.array([-cos(Alpha_s[k])*sin(Gamma_s[k]), -cos(Alpha_s[k])*cos(Gamma_s[k]), -sin(Alpha_s[k])]) for k in range(12 * 5)]

excel = pd.read_excel("C:\\Users\\ChenCong\\Desktop\\test.xlsx")
X = list(excel['x'])
Y = list(excel['y'])
#反射光线的单位方向向量
e_out = [np.array([-X[m], -Y[m], z]) / sqrt((X[m])**2 + (Y[m])**2 + z**2) for m in range(len(excel))]

#初始化余弦效率矩阵,大小为60*1745
single_cos_efficiency = np.zeros((60, 1745))
for i in range(60):
    for j in range(1745):
        single_cos_efficiency[i][j] += (1 - (e_in[i] * e_out[j]).sum()) / sqrt(((e_in[i] - e_out[j])*(e_in[i] - e_out[j])).sum())

num = [random.randint(1, 1743) for i in range(100)]

Alpha_A_m = np.zeros((60, 100))
Gamma_A_m = np.zeros((60, 100))
Alpha_B_m = np.zeros((60, 100))
Gamma_B_m = np.zeros((60, 100))
for i in range(60):
    for j in range(len(num)):
        Alpha_A_m[i][j] = acos(((e_in[i] - e_out[num[j]]) / sqrt(((e_in[i] - e_out[num[j]])*(e_in[i] - e_out[num[j]])).sum()))[2])
        Gamma_A_m[i][j] = atan(((e_in[i] - e_out[num[j]]) / sqrt(((e_in[i] - e_out[num[j]])*(e_in[i] - e_out[num[j]])).sum()))[0] /
                               ((e_in[i] - e_out[num[j]]) / sqrt(((e_in[i] - e_out[num[j]])*(e_in[i] - e_out[num[j]])).sum()))[1])
        Alpha_B_m[i][j] = acos(((e_in[i] - e_out[num[j]+1]) / sqrt(((e_in[i] - e_out[num[j]+1])*(e_in[i] - e_out[num[j]+1])).sum()))[2])
        Gamma_B_m[i][j] = atan(((e_in[i] - e_out[num[j]+1]) / sqrt(((e_in[i] - e_out[num[j]+1])*(e_in[i] - e_out[num[j]+1])).sum()))[0] /
                               ((e_in[i] - e_out[num[j]+1]) / sqrt(((e_in[i] - e_out[num[j]+1])*(e_in[i] - e_out[num[j]+1])).sum()))[1])
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值