Python 使用 Openpyxl 和 Numpy 计算角平分向量并写入 Excel
import\u0020openpyxl\nimport\u0020numpy\u0020as\u0020np\nimport\u0020xlsxwriter\u0020as\u0020xw\nimport\u0020math\n#\u0020读取xlsx文件\nwb\u0020=\u0020openpyxl.load_workbook('data.xlsx')\nsheet\u0020=\u0020wb.active\n\n#\u0020读取A2到C1764的数据\ndata\u0020=\u0020[]\nfor\u0020row\u0020in\u0020sheet.iter_rows(min_row=2,\u0020max_row=1746,\u0020min_col=1,\u0020max_col=3):\n\u0020\u0020data.append([cell.value\u0020for\u0020cell\u0020in\u0020row])\npass\n\nwb\u0020=\u0020openpyxl.load_workbook('方位角\u0020(2).xlsx')\nsheet\u0020=\u0020wb.active\nFangWeiJiao\u0020=\u0020[]\nfor\u0020row\u0020in\u0020sheet.iter_rows(min_row=0,\u0020max_row=12,\u0020min_col=0,\u0020max_col=5):\n\u0020\u0020FangWeiJiao.append([cell.value\u0020for\u0020cell\u0020in\u0020row])\npass\nprint(FangWeiJiao)\nwb\u0020=\u0020openpyxl.load_workbook('高度角.xlsx')\nsheet\u0020=\u0020wb.active\nGaoDuJiao\u0020=\u0020[]\nfor\u0020row\u0020in\u0020sheet.iter_rows(min_row=0,\u0020max_row=12,\u0020min_col=0,\u0020max_col=5):\n\u0020\u0020GaoDuJiao.append([cell.value\u0020for\u0020cell\u0020in\u0020row])\npass\n\n\nfor\u0020i\u0020in\u0020range(12):\n\u0020\u0020for\u0020j\u0020in\u0020range(5):\n\u0020\u0020\n\u0020\u0020\u0020\u0020theta\u0020=\u0020FangWeiJiao[i][j]\u0020#float(input("请输入方向角(弧度制):"))\n\u0020\u0020\u0020\u0020phi\u0020=\u0020GaoDuJiao[i][j]\u0020#float(input("请输入高度角(弧度制):"))\n\u0020\u0020\u0020\u0020print(theta)\n\u0020\u0020\u0020\u0020print(phi)\n\u0020\u0020\u0020\u0020#\u0020三维坐标和一个三维向量\n\u0020\u0020\u0020\u0020input_coord\u0020=\u0020np.array([0,\u00200,\u002084])\n\u0020\u0020\u0020\u0020input_vector\u0020=\u0020np.array([math.sin(phi)\u0020*\u0020math.cos(theta),\u0020math.sin(phi)\u0020*\u0020math.sin(theta),math.cos(phi)])\n\n\u0020\u0020\u0020\u0020#\u0020计算输入坐标到读取坐标间的单位方向向量\n\u0020\u0020\u0020\u0020unit_direction_vectors\u0020=\u0020[]\n\u0020\u0020\u0020\u0020for\u0020coord\u0020in\u0020data:\n\u0020\u0020\u0020\u0020\u0020\u0020direction_vec\u0020=\u0020(input_coord\u0020-\u0020np.array(coord))\u0020/\u0020np.linalg.norm(input_coord\u0020-\u0020np.array(coord))\n\u0020\u0020\u0020\u0020\u0020\u0020unit_direction_vectors.append(direction_vec)\n\n\u0020\u0020\u0020\u0020#\u0020计算输入向量在各个读取坐标点处的单位方向向量\n\u0020\u0020\u0020\u0020input_unit_direction_vectors\u0020=\u0020[]\n\u0020\u0020\u0020\u0020for\u0020coord\u0020in\u0020data:\n\u0020\u0020\u0020\u0020\u0020\u0020direction_vec\u0020=\u0020input_vector\u0020/\u0020np.linalg.norm(input_vector)\n\u0020\u0020\u0020\u0020\u0020\u0020input_unit_direction_vectors.append(direction_vec)\n\n\u0020\u0020\u0020\u0020#\u0020计算以上两个单位方向向量的角平分向量\n\u0020\u0020\u0020\u0020angle_bisectors\u0020=\u0020[]\n\u0020\u0020\u0020\u0020ver\u0020=\u0020[]\n\u0020\u0020\u0020\u0020for\u0020k\u0020in\u0020range(len(data)):\n\u0020\u0020\u0020\u0020\u0020\u0020angle_bisector\u0020=\u0020(unit_direction_vectors[k]\u0020+\u0020input_unit_direction_vectors[k])\u0020/\u0020np.linalg.norm(unit_direction_vectors[k]\u0020+\u0020input_unit_direction_vectors[k])\n\u0020\u0020\u0020\u0020\u0020\u0020angle_bisectors.append(angle_bisector)\n\u0020\u0020\u0020\u0020\u0020\u0020ver.append(angle_bisector)\n\n#\u0020打印结果\n#print("输入坐标到读取坐标间的单位方向向量:")\n#for\u0020vec\u0020in\u0020unit_direction_vectors:\n#\u0020print(vec)\n\n#print("输入向量在各个读取坐标点处的单位方向向量:")\n#for\u0020vec\u0020in\u0020input_unit_direction_vectors:\n#\u0020print(vec)\n\n\u0020\u0020\u0020\u0020print("以上两个单位方向向量的角平分向量:")\n\u0020\u0020\u0020\u0020for\u0020vec\u0020in\u0020angle_bisectors:\n\u0020\u0020\u0020\u0020\u0020\u0020print(vec)\n\n\n\u0020\u0020\u0020\u0020output_wb\u0020=\u0020xw.Workbook(str([i])+str([j])+'.xlsx')\n\u0020\u0020\u0020\u0020output_sheet\u0020=\u0020output_wb.add_worksheet()\n\n\u0020\u0020\u0020\u0020#\u0020写入数据到Excel文件中\n\u0020\u0020\u0020\u0020for\u0020i\u0020in\u0020range(len(angle_bisectors)):\n\u0020\u0020\u0020\u0020\u0020\u0020for\u0020j\u0020in\u0020range(len(angle_bisectors[i])):\n\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020output_sheet.write(i,\u0020j,\u0020angle_bisectors[i][j])\n\n\u0020\u0020\u0020\u0020#\u0020保存Excel文件\n\u0020\u0020\u0020\u0020output_wb.close()\nTraceback\u0020(most\u0020recent\u0020call\u0020last):\n\u0020File\u0020"C:\Users\L\Desktop\2109010307卢贵达-第4次作业\List200\List200\List200.py",\u0020line\u002034,\u0020in\u0020
原文地址: https://www.cveoy.top/t/topic/nYxq 著作权归作者所有。请勿转载和采集!