import openpyxl
import numpy as np
import xlsxwriter as xw
import math
# 读取xlsx文件
wb = openpyxl.load_workbook('data.xlsx')
sheet = wb.active
sum = 0
# 读取A2到C1764的数据
data = []
for row in sheet.iter_rows(min_row=2, max_row=1746, min_col=1, max_col=3):
    data.append([cell.value for cell in row])
pass

wb = openpyxl.load_workbook('方位角 (2).xlsx')
sheet = wb.active
FangWeiJiao = []
for row in sheet.iter_rows(min_row=0, max_row=12, min_col=0, max_col=5):
    FangWeiJiao.append([cell.value for cell in row])
pass

wb = openpyxl.load_workbook('高度角.xlsx')
sheet = wb.active
GaoDuJiao = []
for row in sheet.iter_rows(min_row=0, max_row=12, min_col=0, max_col=5):
    GaoDuJiao.append([cell.value for cell in row])
pass


for l in range(12):
    for m in range(5):
    

        theta = FangWeiJiao[l][m] #float(input('请输入方向角(弧度制):'))
        phi = GaoDuJiao[l][m] #float(input('请输入高度角(弧度制):'))
        # 三维坐标和一个三维向量
        input_coord = np.array([0, 0, 76])
        input_vector = np.array([math.sin(phi) * math.cos(theta), math.sin(phi) * math.sin(theta),math.cos(phi)])

        # 计算输入坐标到读取坐标间的单位方向向量
        unit_direction_vectors = []
        for coord in data:
            direction_vec = (input_coord - np.array(coord)) / np.linalg.norm(input_coord - np.array(coord))
            unit_direction_vectors.append(direction_vec)

        # 计算输入向量在各个读取坐标点处的单位方向向量
        input_unit_direction_vectors = []
        for coord in data:
            direction_vec = input_vector / np.linalg.norm(input_vector)
            input_unit_direction_vectors.append(direction_vec)

        # 计算以上两个单位方向向量的角平分向量
        angle_bisectors = []
        ver = []
        for k in range(len(data)):
            angle_bisector = (unit_direction_vectors[k] + input_unit_direction_vectors[k]) / np.linalg.norm(unit_direction_vectors[k] + input_unit_direction_vectors[k])
            angle_bisectors.append(angle_bisector)
            ver.append(angle_bisector)

# 打印结果
#print('输入坐标到读取坐标间的单位方向向量:')
#for vec in unit_direction_vectors:
 #   print(vec)

#print('输入向量在各个读取坐标点处的单位方向向量:')
#for vec in input_unit_direction_vectors:
#   print(vec)
        output_wb = xw.Workbook('FanSheZheDang'+str([l])+str([m])+'.xlsx')
        output_sheet = output_wb.add_worksheet()
        for zm in range(1745):
            po = input_unit_direction_vectors[zm]*angle_bisectors[zm]
            sum = po + sum
            output_sheet.write(1745, 1, angle_bisectors[zm][1])
        pass

        print(sum)
        output_wb.close()


        output_wb = xw.Workbook('Fanshe'+str([l])+str([m])+'.xlsx')
        output_sheet = output_wb.add_worksheet()
        # 写入数据到Excel文件中
        output_sheet.write(sum/1745)
        # 保存Excel文件
        output_wb.close()
计算input_unit_direction_vectors[zm]*angle_bisectors[zm]的点乘结果的代码内容:The code to calculate the dot product of input_unit_direction_vectors[zm]*angle_bisectors[zm] is:

```python
dot_product = np.dot(input_unit_direction_vectors[zm], angle_bisectors[zm])
print(dot_product)

This code calculates the dot product between the two vectors and prints the result.

Python Openpyxl & Numpy: 计算反射折射点方向向量

原文地址: https://www.cveoy.top/t/topic/nSa8 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录