Skip to content

Instantly share code, notes, and snippets.

@joezen777
Last active June 20, 2019 15:34
Show Gist options
  • Save joezen777/98daa6496acf6a6df3269f253f9388f9 to your computer and use it in GitHub Desktop.
Save joezen777/98daa6496acf6a6df3269f253f9388f9 to your computer and use it in GitHub Desktop.
Draw Kumo Map
from tkinter import Tk, Canvas, Frame, BOTH
import numpy as np
import math
multiplier = 90
def _create_circle(self, x, y, r, **kwargs):
return self.create_oval(x - r, y - r, x + r, y + r, **kwargs)
Canvas.create_circle = _create_circle
class Example(Frame):
def __init__(self):
super().__init__()
self.on_track = 0
self.progress = 0
self.yaw = 0
self.x = 0
self.y = 0
self.z = 0
self.distance_from_center = 0
self.distance_from_border_1 = 0
self.distance_from_border_2 = 0
self.steps = 0
self.progress_at_beginning_of_race = 0
self.reward_in_episode = 0
self.prev_progress = 0
self.steps = 0
self.car_x = 1.75
self.car_y = 0.6
self.car_heading = 0.0
self.car_throttle = 0.0
self.car_max_speed = 8.0
self.car_max_left_angle = -30.0
self.car_max_right_angle = 30.0
self.throttle_actions = 3
self.steering_actions = 7
self.initUI()
def initUI(self):
self.master.title("Lines")
self.pack(fill=BOTH, expand=1)
canvas = Canvas(self)
# canvas.create_line(15, 25, 200, 25)
# canvas.create_line(300, 35, 300, 200, dash=(4, 2))
# canvas.create_line(55, 85, 155, 85, 105, 180, 55, 85)
self.waypoints = vertices = np.zeros((169, 2))
self.road_width = 0.660329329849572
vertices[0][0] = 3.9968843292236325
vertices[0][1] = -2.398085115814209
vertices[1][0] = 4.108486819458006
vertices[1][1] = -2.398085115814209
vertices[2][0] = 4.220117408752442
vertices[2][1] = -2.398085115814209
vertices[3][0] = 4.331728619384766
vertices[3][1] = -2.3980848251342772
vertices[4][0] = 4.443350294494627
vertices[4][1] = -2.398085115814209
vertices[5][0] = 4.554988441467286
vertices[5][1] = -2.398085115814209
vertices[6][0] = 4.666571746826172
vertices[6][1] = -2.398085115814209
vertices[7][0] = 4.7781641601562495
vertices[7][1] = -2.398085115814209
vertices[8][0] = 4.8896753768920895
vertices[8][1] = -2.398085115814209
vertices[9][0] = 5.001236978149414
vertices[9][1] = -2.398085115814209
vertices[10][0] = 5.112820671081545
vertices[10][1] = -2.398085115814209
vertices[11][0] = 5.22445222930908
vertices[11][1] = -2.398085115814209
vertices[12][0] = 5.336061114501954
vertices[12][1] = -2.398085115814209
vertices[13][0] = 5.4476612792968755
vertices[13][1] = -2.3980848251342772
vertices[14][0] = 5.559263769531249
vertices[14][1] = -2.398085115814209
vertices[15][0] = 5.670884088134765
vertices[15][1] = -2.398085115814209
vertices[16][0] = 5.782510801696777
vertices[16][1] = -2.398085115814209
vertices[17][0] = 5.894127050781252
vertices[17][1] = -2.398085115814209
vertices[18][0] = 6.00181679534912
vertices[18][1] = -2.398085115814209
vertices[19][0] = 6.173943692016602
vertices[19][1] = -2.398085115814209
vertices[20][0] = 6.345643870544436
vertices[20][1] = -2.398085115814209
vertices[21][0] = 6.537344378662107
vertices[21][1] = -2.398085115814209
vertices[22][0] = 6.768550421142578
vertices[22][1] = -2.398085115814209
vertices[23][0] = 6.98473063659668
vertices[23][1] = -2.398085115814209
vertices[24][0] = 7.162758142089844
vertices[24][1] = -2.398085115814209
vertices[25][0] = 7.274807891845702
vertices[25][1] = -2.398085115814209
vertices[26][0] = 7.3869537597656265
vertices[26][1] = -2.398085115814209
vertices[27][0] = 7.499844155883789
vertices[27][1] = -2.398085115814209
vertices[28][0] = 7.61068235168457
vertices[28][1] = -2.384343028259277
vertices[29][0] = 7.715040710449218
vertices[29][1] = -2.3489811363220214
vertices[30][0] = 7.806151428222655
vertices[30][1] = -2.289116379547119
vertices[31][0] = 7.879453155517577
vertices[31][1] = -2.2083449531555175
vertices[32][0] = 7.931933673095703
vertices[32][1] = -2.1111327667236326
vertices[33][0] = 7.969687957763672
vertices[33][1] = -2.0054785568237286
vertices[34][0] = 8.009337475585937
vertices[34][1] = -1.9026145835876465
vertices[35][0] = 8.063614782714842
vertices[35][1] = -1.8110042839050309
vertices[36][0] = 8.13654327697754
vertices[36][1] = -1.734422282028198
vertices[37][0] = 8.224194903564452
vertices[37][1] = -1.670004508590698
vertices[38][0] = 8.315116873168945
vertices[38][1] = -1.6062793285369872
vertices[39][0] = 8.397656408691406
vertices[39][1] = -1.5321647148132325
vertices[40][0] = 8.462792355346679
vertices[40][1] = -1.44245458984375
vertices[41][0] = 8.509496481323243
vertices[41][1] = -1.3409916938781739
vertices[42][0] = 8.540622875976563
vertices[42][1] = -1.2328676250457764
vertices[43][0] = 8.560585998535156
vertices[43][1] = -1.12199483833313
vertices[44][0] = 8.572986404418945
vertices[44][1] = -1.010168572998047
vertices[45][0] = 8.580685159301758
vertices[45][1] = -0.8628370136260985
vertices[46][0] = 8.583536148071289
vertices[46][1] = -0.7021988536834717
vertices[47][0] = 8.58443454284668
vertices[47][1] = -0.5753229497909546
vertices[48][0] = 8.584472137451172
vertices[48][1] = -0.3747735631942749
vertices[49][0] = 8.584492291259764
vertices[49][1] = -0.19896346716880797
vertices[50][0] = 8.584528335571289
vertices[50][1] = -0.00428482018969953
vertices[51][0] = 8.584556240844726
vertices[51][1] = 0.2119464259147644
vertices[52][0] = 8.58433532409668
vertices[52][1] = 0.3881836337089538
vertices[53][0] = 8.584120608520507
vertices[53][1] = 0.5002564319610595
vertices[54][0] = 8.580803369140625
vertices[54][1] = 0.6122315738677978
vertices[55][0] = 8.571400067138672
vertices[55][1] = 0.7239659116744994
vertices[56][0] = 8.555663430786133
vertices[56][1] = 0.8350995351791382
vertices[57][0] = 8.531425762939453
vertices[57][1] = 0.9447460159301757
vertices[58][0] = 8.500583847045899
vertices[58][1] = 1.0525313941955565
vertices[59][0] = 8.46601541442871
vertices[59][1] = 1.1590160766601563
vertices[60][0] = 8.431132659912109
vertices[60][1] = 1.2648468261718748
vertices[61][0] = 8.40480791015625
vertices[61][1] = 1.3722508808135987
vertices[62][0] = 8.388611611938476
vertices[62][1] = 1.4806030849456786
vertices[63][0] = 8.405742349243162
vertices[63][1] = 1.6502103195190427
vertices[64][0] = 8.463046215820313
vertices[64][1] = 1.8476967147827148
vertices[65][0] = 8.53134553527832
vertices[65][1] = 2.0626024925231934
vertices[66][0] = 8.55994340209961
vertices[66][1] = 2.291900899505615
vertices[67][0] = 8.514377191162108
vertices[67][1] = 2.4563697364807124
vertices[68][0] = 8.426188388061522
vertices[68][1] = 2.610280400085449
vertices[69][0] = 8.300192977905272
vertices[69][1] = 2.7344502433776854
vertices[70][0] = 8.126715969848632
vertices[70][1] = 2.814492935180664
vertices[71][0] = 7.936248913574218
vertices[71][1] = 2.8448311027526856
vertices[72][0] = 7.69728442993164
vertices[72][1] = 2.842157622528076
vertices[73][0] = 7.414035440063476
vertices[73][1] = 2.8335633796691893
vertices[74][0] = 7.165993991088866
vertices[74][1] = 2.8013261032104495
vertices[75][0] = 6.971922503662109
vertices[75][1] = 2.736647105407715
vertices[76][0] = 6.792461752319335
vertices[76][1] = 2.6331662124633786
vertices[77][0] = 6.649091239929199
vertices[77][1] = 2.4822172866821286
vertices[78][0] = 6.649091239929199
vertices[78][1] = 2.4822172866821286
vertices[79][0] = 6.544510801696777
vertices[79][1] = 2.30300177230835
vertices[80][0] = 6.491997534179687
vertices[80][1] = 2.1105175910949705
vertices[81][0] = 6.481333262634276
vertices[81][1] = 1.915810774230957
vertices[82][0] = 6.498144058227538
vertices[82][1] = 1.7427884864807128
vertices[83][0] = 6.531408113098145
vertices[83][1] = 1.5830480915069578
vertices[84][0] = 6.566860212707519
vertices[84][1] = 1.4499332515716552
vertices[85][0] = 6.603410694885254
vertices[85][1] = 1.3282434410095214
vertices[86][0] = 6.641890516662597
vertices[86][1] = 1.2071183731079103
vertices[87][0] = 6.678002847290038
vertices[87][1] = 1.0942358253479
vertices[88][0] = 6.713907051086426
vertices[88][1] = 0.9754661369323733
vertices[89][0] = 6.748999676513671
vertices[89][1] = 0.8351240734100341
vertices[90][0] = 6.771528340148926
vertices[90][1] = 0.6824846742630002
vertices[91][0] = 6.770214854431152
vertices[91][1] = 0.5170887620925904
vertices[92][0] = 6.739964762878418
vertices[92][1] = 0.35214239854812623
vertices[93][0] = 6.678730709838867
vertices[93][1] = 0.20278325449079276
vertices[94][0] = 6.584536071777343
vertices[94][1] = 0.073577370595932
vertices[95][0] = 6.465435395812988
vertices[95][1] = -0.022756241798400884
vertices[96][0] = 6.332671018981934
vertices[96][1] = -0.08443354539871215
vertices[97][0] = 6.192271061706543
vertices[97][1] = -0.11442267904281617
vertices[98][0] = 6.048808113098144
vertices[98][1] = -0.11327295513153077
vertices[99][0] = 5.9084566024780285
vertices[99][1] = -0.0796875414848329
vertices[100][0] = 5.777142330932618
vertices[100][1] = -0.017066400146484362
vertices[101][0] = 5.654321920776367
vertices[101][1] = 0.04993410081863381
vertices[102][0] = 5.543534690856934
vertices[102][1] = 0.08980346956253056
vertices[103][0] = 5.431823098754883
vertices[103][1] = 0.10004641265869134
vertices[104][0] = 5.321303681945801
vertices[104][1] = 0.08101749906539898
vertices[105][0] = 5.223240675354005
vertices[105][1] = 0.0331226148605349
vertices[106][0] = 5.136034951782227
vertices[106][1] = -0.03443096523284911
vertices[107][0] = 5.057559121704101
vertices[107][1] = -0.11292725191116332
vertices[108][0] = 4.981652514648437
vertices[108][1] = -0.19307756190299985
vertices[109][0] = 4.901582789611815
vertices[109][1] = -0.265934788107872
vertices[110][0] = 4.813124816894531
vertices[110][1] = -0.3229467545032501
vertices[111][0] = 4.716816741943359
vertices[111][1] = -0.3564500641271472
vertices[112][0] = 4.6162901260375975
vertices[112][1] = -0.3593997144155204
vertices[113][0] = 4.51511413116455
vertices[113][1] = -0.3368315144300461
vertices[114][0] = 4.416144396972657
vertices[114][1] = -0.29576415982246396
vertices[115][0] = 4.317549252319336
vertices[115][1] = -0.247266593170166
vertices[116][0] = 4.215311694335938
vertices[116][1] = -0.20396510591506956
vertices[117][0] = 4.107997895812988
vertices[117][1] = -0.18035982437133785
vertices[118][0] = 3.999729116821289
vertices[118][1] = -0.184920810508728
vertices[119][0] = 3.8959674270629883
vertices[119][1] = -0.2160716101646423
vertices[120][0] = 3.800001385498047
vertices[120][1] = -0.27164925882816315
vertices[121][0] = 3.709108677673339
vertices[121][1] = -0.33655119952783036
vertices[122][0] = 3.616933296203613
vertices[122][1] = -0.3951910578489304
vertices[123][0] = 3.518029643249511
vertices[123][1] = -0.4385550443172457
vertices[124][0] = 3.4129790786743164
vertices[124][1] = -0.46291566977500914
vertices[125][0] = 3.3047851013183593
vertices[125][1] = -0.4704929507255554
vertices[126][0] = 3.1941414672851565
vertices[126][1] = -0.4655450453758239
vertices[127][0] = 3.0825288032531737
vertices[127][1] = -0.45816466374397274
vertices[128][0] = 2.9700563079833975
vertices[128][1] = -0.4528322554588317
vertices[129][0] = 2.8574543632507323
vertices[129][1] = -0.4456599219322205
vertices[130][0] = 2.7442044929504394
vertices[130][1] = -0.4349176088809967
vertices[131][0] = 2.6292975532531737
vertices[131][1] = -0.4197862710952759
vertices[132][0] = 2.5105101333618163
vertices[132][1] = -0.40448946981430056
vertices[133][0] = 2.3889220123291004
vertices[133][1] = -0.39316141550540923
vertices[134][0] = 2.26488229675293
vertices[134][1] = -0.38975981838703155
vertices[135][0] = 2.1411589378356934
vertices[135][1] = -0.4009938316822052
vertices[136][0] = 2.020786827850342
vertices[136][1] = -0.4341942760944366
vertices[137][0] = 1.8794536911010733
vertices[137][1] = -0.5233404517173774
vertices[138][0] = 1.7949362239837645
vertices[138][1] = -0.6104808813095093
vertices[139][0] = 1.7206921123504637
vertices[139][1] = -0.7506510318756103
vertices[140][0] = 1.6887726943969725
vertices[140][1] = -0.8770849569320678
vertices[141][0] = 1.6724089160919189
vertices[141][1] = -1.0758010009765624
vertices[142][0] = 1.6601904273986814
vertices[142][1] = -1.2993672481536864
vertices[143][0] = 1.6567321598052978
vertices[143][1] = -1.5105078002929688
vertices[144][0] = 1.6593520095825194
vertices[144][1] = -1.6933875289916993
vertices[145][0] = 1.6648058433532715
vertices[145][1] = -1.8153231094360351
vertices[146][0] = 1.6874392971038819
vertices[146][1] = -1.9510643394470213
vertices[147][0] = 1.7280409854888914
vertices[147][1] = -2.050013919830322
vertices[148][0] = 1.7906410888671873
vertices[148][1] = -2.1427592277526855
vertices[149][0] = 1.870859399795532
vertices[149][1] = -2.223833251953125
vertices[150][0] = 1.9645064453124998
vertices[150][1] = -2.2893214057922364
vertices[151][0] = 2.0718011558532714
vertices[151][1] = -2.3412403297424316
vertices[152][0] = 2.18892162322998
vertices[152][1] = -2.375639586639404
vertices[153][0] = 2.3153282485961912
vertices[153][1] = -2.3939165718078614
vertices[154][0] = 2.429082545471191
vertices[154][1] = -2.398216987609863
vertices[155][0] = 2.542245696258545
vertices[155][1] = -2.3981534255981445
vertices[156][0] = 2.6547331130981444
vertices[156][1] = -2.398104203796387
vertices[157][0] = 2.766569309997559
vertices[157][1] = -2.398085115814209
vertices[158][0] = 2.878082949066162
vertices[158][1] = -2.398085115814209
vertices[159][0] = 2.990368634033203
vertices[159][1] = -2.398085115814209
vertices[160][0] = 3.102650637054443
vertices[160][1] = -2.398085115814209
vertices[161][0] = 3.214940197753906
vertices[161][1] = -2.398085115814209
vertices[162][0] = 3.3272259796142576
vertices[162][1] = -2.398085115814209
vertices[163][0] = 3.438768783569336
vertices[163][1] = -2.398085115814209
vertices[164][0] = 3.5503902648925783
vertices[164][1] = -2.398085115814209
vertices[165][0] = 3.6620016693115236
vertices[165][1] = -2.398085115814209
vertices[166][0] = 3.7736411727905272
vertices[166][1] = -2.3980848251342772
vertices[167][0] = 3.8852564529418943
vertices[167][1] = -2.398085115814209
vertices[168][0] = 3.9968843292236325
vertices[168][1] = -2.398085115814209
road_width = 0.660329329849572 * multiplier
radius = math.sqrt((road_width * road_width) / 2)
for i in range(0, 168, 1):
vertices[i][0] = vertices[i][0] * multiplier
vertices[i][1] = (vertices[i][1] + 4) * multiplier
for i in range(0, 167, 1):
canvas.create_circle(
vertices[i][0], vertices[i][1], 10, fill="blue", outline="#DDD", width=4
)
if i == 167:
roadside_vertices = getLeftRightVectors(
vertices[i], vertices[0], radius, vertices[i - 1]
)
canvas.create_line(
roadside_vertices[0][0],
roadside_vertices[0][1],
roadside_vertices[1][0],
roadside_vertices[1][1],
)
canvas.create_line(
roadside_vertices[2][0],
roadside_vertices[2][1],
roadside_vertices[3][0],
roadside_vertices[3][1],
)
break
canvas.create_line(
vertices[i][0], vertices[i][1], vertices[i + 1][0], vertices[i + 1][1]
)
roadside_vertices = getLeftRightVectors(
vertices[i], vertices[i + 1], radius, vertices[i - 1]
)
canvas.create_line(
roadside_vertices[0][0],
roadside_vertices[0][1],
roadside_vertices[1][0],
roadside_vertices[1][1],
)
canvas.create_line(
roadside_vertices[2][0],
roadside_vertices[2][1],
roadside_vertices[3][0],
roadside_vertices[3][1],
)
canvas.pack(fill=BOTH, expand=1)
def getLeftRightVectors(firstVertex, secondVertex, radius, lastVertex):
left_vertex = getRadialVector(firstVertex, secondVertex, radius, math.pi / 2.0)
right_vertex = getRadialVector(firstVertex, secondVertex, radius, math.pi / -2.0)
backleft_vertex = getRadialVector(lastVertex, firstVertex, radius, math.pi / 2.0)
backright_vertex = getRadialVector(lastVertex, firstVertex, radius, math.pi / -2.0)
result = np.zeros((4, 2))
result[0][0] = backleft_vertex[0]
result[0][1] = backleft_vertex[1]
result[1][0] = left_vertex[0]
result[1][1] = left_vertex[1]
result[2][0] = backright_vertex[0]
result[2][1] = backright_vertex[1]
result[3][0] = right_vertex[0]
result[3][1] = right_vertex[1]
return result
def getRadialVector(firstVertex, lastVertex, radius, angleOffset):
delta_x = firstVertex[0] - lastVertex[0]
delta_y = firstVertex[1] - lastVertex[1]
theta_radians = math.atan2(delta_y, delta_x)
offset_radians = theta_radians + angleOffset
if offset_radians > math.pi * 2.0:
offset_radians = offset_radians - math.pi * 2.0
if offset_radians < math.pi * -2.0:
offset_radians = offset_radians + math.pi * 2.0
result = np.zeros((2))
result[0] = radius * math.cos(offset_radians) + firstVertex[0]
result[1] = radius * math.sin(offset_radians) + firstVertex[1]
return result
def main():
root = Tk()
ex = Example()
root.geometry("800x650+300+300")
root.mainloop()
if __name__ == "__main__":
main()
@kenklin
Copy link

kenklin commented Jun 20, 2019

I believe you need to invert Y.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment