Last active
June 20, 2019 15:34
-
-
Save joezen777/98daa6496acf6a6df3269f253f9388f9 to your computer and use it in GitHub Desktop.
Draw Kumo Map
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I believe you need to invert Y.