72 lines
2.1 KiB
Python
72 lines
2.1 KiB
Python
#计算轨道数据
|
|
|
|
import numpy as np
|
|
import color
|
|
|
|
#轨道数据表
|
|
sheet_measure = sheet("measure_data")
|
|
|
|
def linear_regression(x, y):
|
|
n = x.size
|
|
sx = x.sum()
|
|
sx2 = (x ** 2).sum()
|
|
sy = y.sum()
|
|
sxy = (x * y).sum()
|
|
delta = n * sx2 - sx ** 2
|
|
a = (n * sxy - sx * sy) / delta
|
|
b = (sx2 * sy - sx * sxy) / delta
|
|
return a, b
|
|
|
|
def calc_measure_data():
|
|
diff_param = param("height_diff_param").strip()
|
|
if not diff_param:
|
|
print(f"{color.yellow}警告:{color.nc}缺少高差参数")
|
|
diff_param = 0
|
|
else:
|
|
diff_param = float(diff_param)
|
|
|
|
with sheet_measure:
|
|
row = 0
|
|
left = []
|
|
right = []
|
|
while not cell(row, 1).empty():
|
|
left.append(cell(row, 1).value)
|
|
right.append(cell(row, 3).value)
|
|
row += 1
|
|
left = np.array(left, dtype = np.float64)
|
|
right = np.array(right, dtype = np.float64)
|
|
n = left.size
|
|
index = np.array(range(left.size), dtype = np.float64)
|
|
h_diff = (left - right) * 1000 + diff_param
|
|
# left_a, left_b = linear_regression(index, left)
|
|
# right_a, right_b = linear_regression(index, right)
|
|
left_a = (left[-1] - left[0]) / (n - 1)
|
|
left_b = left[0]
|
|
right_a = (right[-1] - right[0]) / (n - 1)
|
|
right_b = right[0]
|
|
|
|
left_diff = (left - left_a * index - left_b) * 1000
|
|
right_diff = (right - right_a * index - right_b) * 1000
|
|
|
|
left_diff2 = left_diff[1: -1] - (left_diff[2:] + left_diff[:-2]) / 2
|
|
right_diff2 = right_diff[1: -1] - (right_diff[2:] + right_diff[:-2]) / 2
|
|
|
|
for row, data in enumerate(h_diff):
|
|
cell(row, 4).value = data
|
|
for row, data in enumerate(left_diff):
|
|
cell(row, 5).value = data
|
|
for row, data in enumerate(right_diff):
|
|
cell(row, 6).value = data
|
|
for row, data in enumerate(left_diff2):
|
|
cell(row + 1 , 7).value = data
|
|
for row, data in enumerate(right_diff2):
|
|
cell(row + 1 , 8).value = data
|
|
|
|
graph("road_graph").plot(index, left, "左轨", index, right, "右轨")
|
|
graph("road_relative_graph").plot(index, left_diff, "左轨", index, right_diff, "右轨")
|
|
graph("road_horizon_graph").plot(index, h_diff, "轨道水平")
|
|
graph("road_concave_graph").plot(index[1:-1], left_diff2, "左轨", index[1:-1], right_diff2, "右轨")
|
|
|
|
calc_measure_data()
|
|
sheet_measure.fit_content()
|