Files
2025-03-20 12:42:43 +08:00

54 lines
5.9 KiB
Python

class SpeedMap:
def __init__(self):
self.use_acc_speed_maps = False
#25 - 160 KPH
#self.acc_speed_maps = {"25":23.87,"26":24.81,"27":25.68,"28":26.62,"29":27.5,"30":28.37,"31":29.31,"32":30.18,"33":31.06,"34":31.93,"35":32.87,"36":33.75,"37":34.62,"38":35.5,"39":36.31,"40":37.18,"41":38.18,"42":39.12,"43":40.06,"44":41,"45":42,"46":42.93,"47":43.87,"48":44.81,"49":45.81,"50":46.75,"51":47.75,"52":48.68,"53":49.62,"54":50.62,"55":51.56,"56":52.56,"57":53.5,"58":54.5,"59":55.43,"60":56.43,"61":57.37,"62":58.37,"63":59.31,"64":60.31,"65":61.25,"66":62.25,"67":63.25,"68":64.18,"69":65.18,"70":66.18,"71":67.18,"72":68.12,"73":69.12,"74":70.12,"75":71.12,"76":72.06,"77":73.06,"78":74.06,"79":75.06,"80":76.06,"81":77,"82":78,"83":78.93,"84":79.87,"85":80.87,"86":81.81,"87":82.81,"88":83.75,"89":84.75,"90":85.68,"91":86.68,"92":87.62,"93":88.56,"94":89.56,"95":90.5,"96":91.5,"97":92.43,"98":93.43,"99":94.37,"100":95.37,"101":96.31,"102":97.31,"103":98.31,"104":99.25,"105":100.25,"106":101.18,"107":102.18,"108":103.12,"109":104.12,"110":105.06,"111":106.06,"112":107.06,"113":108,"114":109,"115":109.93,"116":110.93,"117":111.87,"118":112.87,"119":113.87,"120":114.81,"121":115.81,"122":116.75,"123":117.75,"124":118.68,"125":119.62,"126":120.62,"127":121.56,"128":122.56,"129":123.5,"130":124.5,"131":125.43,"132":126.43,"133":127.37,"134":128.37,"135":129.31,"136":130.31,"137":131.25,"138":132.25,"139":133.18,"140":134.18,"141":135.12,"142":136.06,"143":137.06,"144":138.06,"145":139,"146":139.93,"147":140.93,"148":141.93,"149":142.87,"150":143.81,"151":144.81,"152":145.81,"153":146.75,"154":147.75,"155":148.68,"156":149.68,"157":150.62,"158":151.62,"159":152.56,"160":153.56}
self.acc_speed_maps = {"1":0.95,"2":1.91,"3":2.86,"4":3.82,"5":4.77,"6":5.73,"7":6.68,"8":7.64,"9":8.59,"10":9.55,"11":10.5,"12":11.46,"13":12.41,"14":13.37,"15":14.32,"16":15.28,"17":16.23,"18":17.19,"19":18.14,"20":19.1,"21":20.05,"22":21.01,"23":21.96,"24":22.92,"25":23.87,"26":24.81,"27":25.68,"28":26.62,"29":27.5,"30":28.37,"31":29.31,"32":30.18,"33":31.06,"34":31.93,"35":32.87,"36":33.75,"37":34.62,"38":35.5,"39":36.31,"40":37.18,"41":38.18,"42":39.12,"43":40.06,"44":41,"45":42,"46":42.93,"47":43.87,"48":44.81,"49":45.81,"50":46.75,"51":47.75,"52":48.68,"53":49.62,"54":50.62,"55":51.56,"56":52.56,"57":53.5,"58":54.5,"59":55.43,"60":56.43,"61":57.37,"62":58.37,"63":59.31,"64":60.31,"65":61.25,"66":62.25,"67":63.25,"68":64.18,"69":65.18,"70":66.18,"71":67.18,"72":68.12,"73":69.12,"74":70.12,"75":71.12,"76":72.06,"77":73.06,"78":74.06,"79":75.06,"80":76.06,"81":77,"82":78,"83":78.93,"84":79.87,"85":80.87,"86":81.81,"87":82.81,"88":83.75,"89":84.75,"90":85.68,"91":86.68,"92":87.62,"93":88.56,"94":89.56,"95":90.5,"96":91.5,"97":92.43,"98":93.43,"99":94.37,"100":95.37,"101":96.31,"102":97.31,"103":98.31,"104":99.25,"105":100.25,"106":101.18,"107":102.18,"108":103.12,"109":104.12,"110":105.06,"111":106.06,"112":107.06,"113":108,"114":109,"115":109.93,"116":110.93,"117":111.87,"118":112.87,"119":113.87,"120":114.81,"121":115.81,"122":116.75,"123":117.75,"124":118.68,"125":119.62,"126":120.62,"127":121.56,"128":122.56,"129":123.5,"130":124.5,"131":125.43,"132":126.43,"133":127.37,"134":128.37,"135":129.31,"136":130.31,"137":131.25,"138":132.25,"139":133.18,"140":134.18,"141":135.12,"142":136.06,"143":137.06,"144":138.06,"145":139,"146":139.93,"147":140.93,"148":141.93,"149":142.87,"150":143.81,"151":144.81,"152":145.81,"153":146.75,"154":147.75,"155":148.68,"156":149.68,"157":150.62,"158":151.62,"159":152.56,"160":153.56,"161":154.53,"162":155.49,"163":156.45,"164":157.41,"165":158.37,"166":159.33,"167":160.29,"168":161.25,"169":162.21,"170":163.17,"171":164.13,"172":165.09,"173":166.05,"174":167.01,"175":167.97,"176":168.92,"177":169.88,"178":170.84,"179":171.8,"180":172.76,"181":173.72,"182":174.68,"183":175.64,"184":176.6,"185":177.56,"186":178.52,"187":179.48,"188":180.44,"189":181.4,"190":182.36,"191":183.32,"192":184.28,"193":185.24,"194":186.2,"195":187.16,"196":188.12,"197":189.08,"198":190.04,"199":191,"200":191.96,"201":192.92,"202":193.88,"203":194.84,"204":195.8,"205":196.76,"206":197.72,"207":198.68,"208":199.64,"209":200.6,"210":201.56,"211":202.52,"212":203.48,"213":204.44,"214":205.4,"215":206.36,"216":207.32,"217":208.28,"218":209.24,"219":210.2,"220":211.16,"221":212.12,"222":213.08,"223":214.04,"224":215,"225":215.96,"226":216.91,"227":217.87,"228":218.83,"229":219.79,"230":220.75,"231":221.71,"232":222.67,"233":223.63,"234":224.59,"235":225.55,"236":226.51,"237":227.47,"238":228.43,"239":229.39,"240":230.35,"241":231.31,"242":232.27,"243":233.23,"244":234.19,"245":235.15,"246":236.11,"247":237.07,"248":238.03,"249":238.99,"250":239.95}
def enable_acc_speed_maps(self, enable_map: bool) -> None:
self.use_acc_speed_maps = enable_map
return
#acc实际速度 -> 显示速度
def get_acc_speed_display(self, acc_speed: float) -> int:
r = int(acc_speed)
if not self.use_acc_speed_maps:
return r
min_key = 0
max_key = 0
min_value = 0
max_value = 0
for key, value in self.acc_speed_maps.items():
if value == acc_speed:
return int(key)
elif value < acc_speed and value > min_value:
min_key = int(key)
min_value = value
elif value > acc_speed and (value < max_value or max_value==0):
max_key = int(key)
max_value = value
mid = 0.5
if min_value > 0 and max_value > 0:
mid = (max_value - min_value) / 2
mid = 0.5 if mid > 0.5 else mid
if min_value > 0 and (acc_speed - min_value) < mid:
return int(min_key)
if max_value > 0 and (max_value - acc_speed) < mid:
return int(max_key)
return r
#acc显示速度 -> 实际速度
def get_acc_speed_actual(self, dis_speed: int) -> float:
r = dis_speed
if not self.use_acc_speed_maps:
return r
for key, value in self.acc_speed_maps.items():
if int(key) == dis_speed:
return value
return r