Python Openpyxl & Numpy: 计算反射折射点方向向量
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.
原文地址: https://www.cveoy.top/t/topic/nSa8 著作权归作者所有。请勿转载和采集!