diff --git a/core.py b/core.py index d011366..8766001 100644 --- a/core.py +++ b/core.py @@ -1,5 +1,6 @@ import math import ezdxf +import numba import numpy as np gCAD = None @@ -41,15 +42,15 @@ class Draw: # 圆交点 -def solve_circle_intersection(rs, rc, hgav, hcav, dgc): +def solve_circle_intersection(rs, rc, h_gav, h_cav, dgc): # 用牛顿法求解 x = rc # 初始值 y = rc # 初始值 for bar in range(0, 10): - A = [[-2 * x, -2 * (y - hgav)], [-2 * (x - dgc), -2 * (y - hcav)]] + A = [[-2 * x, -2 * (y - h_gav)], [-2 * (x - dgc), -2 * (y - h_cav)]] b = [ - x ** 2 + (y - hgav) ** 2 - rs ** 2, - (x - dgc) ** 2 + (y - hcav) ** 2 - rc ** 2, + x ** 2 + (y - h_gav) ** 2 - rs ** 2, + (x - dgc) ** 2 + (y - h_cav) ** 2 - rc ** 2, ] X_set = np.linalg.solve(A, b) x += X_set[0] @@ -115,9 +116,6 @@ def intersection_angle(dgc, h_gav, h_cav, i_curt, u_ph): # 暴露弧的角度 rc, rg, dgc, h_cav ) # 暴露圆和补雷线的交点 np_circle_intersection = np.array(circle_intersection) - # TODO to be removed - if not circle_intersection: - abc = 123 theta2_line = np_circle_intersection - np.array([dgc, h_cav]) theta2 = math.atan(theta2_line[1] / theta2_line[0]) np_circle_line_intersection = np.array(circle_line_intersection) @@ -133,11 +131,6 @@ def distance_point_line(point_x, point_y, line_x, line_y, k) -> float: def func_calculus_pw(theta, max_w): w_fineness = 0.01 - r_pw = 0 - # TODO to be removed - if int(max_w / w_fineness) < 0: - abc = 123 - pass w_samples, d_w = np.linspace(0, max_w, int(max_w / w_fineness), retstep=True) cal_w_np = abs(angel_density(w_samples)) * np.sin(theta - (w_samples - math.pi / 2)) r_pw = np.sum((cal_w_np[:-1] + cal_w_np[1:])) / 2 * d_w @@ -155,19 +148,11 @@ def calculus_bd(theta, rc, rs, rg, dgc, h_cav, h_gav): # 对θ进行积分 if d_to_rs < rs: # 相交 # 要用过直线上一点到暴露弧的切线 new_k = tangent_line_k(line_x, line_y, 0, h_gav, rs, init_k=k) - # TODO to be removed - if not new_k: - a = 12 - tangent_line_k(line_x, line_y, 0, h_gav, rs, init_k=k) if new_k >= 0: max_w = math.atan(new_k) # 用于保护弧相切的角度 elif new_k < 0: max_w = math.atan(new_k) + math.pi # TODO to be removed - if max_w < 0: - abc = 123 - tangent_line_k(line_x, line_y, 0, h_gav, rs, init_k=k) - # TODO to be removed # global gCount # gCount = gCount+1 # if gCount % 100 == 0: diff --git a/main.py b/main.py index 5524e29..88862fc 100644 --- a/main.py +++ b/main.py @@ -5,21 +5,19 @@ import timeit def egm(): - # TODO to be removed - cccCount = 0 - avr_n_sf = 0 # 考虑电压的影响 + avr_n_sf = 0 # 考虑电压的影响计算的跳闸率 voltage_n = 3 # 工作电压分成多少份来计算 ng = func_ng(20) h_whole = 140 # 杆塔全高 insulator_c_len = 6.8 # 串子绝缘长度 string_c_len = 9.2 string_g_len = 0.5 - dgc = -0.9 # 导地线水平距离 + dgc = -0.0 # 导地线水平距离 vertical_dgc = 2.7 # 导地线挂点垂直距离 h_g_avr_sag = 11.67 * 2 / 3 - h_c_avr_sag = (14.43 - 11.67) * 2 / 3 + h_c_avr_sag = 14.43 * 2 / 3 h_gav = h_whole - string_g_len - h_g_avr_sag # 地线对地平均高 - h_cav = h_gav - string_c_len - vertical_dgc - h_c_avr_sag # 导线对地平均高 + h_cav = h_whole - string_c_len - vertical_dgc - h_c_avr_sag # 导线对地平均高 shield_angle = math.atan(dgc / (vertical_dgc + string_c_len)) * 180 / math.pi print(f"保护角{shield_angle:.3f}°") for u_bar in range(voltage_n): @@ -31,7 +29,6 @@ def egm(): i_min = min_i(insulator_c_len, u_ph / 1.732) _min_i = i_min # 尝试的最小电流 _max_i = 200 # 尝试的最大电流 - # TODO remove it cad = Draw() cad.draw(i_min, u_ph, h_gav, h_cav, dgc, 2) for i_bar in np.linspace(_min_i, _max_i, int((_max_i - _min_i) / 0.1)): # 雷电流 @@ -40,15 +37,15 @@ def egm(): rc = rc_fun(i_bar, u_ph) rg = rg_fun(i_bar, h_cav) ####### - cccCount += 1 - if cccCount % 30 == 0: - import core - - core.gMSP.add_circle((0, h_gav), rs) - core.gMSP.add_circle( - (dgc, h_cav), rc_fun(i_bar, -u_ph), dxfattribs={"color": 4} - ) - core.gMSP.add_circle((dgc, h_cav), rc) + # cccCount += 1 + # if cccCount % 30 == 0: + # import core + # + # core.gMSP.add_circle((0, h_gav), rs) + # core.gMSP.add_circle( + # (dgc, h_cav), rc_fun(i_bar, -u_ph), dxfattribs={"color": 4} + # ) + # core.gMSP.add_circle((dgc, h_cav), rc) ####### circle_intersection = solve_circle_intersection(rs, rc, h_gav, h_cav, dgc) if not circle_intersection: # if circle_intersection is []